Как написать Bash-скрипт так, чтобы при ошибке команды он завершался с ошибкой, а созданные временные файлы удалялись? Какие опции set и механизм trap используете?

Обычно используют set -euo pipefail и trap на EXIT для очистки. Но errexit имеет исключения, поэтому критичные ошибки и команды в условных конструкциях нужно проверять явно.

Короткий ответ

Что ответить на собеседовании

Обычно используют set -euo pipefail и trap на EXIT для очистки. Но errexit имеет исключения, поэтому критичные ошибки и команды в условных конструкциях нужно проверять явно.

Подробный разбор

Ответ с пояснениями

Обычно используют set -euo pipefail и trap на EXIT для очистки. Но errexit имеет исключения, поэтому критичные ошибки и команды в условных конструкциях нужно проверять явно.

#!/usr/bin/env bash
set -euo pipefail
job_tmp=$(mktemp) || exit 1
cleanup() {
    status=$?
    trap - EXIT
    rm -f -- "$job_tmp" || :
    exit "$status"
}
trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
some_command > "$job_tmp"

-u обнаруживает необъявленные переменные, pipefail учитывает сбои звеньев pipeline. -e не срабатывает во всех контекстах, например в ряде проверок if и цепочек &&. SIGKILL перехватить нельзя. Удаляется только конкретный файл, созданный mktemp.

Источник: www.gnu.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее