Очистка временых файлов в shell-скриптах
Допустим у вас есть shell-скрипт который создаёт временные файлы, именованые пайпы и прочие вещи которые необходимо очищать перед окончанием скрита.
Но если пользователь прервал работу вашего скрипта (например по ctrl-c), то в системе останется мусор.
Проблема решается регистрацией обработчика сигнала EXIT. Например
#!/bin/sh TMPFILE=`mktemp` trap "rm -f $TMPFILE; echo процедура очистки 1>&2" EXIT # ....
Когда скрипт закончится (не зависимо от того закончится он нормально или пользователь его прервёт), обработчик удалит временный файл и выведет отладочное сообщение.
Грубо говоря это аналог C-шной фунции atexit() или C++-шного деструктора класса (только для всего скрипта).
- 3180 просмотров
Страница для печати


Не хватает "trap - EXIT" в процедуре обработки TRAP. Если по каким-то причинам rm работает медленно, возможны гонки с двумя и более параллельными rm-ами, удаляющий один и тот же файл.
Кроме того, код возврата программы с таким обработчиком выхода будет равен коду возврата rm -f, т. е. 0, за исключением предыдущего слкчая :)
Вау, класс!!! То, что нужно. Мега респект :))))))))))))))))))
Отправить комментарий