GNU/Linux >> Znalost Linux >  >> Linux

Co jsou výstupní kódy Bash v Linuxu

Co je výstupní kód

Každý skript, příkaz nebo binární soubor končí s návratovým kódem. Tuto hodnotu můžete vidět ve speciální proměnné $? . Návratové kódy jsou číselné a jsou omezeny na 0-255, protože se používá 8bitové celé číslo bez znaménka. Pokud použijete hodnotu -1, vrátí 255. Každé provedení se ukončí ukončovacím kódem, ať už úspěšným nebo ne, s chybovou zprávou nebo tiše. Například:

$ date ; echo $?
Sat Jan 18 08:06:07 IST 2020
0

Jak vidíte, ukončovací kód je 0, protože příkaz byl proveden bez problémů. Nyní zkusme toto:

$ wrngcmd ; echo $?
-bash: wrngcmd: command not found
127

Je to příkaz, který nebyl nalezen, protože jsme právě napsali nesmyslnou hromadu znaků.

Rezervované výstupní kódy Bash

Podobně jako výstupní kód „0“, který označuje úspěch příkazu, má bash některé vyhrazené výstupní kódy pro různé situace. Pokud tedy ve skriptu používáte příkaz exit a potřebujete zadat kód ukončení, v ideálním případě nepoužívejte tyto vyhrazené kódy ukončení, protože mohou vytvářet konfliktní výsledky.

Číslo výstupního kódu Význam Příklad Komentáře
1 Chyba pro obecné chyby nechte „var1 =1/0“ Různé chyby, jako je „dělení nulou“ a další nepřípustné operace
2 Zneužití vestavěných prvků shellu empty_function() {} Chybí klíčové slovo nebo příkaz
126 Vyvolaný příkaz nelze provést /dev/null Problém s oprávněním nebo příkaz není spustitelný soubor
127 „příkaz nenalezen“ ilegal_command Možný problém s $PATH nebo překlep
128 Neplatný argument pro ukončení výstup 3.14159 exit trvá pouze celočíselné argumenty v rozsahu 0 – 255 (viz první poznámka pod čarou)
128 +n Signál závažné chyby „n“ zničí -9 $PPID skriptu $? vrátí 137 (128 + 9)
130 Skript ukončen pomocí Control-C Ctrl-C Control-C je kritický chybový signál 2, (130 =128 + 2, viz výše)
255* Stav ukončení mimo rozsah výstup -1 exit trvá pouze celočíselné argumenty v rozsahu 0 – 255

Pojďme pochopit výstupní kód „128 + n“ na příkladu. Spusťte nekonečnou smyčku, jak je ukázáno níže:

#!/bin/bash    
while true; do    
echo ${$}    
done

Pokud spustíte tento skript, bude tisknout stejné PID donekonečna, dokud jej nezabijete nebo neprovedete „CTRL+C“. Zkuste provést „CTRL+C“ a podívejte se, jaký je výstupní kód.

# sh test.sh
....
2582
2582
2582
2582
2582
2582
^C
geeklab$ echo $?
130

Jak můžete vidět, výstupní kód je „128+2“, tj. 130. Podobně, pokud skript zabijeme pomocí „kill -9“, výstupní kód by měl být „128+9“, tj. 137. Podívejme se také na příklad:

# sh test.sh
....
2582
2582
2582
...
# kill -9 [pid_of_script]
....
2602
2602
Killed: 9
geeklab$ echo $?
137


Linux
  1. Co je uživatel Linuxu?

  2. Ukončovací kódy příkazového řádku Bash byly demystifikovány

  3. Jak vyhledat výstupní kódy pro aplikace?

  1. Co jsou oddělovače slov Readline?

  2. Co jsou špinavé stránky v Linuxu

  3. Jaké jsou typy DNS Nameserverů v Linuxu

  1. Co jsou řídké soubory v Linuxu

  2. Bash Prompt s posledním výstupním kódem

  3. Co znamená set -e ve skriptu bash?