Chci vědět, co je exit 99 a proč by jej někdo použil a jaký je jeho významový význam.
Například , Používám exit 99
.
Komentáře
- Docela podobná odpověď na SO: " Proč vrátit negativní errno? (Např. Return -EIO) "
Odpověď
Ukončení s kódem 99 nemá žádný význam, kromě toho, že existuje snad v kontextu konkrétní program.
Ať tak či onak, exit
ukončí prostředí s určitým ukončovacím kódem, v tomto případě 99. Více informací naleznete v 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.
Komentáře
- Pokud chcete udělat něco konkrétního s návratovým kódem, jako je ten v bash, použijte
$?
k tomu. - Ne tak docela – 99 není nula, a tak indi znamená, že program z nějakého důvodu selhal.
- @psusi V aplikacích existuje spousta nenulových ukončovacích kódů, které nejsou spojeny se selháním, ale označují jiné podmínky provádění (mnoho programů to používá k označení falešnosti nebo neoptimální provedení spíše než selhání). Tvrdit, že určitý stav ukončení musí označovat selhání bez znalosti programu, prostě není pravda. V nějakém neznámém programu nebudu ' spekulovat o významu " 99 ".
- Shell a většina ostatních nástrojů, včetně make, považuje jakoukoli nenulovou výstupní hodnotu za chybu.
- Kromě těchto pouze označte selhání izolovaně, ne ve větším kontextu kontroly pro pravdivost. Ať tak či onak, odmítám spekulovat o významu nějakého ukončovacího kódu, když aplikace není definována.
Odpovědět
Kromě @Chris Down existuje nějaký návratový kód, který je vyhrazen pro shell, má speciální význam:
RETVAL Meaning 1 General errors 2 Misusage 127 Command not found
Můžete odkazovat na toto pro více podrobností.
Komentáře
- @MrLister: Ano, moje mistypo, opraveno!
- stále tam
s
chybí (" zneužití "?)
Odpověď
Normálně, pokud skript v určitém okamžiku dokončíte pomocí:
exit 0
Prostředí získá 0 jako návratový kód . Tato nula znamená vše v pořádku .
Pokud však váš program zjistil nějaký chybový stav, můžete by měl skončit s nenulovým návratovým kódem, aby informoval shell, že se něco pokazilo. Pokud nechcete být konkrétnější, můžete jednoduše použít 1.
exit 1
Můžete však informovat prostředí konkrétního typu selhání pomocí jiná čísla. Například bash
vrací 127 pro program nebyl nalezen . Pokud tedy dokumentujete chování svého skriptu, můžete udělat něco užitečného po jeho spuštěním kontrolou hodnoty speciální proměnné $?
, která obsahuje návratový kód naposledy spuštěného programu.
Před chvílí jsem se na to podíval a našel že například FreeBDS měl některé velmi užitečné konvence, pokud jde o výstupní kódy, dokumentované v man 3 sysexits
Komentáře
- " Shell dostane 0 jako návratový kód " špatně,
exit
bez parametrů skončí se stavovým kódem posledního spuštění příkazu. (viz pub s.opengroup.org/onlinepubs/009695399/utilities/exit.html ) - Děkuji, moje dlouholetá mylná představa vyřeší odpověď.
- Skvělé, downvote odstraněn 🙂
Odpověď
Existuje velmi dlouhá konvence (v Unixu) pro návrat – rozsahy stavů:
- 0 znamená úspěch
- kladná čísla znamenají menší problémy, ale v podstatě byl úkol dokončen
- záporná čísla znamenají kritickou chybu (např plný disk, nenalezený soubor)
Přesný význam těchto kladných a záporných čísel záleží na programátorovi. Někdy je můžete zvolit kvůli kompatibilitě s jinými podobnými programy (např. Nástroji Gnu). @Gnouc uvádí některé.
Ne, nevím o žádném zvláštním významu pro opuštění kódu 99, nikdy jsem neviděl jeho použití. Možná to znamená „Nedostatek piva“
Viz:
- odpověď na SO: „Proč vrátit negativní errno? (např.návrat -EIO) „ také
- zobrazit seznam standardních chybových kódů Unixu vyřazených z errno.h , i když jsou pozitivní .
Komentáře
- O této unixové konvenci jsem nikdy neslyšel. A vaše dva odkazy nepodporují vaše tvrzení o této konvenci.
- První reference ano. Na kladná záporná čísla návratového stavu unixu je 1,67 mil. zásahů google.
- Existuje malý počet záporných návratových hodnot uvedených v POSIX.1, ale ty jsou určeny pro programování API
Answer
Někteří programátoři začnou dodávat mnoho různých chybových kódů s 1. Nové verze mohou zavádět nové konkrétní chybové kódy, takže jaký kód by měl být použit pro
„všechny ostatní chyby / nespecifikovaná chyba“? Kódy ukončení budou zkráceny na 255, takže bych jako „jinou chybu“ zvolil 99. .