Bash:
Обработка ошибок

Как это делать:

#!/bin/bash

# Перенаправление stderr в файл
grep "something" file.txt 2> errors.log

# Обработка ошибок с помощью статусов выхода
if ! grep "something" file.txt; then
    echo "Ой, что-то пошло не так при поиске 'something'."
    exit 1
fi

# Использование trap для очистки перед выходом из-за ошибки
cleanup() {
  echo "Очистка временных файлов..."
  rm temp_*
}

trap cleanup ERR

# намеренная ошибка: файл не существует
cat temp_file.txt

Пример вывода при возникновении ошибки:

Очистка временных файлов...
cat: temp_file.txt: Нет такого файла или каталога

Глубокое погружение

Обработка ошибок в Bash-скриптах восходит к истокам Unix shell, где надежные и эффективные скрипты были (и остаются) жизненно важны для системного администрирования и автоматизации. Традиционно ошибки в Bash обрабатываются путем проверки статуса выхода команды, который по соглашению возвращает 0 в случае успеха и ненулевое значение в случае неудачи.

Bash ввел команду trap как встроенную, позволяя пользователям указывать команды для выполнения при различных сигналах или выходах из скрипта. Это полезно для задач очистки или как механизм обработки ошибок последней инстанции.

Также существует команда set, которая может изменить поведение Bash при ошибках. Например, set -e заставит скрипт немедленно завершиться, если любая команда завершится с ненулевым статусом, что является способом быстро обнаружить ошибку и избежать каскадных ошибок.

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

Хотя тщательная обработка ошибок иногда может показаться избыточной для маленьких скриптов, это практика, которая может сэкономить много времени на отладке и предотвратить неожиданное поведение как для вас, так и для пользователей.

См. также

Помните, скриптинг - это форма искусства, и как вы обрабатываете промахи и спотыкания, может сделать ваше творение более устойчивым. Счастливого скриптинга!