Очистка временых файлов в shell-скриптах


ramok аватар

ramok - Posted on 26 Ноябрь 2008

Допустим у вас есть shell-скрипт который создаёт временные файлы, именованые пайпы и прочие вещи которые необходимо очищать перед окончанием скрита.
Но если пользователь прервал работу вашего скрипта (например по ctrl-c), то в системе останется мусор.

Проблема решается регистрацией обработчика сигнала EXIT. Например

#!/bin/sh
 
TMPFILE=`mktemp`
trap "rm -f $TMPFILE; echo процедура очистки 1>&2" EXIT 
 
# ....

Когда скрипт закончится (не зависимо от того закончится он нормально или пользователь его прервёт), обработчик удалит временный файл и выведет отладочное сообщение.

Грубо говоря это аналог C-шной фунции atexit() или C++-шного деструктора класса (только для всего скрипта).

5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

Не хватает "trap - EXIT" в процедуре обработки TRAP. Если по каким-то причинам rm работает медленно, возможны гонки с двумя и более параллельными rm-ами, удаляющий один и тот же файл.

Кроме того, код возврата программы с таким обработчиком выхода будет равен коду возврата rm -f, т. е. 0, за исключением предыдущего слкчая :)

Вау, класс!!! То, что нужно. Мега респект :))))))))))))))))))

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.