


Создайте временный файл через 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.