2013-03-06 9 views
5

Mam skrypt, który wypisuje pliki tymczasowe, aby pomóc w jego wykonaniu. Pod koniec mojego skryptu po prostu wywołuję rm filename, aby posprzątać utworzone przez mnie pliki tymczasowe. Problem polega na tym, że skrypt kończy się z powodu błędu lub jest przerywany. W takich przypadkach instrukcja rm nigdy nie zostanie osiągnięta, a pliki nigdy nie zostaną wyczyszczone. Czy istnieje sposób, w jaki mogę określić niektóre polecenia do uruchomienia na wyjściu, niezależnie od tego, czy udane wyjście zostało pomyślnie zakończone, czy nie?Czy istnieje sposób wykonywania polecenia przy wyjściu (niezależnie od tego, jak skrypt został zakończony)?

+0

spojrzeć tutaj - może być to, co szukasz http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman

Odpowiedz

0

W przypadku przerwań można użyć onintr, aby określić program obsługi, który usuwa pliki, a następnie kończy działanie.

2

Tak; można napisać:

trap 'rm filename' EXIT 

(. Patrz opis trap w §4.1 "Bourne Shell Builtins" of the Bash Reference Manual)

Naturalnie istnieją skrajne okoliczności, w których polecenie nie zostanie uruchomione — przykład jeśli ktoś nagle odłącza maszynę, lub nawet tylko wysyła SIGKILL do instancji Bash z uruchomionym skryptem —, ale jest to mniej więcej tak wiarygodne, jak tylko można uzyskać.

2

Tak, można użyć trap tak:

trap "rm -f filename" EXIT 

skrypt mógłby wyglądać tak:

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

Hmmm to nie działa dla mnie. Pliki nadal istnieją, gdy skrypt zakończy działanie – imnotfred

+0

Wypróbuj przykład, który napisałem, powinien działać dobrze, jeśli masz uprawnienia do usunięcia danego pliku. – Martin

0

za przerwy: skonfigurować skrypt do sygnałów pułapki jak SIGHUP i SIGTERM. Pomoże ci to we wszystkim, z wyjątkiem SIGKILL (którego nie można złapać). Google „skrypt bash sygnał pułapka”

Na wyjściu nonsuccessful: struktura kodować takie, że wywołanie funkcji do RM pliku (lub po prostu umieścić oświadczenie) przed zamknięciem skrypt

Powiązane problemy