Search code examples
linuxbashexitexitstatus

How to exit if a command failed?


I am a noob in shell-scripting. I want to print a message and exit my script if a command fails. I've tried:

my_command && (echo 'my_command failed; exit)

but it does not work. It keeps executing the instructions following this line in the script. I'm using Ubuntu and bash.


Solution

  • 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.