В shell-скриптах часто создают временную папку:
tmp_dir=$(mktemp -d)
А потом в конце вручную удаляют её:
rm -rf "$tmp_dir"
Проблема в том, что скрипт может завершиться раньше: ошибка команды, Ctrl+C, ранний
exit. Тогда временные файлы останутся лежать на диске.Для таких случаев в Bash используют trap:
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
Теперь cleanup выполнится при выходе из скрипта почти в любом сценарии:
cp app.log "$tmp_dir/"
grep "ERROR" "$tmp_dir/app.log"
Даже если grep завершится ошибкой, trap всё равно сработает при выходе.
Это удобно сочетать со строгим режимом:
set -euo pipefail
Полный минимальный шаблон:
set -euo pipefail
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
Если нужно выполнить несколько действий при завершении, лучше вынести cleanup в функцию:
cleanup() {
rm -rf "$tmp_dir"
}
trap cleanup EXITТакой подход полезен для архивов, временных конфигов, скачанных файлов, тестовых директорий и промежуточных данных в CI/CD.
➡️ DevOps Ready | #совет
