Od man bash
:
$? Rozbalí se na stav ukončení naposledy provedeného potrubí v popředí.
echo $?
vrátí návratový stav posledního příkazu. Máte 127
to je stav ukončení posledního provedeného příkazu ukončeného s nějakou chybou (s největší pravděpodobností). Příkazy po úspěšném dokončení se ukončí se stavem ukončení 0
(s největší pravděpodobností). Poslední příkaz dal výstup 0
od echo $v
na předchozím řádku dokončeno bez chyby.
Pokud provedete příkazy
v=4
echo $v
echo $?
Získáte výstup jako:
4 (from echo $v)
0 (from echo $?)
Zkuste také:
true
echo $?
Získáte 0
.
false
echo $?
Získáte 1
.
true
příkaz nedělá nic, pouze se ukončí se stavovým kódem 0
; a false
příkaz také nedělá nic, pouze se ukončí se stavovým kódem indikujícím selhání (tj. se stavovým kódem 1
).
$?
je užitečný v shellscriptech jako způsob, jak se rozhodnout, co dělat v závislosti na tom, jak fungoval předchozí příkaz (kontrola stavu ukončení). Můžeme očekávat, že stav ukončení je 0
když předchozí příkaz fungoval (úspěšně dokončen), jinak nenulová číselná hodnota.
Příklad ukázky:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Můžete se zeptat, jak spustit bash shellscript bez Unixu nebo Linuxu;-)