Jestem zdezorientowany co do znaczenia kodu zakończenia na końcu skryptu bash: Wiem, że kod wyjścia 0 oznacza, że zakończył się powodzeniem i że istnieje wiele innych numerów kodów zakończenia (127, jeśli się nie mylę?)
Moje pytanie dotyczy tego, czy widząc kod wyjścia 0 na końcu skryptu, czy wymusza kod wyjścia jako 0, nawet jeśli skrypt się nie powiedzie, czy też ma inne znaczenie?
bash
shell-script
exit
exit-status
Odpadł
źródło
źródło
exit 0
, zakończy działanie z kodem wyjścia 0, niezależnie od tego, co dzieje się w skrypcie.exit 0
, wyjdzie z kodem 0 tylko wtedy, gdy ta ostatnia instrukcja została wykonana. Jedynym skutkiemexit 0
na końcu skryptu jest zwrócenie 0 zamiast statusu z poprzedniej instrukcji.Odpowiedzi:
Wbudowane polecenie
exit
wychodzi z powłoki (z odwołania Basha ):Uruchomienie do końca pliku również kończy działanie, zwracając kod powrotu ostatniego polecenia, więc tak, finał
exit 0
sprawi, że skrypt zakończy działanie z udanym statusem, niezależnie od statusu wyjścia poprzednich poleceń. (To znaczy, zakładając, że skrypt dojdzie do finałuexit
.) Na końcu skryptu można również użyćtrue
lub:
uzyskać zerowy kod wyjścia.Oczywiście częściej używasz
exit
od wewnątrz,if
aby zakończyć skrypt w środku.Powinny wypisać 1 (
$?
zawiera kod wyjścia zwrócony przez poprzednie polecenie):Chociaż powinno to wydrukować 0:
Nie jestem pewien, czy koncepcja skryptu „zawodzi” podczas wykonywania
exit
ma sens, ponieważ całkiem możliwe jest, że niektóre polecenia uruchamiane przez skrypt nie działają, ale sam skrypt się powiedzie. Od autora skryptu zależy, który z nich zakończy się sukcesem, a co nie.Ponadto standardowy zakres kodów wyjścia wynosi 0..255. Kody powyżej 127 są używane przez powłokę do wskazania procesu zakończonego sygnałem, ale można je zwrócić w zwykły sposób.
wait
Wywołanie systemowe faktycznie zwraca szerszą wartość, z bitami stanu spoczynku zawierający określonych przez system operacyjny.źródło
$?
w tym przypadku na 128 + signum. Zobacz Domyślny kod wyjścia po zakończeniu procesu? dla szczegółów.exit 0
zwróci tylko 0, jeśli wyjście jest wykonane. (może wyjść inną drogą).0 oznacza sukces, dodatnie liczby całkowite oznaczają niepowodzenie. Istnieje 255 różnych kodów błędów, ale wartości 126 i wyższe są zarezerwowane, aby wskazać, że program nie mógł się uruchomić (126 lub 127) lub został zabity przez sygnał (129 i więcej). Zobacz Domyślny kod wyjścia po zakończeniu procesu? oraz Jakich wartości powrotu / wyjścia można użyć w funkcjach / skryptach bash? po więcej informacji.
Status wyjścia skryptu powłoki to status wyjścia ostatniego polecenia wykonanego przez skrypt. Na przykład
zwraca status wyjścia
somecommand
, natomiastzwraca 0 niezależnie od tego, co
somecommand
zwróciło. Ten drugi skrypt można również napisaćUmieszczenie
exit 0
na końcu skryptu niekoniecznie powoduje, że zwraca on 0. To powoduje, że zwraca 0, gdy skrypt osiągnie koniec. Na przykład poniższy skrypt zawsze zwraca 3:Poniższy skrypt zawsze zwraca kod błędu, oprócz wyświetlania komunikatu o błędzie składni:
Poniższy skrypt zwraca 1 lub 0 w zależności od pierwszego argumentu:
Poniższy skrypt zwraca status
somecommand
, ponieważset -e
powoduje zamknięcie skryptu w przypadkusomecommand
niepowodzenia:źródło