Chcę wiedzieć, co to jest wyjście 99 i dlaczego należy go używać i jakie są jego znaczenia.
Na przykład , Używam exit 99
.
Komentarze
- Dość podobna odpowiedź do SO: " Po co zwracać ujemne errno? (Np. Return -EIO) "
Odpowiedź
Wyjście z kodem 99 nie ma żadnego znaczenia poza tym, że jest to możliwe w kontekście konkretny program.
Tak czy inaczej, exit
wychodzi z powłoki z określonym kodem zakończenia, w tym przypadku 99. Więcej informacji można znaleźć w help exit
:
exit: exit [n] Exit the shell. Exits the shell with a status of N. If N is omitted, the exit status is that of the last command executed.
Komentarze
- Jeśli chcesz coś konkretnego z takim kodem powrotu w bashu, użyj
$?
, aby się do niego dostać. - Niezupełnie – 99 to nie zero, więc indi wskazuje, że program z jakiegoś powodu zawiódł.
- @psusi Istnieje wiele niezerowych kodów zakończenia w aplikacjach, które nie mają nic wspólnego z awarią, ale wskazują inne warunki wykonania (wiele programów używa go do wskazania fałszywego na przykład nieoptymalne wykonanie zamiast niepowodzenia). Aby zapewnić, że określony kod zakończenia musi wskazywać błąd, nie wiedząc, że program jest po prostu nieprawdziwy. Wygrałem ' t spekulować na temat znaczenia " 99 " w jakimś nieznanym programie.
- Powłoka i większość innych narzędzi, w tym make, traktuje każdą niezerową wartość wyjścia jako błąd.
- Z wyjątkiem tych, które wskazują błąd w izolacji, a nie w szerszym kontekście sprawdzania za prawdomówność. Tak czy inaczej, odmawiam spekulacji na temat znaczenia jakiegoś kodu zakończenia, gdy aplikacja nie jest zdefiniowana.
Odpowiedź
Oprócz @Chris Down istnieje kod powrotu, który jest zarezerwowany dla powłoki, mają one specjalne znaczenie:
RETVAL Meaning 1 General errors 2 Misusage 127 Command not found
Możesz odnieść się do this , aby uzyskać więcej informacji.
Komentarze
- @MrLister: Yeap, my mistypo, naprawiono!
- nadal brakuje elementu
s
(" Misuage "?)
Odpowiedz
Zwykle, jeśli skończysz swój skrypt w którymś momencie:
exit 0
Powłoka otrzyma 0 jako kod powrotu . To zero oznacza wszystko było w porządku .
Jeśli jednak program napotkał jakiś błąd, powinien zakończyć się z niezerowym kodem powrotu, aby poinformować powłokę, że coś poszło nie tak. Jeśli nie chcesz być bardziej szczegółowy, możesz po prostu użyć 1.
exit 1
Możesz jednak poinformować powłokę o konkretnym typie błędów, używając inne liczby. Na przykład bash
samo zwraca 127 dla nie znaleziono programu . Jeśli więc udokumentujesz zachowanie swojego skryptu, możesz zrobić coś pożytecznego po uruchamiając go, sprawdzając wartość specjalnej zmiennej $?
, która przechowuje kod powrotu ostatnio wykonanego programu.
Zajrzałem do tego jakiś czas temu i znalazłem że na przykład FreeBDS ma kilka bardzo przydatnych konwencji dotyczących kodów zakończenia, udokumentowanych w man 3 sysexits
Komentarze
- " Powłoka otrzyma 0 jako kod powrotu " źle,
exit
bez parametrów wychodzi z kodem stanu ostatniego uruchomienia polecenia. (patrz pub s.opengroup.org/onlinepubs/009695399/utilities/exit.html ) - Dziękuję, moje długotrwałe błędne przekonanie naprawi odpowiedź.
- Świetnie, głos przeciw usunięto 🙂
Odpowiedź
Istnieje bardzo długa konwencja (w Uniksie) dotycząca zwrotu- zakresy stanów:
- 0 oznacza sukces
- liczby dodatnie oznaczają drobne problemy, ale zasadniczo zadanie zostało zakończone
- liczby ujemne oznaczają błąd krytyczny (np zapełniony dysk, plik-nie-znaleziony)
Dokładnie to, co oznaczają poszczególne liczby dodatnie i ujemne, zależy od programisty. Czasami można je wybrać ze względu na kompatybilność z innymi podobnymi programami (np. Narzędziami Gnu). @Gnouc wymienia niektóre.
Nie, nie jestem świadomy żadnego specjalnego znaczenia kodu zakończenia 99, nigdy go nie widziałem. Może to oznacza „Za mało piwa”
Zobacz:
- odpowiedź na SO: „Po co zwracać ujemne errno? (na przykład.return -EIO) „ również
- pokaż listę standardowych kodów błędów Uniksa pobranych z errno.h , chociaż są one dodatnie .
Komentarze
- Nigdy nie słyszałem o tej konwencji uniksowej. A twoje dwa odniesienia nie potwierdzają twojego twierdzenia o tej konwencji.
- Pierwsza referencja tak. Jest 1,67 mln trafień Google na dodatnie liczby ujemne statusu powrotu unixa .
- Istnieje niewielka liczba ujemnych wartości zwracanych określonych w POSIX.1, ale są one przeznaczone do programowania interfejsów API
Odpowiedź
Niektórzy programiści dostarczają wiele różnych kodów błędów, rozpoczynając z 1. Nowe wersje mogą wprowadzać nowe specyficzne kody błędów, więc który kod powinien być używany w przypadku
„wszystkich innych błędów / nieokreślonego błędu”? Kody zakończenia zostaną obcięte do 255, więc wybrałbym 99 jako „inny błąd” .