TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #605 628
caller: определение места вызова функции в Bash

При отладке больших Bash-скриптов часто недостаточно знать, какая функция упала. Нужно понять, откуда именно она была вызвана.

Для этого есть встроенная команда caller.

▪️Базовый пример

function test_func() {
caller
}

test_func


Вывод:
5 main

Это означает: функция была вызвана из 5-й строки функции main (или основного скрипта).

▪️Использование в логировании ошибок

Например, создаём функцию логирования:

log_error() {
echo "Error from:"
caller
}

backup() {
log_error
}

backup


Теперь при ошибке видно не только сообщение, но и источник вызова.

▪️Получение полного стека вызовов

caller умеет подниматься вверх по стеку:

function level3() {
caller 0
caller 1
}

function level2() {
level3
}

function level1() {
level2
}

level1


caller 0 покажет текущий уровень, а caller 1 - предыдущий.

▪️Практический пример с обработчиком ошибок

die() {
echo "Failed at:"
caller
exit 1
}

deploy() {
false || die
}

deploy


Вместо:
Failed
получаем:
Failed at:
12 deploy

Сразу понятно, где искать проблему.

▪️Отличие от $FUNCNAME

В Bash уже есть массивы:
echo "${FUNCNAME[@]}"
Они показывают цепочку функций:

deploy backup main


А caller дополнительно даёт:

номер строки;
имя файла;
контекст вызова.

▪️Где полезно

большие Bash-проекты;
библиотеки функций;
CI/CD-скрипты;
автоматизация с большим количеством уровней вызова.

▪️Почему это важно

В маленьких скриптах ошибка обычно очевидна. Но когда Bash превращается в несколько сотен строк с десятками функций, трассировка вызовов становится такой же важной, как в обычных языках программирования.

caller - простой встроенный инструмент, который превращает отладку Bash из поиска по всему файлу в точное указание места проблемы.

BashTex 📱 #bash #linux
Telegram BashTex | Linux Авторский канал для тех, кто хочет глубже погрузиться в мир Linux. Подойдет для разработчиков, системных администраторов и DevOps Реклама: @dad_admin
  • 👍 8
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →