Скрипт упал с ошибкой, а временный файл остался. Или соединение не закрылось. Или lock-файл завис. Это классика и
trap решает её в одну строчку.Что делает
trapРегистрирует функцию, которая запустится при выходе из скрипта — неважно, нормальном или аварийном.
Вы один раз описываете логику очистки и забываете об этом:
#!/bin/bash
set -euo pipefail
tmpfile=$(mktemp)
cleanup() {
rm -f "$tmpfile"
echo "Cleaned up temporary files"
}
trap cleanup EXIT # сработает при любом выходе
# Основная работа
echo "Processing..." > "$tmpfile"
cat "$tmpfile"
EXIT это сигнал, который bash отправляет при завершении скрипта. Функция cleanup удалит временный файл, даже если скрипт упал на середине.Что можно убирать через
trapВременные файлы и директории, lock-файлы, открытые соединения с базой, фоновые процессы, которые скрипт запустил сам.
Почему это лучше, чем
rm в конце скриптаrm в конце не выполнится, если скрипт упадёт раньше. trap cleanup EXIT выполнится всегда — это гарантия на уровне интерпретатора.📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#root_prompt