Vreau să știu ce este ieșirea 99 și de ce l-ar folosi și care sunt semnificațiile sale.
De exemplu , Folosesc exit 99
.
Comentarii
- Răspuns destul de similar cu SO: " De ce să returnați un errno negativ? (Ex. Return -EIO) "
Răspuns
Nu există nicio semnificație pentru ieșirea cu codul 99, altele decât există probabil în contextul un program specific.
Oricum, exit
iese din shell cu un anumit cod de ieșire, în acest caz 99. Puteți găsi mai multe informații în 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.
Comentarii
- Dacă doriți să faceți ceva specific cu un cod de returnare de genul în bash, utilizați
$?
pentru a ajunge la el. - Nu chiar – 99 nu este zero și deci indi consideră că programul a eșuat din anumite motive.
- @psusi Există numeroase coduri de ieșire diferite de zero în aplicații care nu au legătură cu eșecul, dar indică alte condiții de execuție (multe programe îl folosesc pentru a indica falsitatea sau executare neoptimală mai degrabă decât eșec, de exemplu). Afirmarea că o anumită stare de ieșire trebuie indică eșecul fără a cunoaște programul pur și simplu nu este adevărat. Am câștigat ' pentru a specula semnificația " 99 " într-un program necunoscut.
- Shell-ul și majoritatea altor instrumente, inclusiv make, tratează orice valoare de ieșire diferită de zero ca o eroare.
- Cu excepția acestora, indică doar eșecul izolat, nu în contextul mai larg al verificării pentru adevăr. Oricum, refuz să speculez despre semnificația unui cod de ieșire atunci când aplicația nu este definită.
Răspuns
În plus față de @Chris Down, există un cod de returnare rezervat pentru shell, care au o semnificație specială:
RETVAL Meaning 1 General errors 2 Misusage 127 Command not found
Puteți consulta aceasta pentru mai multe detalii.
Comentarii
- @MrLister: Da, mistypo meu, remediat!
- lipsește încă un
s
acolo (" Misuage "?)
Răspuns
În mod normal, dacă terminați scriptul la un moment dat cu:
exit 0
Shell-ul va primi un 0 ca cod de returnare . Acest zero înseamnă totul a fost OK .
Cu toate acestea, dacă programul dvs. a găsit unele condiții de eroare, ar trebui să iasă cu un cod de returnare diferit de zero, pentru a informa shell-ul că ceva nu a mers bine. Dacă nu doriți să fiți mai specific, puteți utiliza pur și simplu 1.
exit 1
Cu toate acestea, puteți informa shell-ul unui anumit tip de erori utilizând alte numere. De exemplu, bash
în sine returnează un 127 pentru programul nu a fost găsit . Deci, dacă documentați comportamentul scriptului, puteți face ceva util după rularea acestuia verificând valoarea variabilei speciale $?
, care deține codul de returnare al ultimului program executat.
M-am uitat la asta cu ceva timp în urmă și am găsit că, de exemplu, FreeBDS a avut câteva convenții foarte utile cu privire la codurile de ieșire, documentate în man 3 sysexits
Comentarii
- " Învelișul va primi un 0 ca cod de returnare " greșit,
exit
fără parametri iese cu codul de stare al ultimei runde de comandă. (consultați pub s.opengroup.org/onlinepubs/009695399/utilities/exit.html ) - Vă mulțumesc, concepția mea greșită de lungă durată va rezolva răspunsul.
- Excelent, vot negativ eliminat 🙂
Răspuns
Există o convenție de lungă durată (în Unix) pentru returnare- intervale de stare:
- 0 înseamnă succes
- numerele pozitive înseamnă probleme minore, dar în esență sarcina finalizată
- numerele negative înseamnă eroare critică (de ex disc-full, file-not-found)
Ceea ce înseamnă acele numere pozitive și negative individuale revine programatorului. Uneori le puteți alege pentru compatibilitate cu alte programe similare (de exemplu, instrumentele Gnu). @Gnouc enumeră câteva.
Nu, nu știu nicio semnificație specială pentru a ieși din codul 99, nu am văzut-o niciodată folosită. Poate că înseamnă „Bere insuficientă”
Vedeți:
- răspundeți la SO: „De ce să returnați o eroare negativă? (de exemplu.return -EIO) „ și
- afișează lista codurilor de eroare standard Unix eliminate din errno.h , deși acestea sunt pozitive .
Comentarii
- Nu am auzit niciodată de acea convenție Unix. Și cele două referințe ale tale nu acceptă afirmația ta despre acea convenție.
- Se face prima referință. Există 1,67 milioane de accesări Google pe unix returnează cifre pozitive negative .
- Există un număr mic de valori negative returnate specificate în POSIX.1, dar acestea sunt pentru programarea API-urilor
Răspuns
Unii programatori vor furniza o mulțime de coduri de eroare diferite pornind cu 1. Noile versiuni ar putea introduce noi coduri de eroare specifice, deci care cod ar trebui folosit pentru
„toate celelalte erori / erori nespecificate”? Codurile de ieșire vor fi trunchiate la 255, așa că aș alege 99 ca „altă eroare” .