Try:
my_command || { echo 'my_command failed' ; exit 1; }
Four changes:
- Change
&&
to ||
- Use
{ }
in place of ( )
- Introduce
;
after exit
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.