2015-10-14 55 views
5

Piszę raczej trywialny skrypt bash; jeśli wykryję błąd (nie ze złym stanem wyjścia z jakiegoś innego procesu), chcę wyjść ze stanem wyjścia wskazującym błąd (bez bycia zbyt szczegółowym).Dlaczego niektórzy ludzie opuścili -1 zamiast wyjść 1 w przypadku błędu?

Wygląda na to, że powinienem wykonywać numer exit 1 (np. Zgodnie z the TLDP Advanced Bash Scripting Guide, a nagłówek C Standard Library stdlib.h); ale widzę wielu ludzi exit -1. Dlaczego?

+1

Gdzie to widzisz? – Random832

+0

@ Random832: W kodzie, do którego nie masz dostępu :-(ale także, pamiętam, widząc masę wyjścia -1 przez lata, po prostu nigdy się nad tym nie zastanawiałem – einpoklum

+0

@ Random832: Kolejny przykład dla ciebie - [tutaj na stronie] (http://stackoverflow.com/a/18880585/1593077) – einpoklum

Odpowiedz

5

ABS ABSDP ma wątpliwą ważność (w tym, że często stosuje się, bez komentarza, praktyki podrzędnej), więc nie wziąłbym tego jako szczególnego bastionu poprawności w tej sprawie.

Wspomniane prawidłowe kody powrotu komend znajdują się między 0 i 255 z 0 "sukcesem". Więc tak, 1 jest całkowicie poprawnym (i powszechnym) kodem błędu.

Oczywiście nie mogę powiedzieć na pewno, dlaczego inni to robią, ale mam dwie myśli na ten temat.

  1. Niepowodzenie przełączania kontekstu (prawdopodobnie w połączeniu z brakiem wiedzy o dziedzinie).

    W wielu językach wartość zwracana przez funkcję -1 jest doskonale poprawną wartością i wyróżnia się spośród wszystkich wartości dodatnich, które mogą (zwykle przypuszczalnie) zostać zwrócone.

    Próbuję więc przedłużyć ten wzorzec (który pisarz podniósł w czasie) do skryptu powłoki/etc. jest dla nich rozsądną rzeczą. Zwłaszcza jeśli nie mają wiedzy na temat domeny, aby zdać sobie sprawę, że ważne kody powrotu są między 0255.

  2. Próba spowodowania, że ​​linie wyjścia błędu "wyróżniają się" z normalnych przypadków wyjścia (które mogą, ale nie muszą, wyjść z siebie), próbując wizualnie odróżnić określony zestaw wyjątkowo mało prawdopodobnych lub w inny sposób nadzwyczajnych przypadków wyjścia.

    wyjście z -1 nie, faktycznie, działa po prostu nie dostać się kodem powrotu -1 to dostaje kod powrotny 255. (Wypróbuj (exit -1); echo $? w twojej powłoce, aby to zobaczyć.) Więc nie jest to całkowicie nierozsądna rzecz, którą chcesz robić (mimo że jest myląca i współwinna w popełnianiu zamieszania związanego z kodami wyjścia).