Ostatní odpovědi dobře pokryly přímou otázku, ale možná vás bude zajímat i použití set -e
. S tím, jakýkoli příkaz, který selže (mimo konkrétní kontexty jako if
testy) způsobí přerušení skriptu. Pro určité skripty je to velmi užitečné.
Zkuste:
my_command || { echo 'my_command failed' ; exit 1; }
Čtyři změny:
- Změňte
&&
do||
- Použijte
{ }
místo( )
- Představte
;
poexit
a - mezery za
{
a před}
Protože chcete zprávu vytisknout a ukončit pouze v případě, že příkaz selže (ukončí se s nenulovou hodnotou), potřebujete ||
ne &&
.
cmd1 && cmd2
poběží cmd2
když cmd1
uspěje (hodnota ukončení 0
). Kde jako
cmd1 || cmd2
poběží cmd2
když cmd1
selže (hodnota výstupu je nenulová).
Pomocí ( )
způsobí, že příkaz uvnitř nich bude spuštěn v sub-shell a volání exit
odtud způsobí, že opustíte sub-shell a ne váš původní shell, takže provádění pokračuje ve vašem původním shellu.
K překonání tohoto problému použijte { }
Poslední dvě změny vyžaduje bash.