Как удалить временный файл при выходе из Bash через trap

Как удалить временный файл при выходе из Bash через trap
Содержание статьи

Создайте временный файл через mktemp и сразу зарегистрируйте очистку с trap cleanup EXIT. Bash выполнит функцию при выходе из оболочки. Mentoring.digital разбирает короткий пример, который удаляет только путь, полученный от mktemp.

Как зарегистрировать очистку

Имя временного файла сохраняется в переменной. В обработчике путь заключён в кавычки, поэтому пробелы внутри имени сохраняются. Аргумент -- завершает список опций у rm.

#!/usr/bin/env bash
set -eu

tmp=$(mktemp)

cleanup() {
    rm -f -- "$tmp"
}

trap cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM

printf '%s\n' 'Черновик' > "$tmp"
cat -- "$tmp"

Что произойдёт при прерывании

При обработке INT и TERM сценарий явно выходит с кодом 130 или 143. Тогда вызывается и обработчик EXIT. Время выполнения обработчика может зависеть от того, ждёт ли Bash завершения запущенной команды. Сигнал SIGKILL перехватить невозможно, поэтому очистка после принудительной остановки требует отдельного механизма.

Как проверить временный файл и код выхода

В тестовой копии напечатайте путь после регистрации trap. Проверьте обычное завершение и выход через exit 1. Для проверки прерывания можно добавить паузу и нажать Ctrl+C. После каждого запуска проверьте наличие именно этого файла и код выхода команды. Если файл остаётся, проверьте сообщение rm и права каталога.

Такой пример можно разобрать на практике DevOps. Для сценария с фоновым процессом и несколькими временными файлами полезен разбор с наставником по Linux и Bash.

Похожие статьи по данной теме