Когда скрипт падает - хочется понять где, почему и с каким кодом ошибки. Вместо угадываний можно сделать систему отлова ошибок и логирования через trap и ERR. Это способ автоматически выполнять команду при любой ошибке во время выполнения скрипта. Аналогично try/catch, только в стиле Bash.
▪️ Пример: лог ошибок в файл
#!/bin/bash
set -Eeu -o pipefail
LOGFILE="/tmp/script_errors.log"
# Функция, вызываемая при ошибке
error_handler() {
echo "[$(date)] Ошибка в строке $1. Код: $2" >> "$LOGFILE"
}
trap 'error_handler $LINENO $?' ERR
Теперь при любой ошибке будет лог:
[2025-04-29 12:45:03] Ошибка в строке 15. Код: 1
🌟 Что ещё можно логировать?
- PID скрипта: $$
- Имя текущей функции: ${FUNCNAME[0]}
- Последнюю выполненную команду: BASH_COMMAND
- Пользователя: $USER
- Текущий каталог: pwd
▪️ Например:
trap 'echo "[$(date)] Ошибка в $BASH_COMMAND (PID $$, строка $LINENO, пользователь $USER)" >> $LOGFILE' ERR
▪️ Сценарий с полным "черным ящиком"
#!/bin/bash
set -Eeuo pipefail
trap 'echo "[ERROR] [$LINENO] $BASH_COMMAND (exit $?)" >> /var/log/myscript_crash.log' ERR
trap 'echo "[INFO] Завершение скрипта: $?" >> /var/log/myscript.log' EXIT
BashTex 📱 #bash #utils