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)?
Odpowiedz
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.
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ć.
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
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
- 1. Czy istnieje sposób wykonywania tego rodzaju rzutowania w predykacie C#
- 2. Make 'n' zawsze szuka naprzód, niezależnie od tego, czy/i? został użyty do wyszukiwania
- 3. Czy istnieje skuteczny sposób wykonywania "ciągłego" autofokusu?
- 4. Czy istnieje sposób statycznego wykonywania wiązania C#?
- 5. Czy istnieje sposób sprawdzenia, czy dwie kolekcje zawierają te same elementy, niezależnie od kolejności?
- 6. Czy istnieje sposób wykonywania ASCX przez MVC?
- 7. Jak wiedzieć, czy klient został zakończony w gniazdach
- 8. Jak uniknąć wielokrotnego wykonywania tego samego zapytania?
- 9. Czy istnieje sposób na uproszczenie tego przypadku?
- 10. Znajdź poprzedni element tego samego typu, niezależnie od rodzica
- 11. Czy istnieje lepszy sposób na zapisanie tego?
- 12. Czy istnieje sposób zapisu tego w F #?
- 13. Czy istnieje sposób sortowania kolumn macierzy niezależnie w R?
- 14. Terminate uruchomione polecenia, gdy skrypt zostanie zabity
- 15. Niezależnie od tego, czy używana jest pamięć współdzielona, czy przetwarzanie rozproszone,
- 16. Object.isArray() jest powolny, czy istnieje szybki sposób na zrobienie tego?
- 17. Dobry ogólny sposób sortowania wartości null na samym dole, niezależnie od tego?
- 18. odtwarzania dźwięków niezależnie od poziomu głośności urządzenia
- 19. Usuwanie katalogu przy wyjściu w Javie
- 20. Jak wykryć, czy program został skompilowany przy użyciu -readread?
- 21. Skrypt PHP nie kończy się przy wyjściu przeglądarki
- 22. Czy istnieje sposób na wykrycie, czy apk został zaciemniony?
- 23. Czy istnieje sposób na optymalizację tego zapytania LINQ do Entities?
- 24. Jak zwrócić kod HTTP 500 na dowolny błąd, niezależnie od tego,
- 25. Czy w skrypcie Julii można sprawdzić, czy skrypt został zaimportowany lub wykonany bezpośrednio?
- 26. Wnioskowanie typu Scala nie zauważa, że te typy są identyczne, niezależnie od tego, czy są one
- 27. Czy istnieje sposób przezroczystego wykonywania sprawdzania poprawności obiektów SQLAlchemy?
- 28. Czy istnieje sposób ustalenia, kiedy wątek Java został uruchomiony?
- 29. Czy istnieje wzór do tego?
- 30. Sposób wykonywania procedury składowanej od Laravel
spojrzeć tutaj - może być to, co szukasz http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman