Czy istnieje sposób, w jaki mogę zrobić to, co podano w tytule poleceń terminalu, czy będę musiał sprawdzić kody?
command
documentation
exit
precyzyjny
źródło
źródło
Kody zakończenia wskazują stan awarii podczas kończenia programu i mieszczą się w zakresie od 0 do 255. Powłoka i jej wbudowane funkcje mogą używać szczególnie wartości powyżej 125 do wskazania określonych trybów awarii, więc lista kodów może się różnić w zależności od powłoki i systemu operacyjnego (np. Bash używa wartości 128 + N jako statusu wyjścia). Patrz: Bash - 3.7.5 Status wyjścia lub
man bash
.Ogólnie zerowy status wyjścia wskazuje, że polecenie się powiodło , niezerowy status wyjścia oznacza błąd .
Aby sprawdzić, który kod błędu jest zwracany przez polecenie, możesz wydrukować
$?
dla ostatniego kodu wyjścia lub${PIPESTATUS[@]}
który podaje listę wartości statusu wyjścia z potoku (w Bash) po wyjściu ze skryptu powłoki.Nie ma pełnej listy wszystkich kodów wyjścia, które można znaleźć, jednak podjęto próbę usystematyzowania numerów statusu wyjścia w źródle jądra, ale jest to głównie przeznaczone dla programistów C / C ++ i podobny standard skryptowania może być odpowiedni.
Niektóre listy sysexits zarówno w systemie Linux, jak i BSD / OS X z preferowanymi kodami wyjścia dla programów (64-78) można znaleźć w
/usr/include/sysexits.h
(lub:man sysexits
na BSD):Powyższa lista przydziela wcześniej nieużywane kody wyjścia z 64-78. Zakres nieprzydzielonych kodów wyjścia będzie dalej ograniczony w przyszłości.
Jednak powyższe wartości są używane głównie w sendmailu i używane przez prawie nikogo innego, więc nie są niczym zbliżonym do standardu (jak wskazuje @Gilles ).
W powłoce status wyjścia jest następujący (na podstawie Bash):
1
-125
- Polecenie nie zostało zakończone pomyślnie. Sprawdź stronę podręcznika polecenia pod kątem znaczenia statusu, kilka przykładów poniżej:1
- Catchall dla ogólnych błędówPrzykład:
2
- Niewłaściwe użycie wbudowanych powłok (zgodnie z dokumentacją Bash)Przykład:
6
- Brak takiego urządzenia lub adresuPrzykład:
124
- upłynął limit czasu poleceń125
- jeśli samo polecenie nie powiedzie się, zobacz: coreutils126
- jeśli komenda została znaleziona, ale nie można jej wywołać (np. nie jest wykonywalna)Przykład:
127
- jeśli nie można znaleźć polecenia, proces potomny utworzony w celu jego wykonania zwraca ten statusPrzykład:
128
- Nieprawidłowy argument dlaexit
Przykład:
128
-254
- sygnał błędu krytycznego „n” - polecenie wygasło z powodu otrzymania sygnału. Kod sygnału jest dodawany do 128 (128 + SYGNAŁ), aby uzyskać status (Linuxman 7 signal
:, BSD:)man signal
, kilka przykładów poniżej:130
- polecenie zakończone z powodu naciśnięcia Ctrl-C, 130-128 = 2 (SIGINT)Przykład:
137
- jeśli polecenie zostanie wysłaneKILL(9)
sygnał (128 + 9), w przeciwnym razie status wyjścia polecenia141
-SIGPIPE
- pisz na rurze bez czytnikaPrzykład:
143
- komenda zakończona kodem sygnałowym 15 (128 + 15 = 143)Przykład:
255
* - wyjście ze stanu poza zakresem.Przykład:
Należy pamiętać, że wartości wyjściowe poza zakresem mogą powodować nieoczekiwane kody wyjścia (np. Wyjście 3809 daje kod wyjścia 225, 3809% 256 = 225).
Widzieć:
źródło
errno
wartości są używane przez systemowe interfejsy API, nie są używane jako statusy wyjścia (nie są nawet w odpowiednim zakresie) i nie mają znaczenia dla skryptów powłoki. Wartości Sysexits pochodzą z sendmaila i są używane prawie przez nikogo innego, nie są niczym zbliżonym do standardu.Będziesz musiał zajrzeć do kodu / dokumentacji. Jednak najbardziej zbliżoną do „standaryzacji” jest errno.h
źródło
errno.h
nie ma znaczenia, jeśli chodzi o kody wyjścia, tylko komunikaty o błędach.sysexits.h
. Jednak niektóre programy zwracająerrno
s i myślę, że zwracanieerrno
s ma jak najbardziej sens. Nieobsługiwaneerrno
s rozprzestrzeniają się w górę, jak wyjątki, (errno
pozostaje, funkcje zwracają np.-1
Lub0|NULL
). Ponieważ programy są tylko funkcjami, chociaż są one uruchamiane w osobnej przestrzeni adresowej, sensowne jest, aby program mógł kontynuowaćerrno
propagację poza granicami procesu."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.O ile mi wiadomo, istnieją tylko dwie, mniej więcej, standardowe wartości - obie zdefiniowane w
stdlib.h
celu użycia z exit ():A jedyną de facto standardową wartością, tj. Mającą takie samo znaczenie dla wszystkich programów na świecie, jest 0 (zero), co oznacza SUKCES.
Różne programy wprowadzają różne listy zwracanych kodów „awarii” w celu rozróżnienia lub podkreślenia różnych błędów (różnych typów lub ważności). Niektóre programy używają nawet zwracanej wartości do zgłaszania liczby całkowitej wykrytych błędów środowiska wykonawczego (np. Liczby nieudanych testów jednostkowych w kolorze).
Nie polecałbym wprowadzenia żadnego „nowego standardu” rozszerzającego
stdlib.h
źródło