2013-03-06 4 views
5

У меня есть сценарий, который записывает временные файлы, чтобы помочь в его выполнении. В конце моего сценария я просто вызываю rm filename для очистки файлов temp, которые я создал. Проблема заключается в том, когда скрипт заканчивается из-за ошибки или прерывается. В этих случаях заявление rm никогда не достигается, и поэтому файлы никогда не очищаются. Есть ли способ указать некоторую команду для запуска на выходе независимо от того, был ли это успешный выход?Есть ли способ выполнить команду при выходе (независимо от того, как вышел скрипт)?

+0

здесь см - может быть, что вы ищете http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman

ответ

0

Для прерываний вы можете использовать onintr, чтобы указать обработчик, который удаляет файлы, а затем выходит.

2

Да; Вы можете написать:

trap 'rm filename' EXIT 

(см. описание trap в §4.1 "Bourne Shell Builtins" of the Bash Reference Manual)

Естественно, существуют чрезвычайные обстоятельства, когда команда не будет запускать — например, если кто-то вдруг отключит машину, или даже просто отправляет SIGKILL в экземпляр Bash, запускающий скрипт —, но это примерно так же надежно, как вы можете получить.

2

Да, вы можете использовать trap так:

trap "rm -f filename" EXIT 

Сценарий может выглядеть следующим образом:

#/bin/bash 
trap "rm -f filename" EXIT # remove file when script exits 
touch filename    # create file 
some-invalid-command   # trigger an error 
+0

Хммм, похоже, это не работает для меня. Файлы все еще существуют, когда скрипт завершает работу – imnotfred

+0

Попробуйте пример, который я опубликовал, должен работать нормально, если у вас есть разрешение на удаление рассматриваемого файла. – Martin

0

Для прерываний: установить скрипт для улавливания сигналов, как SIGHUP и SIGTERM. Это поможет вам обойти все, кроме SIGKILL (которые невозможно поймать). Google «ловушка сигнал Баша скрипт»

Для nonsuccessful выхода: структура вы код таким образом, что вы вызываете функцию ет файл (или просто положить заявление), прежде чем выйти из сценария

Смежные вопросы