How to exit if a command failed?
The other answers have covered the direct question well, but you may also be interested in using set -e
. With that, any command that fails (outside of specific contexts like if
tests) will cause the script to abort. For certain scripts, it's very useful.
Try:
my_command || { echo 'my_command failed' ; exit 1; }
Four changes:
- Change
&&
to||
- Use
{ }
in place of( )
- Introduce
;
afterexit
and - spaces after
{
and before}
Since you want to print the message and exit only when the command fails ( exits with non-zero value) you need a ||
not an &&
.
cmd1 && cmd2
will run cmd2
when cmd1
succeeds(exit value 0
). Where as
cmd1 || cmd2
will run cmd2
when cmd1
fails(exit value non-zero).
Using ( )
makes the command inside them run in a sub-shell and calling a exit
from there causes you to exit the sub-shell and not your original shell, hence execution continues in your original shell.
To overcome this use { }
The last two changes are required by bash.