Search code examples
linuxbash

Bash ignoring error for a particular command


I am using following options

set -o pipefail
set -e

In bash script to stop execution on error. I have ~100 lines of script executing and I don't want to check return code of every line in the script.

But for one particular command, I want to ignore the error. How can I do that?


Solution

  • The solution:

    particular_script || true
    

    Example:

    $ cat /tmp/1.sh
    particular_script()
    {
        false
    }
    
    set -e
    
    echo one
    particular_script || true
    echo two
    particular_script
    echo three
    
    $ bash /tmp/1.sh
    one
    two
    

    three will be never printed.

    Also, I want to add that when pipefail is on, it is enough for shell to think that the entire pipe has non-zero exit code when one of commands in the pipe has non-zero exit code (with pipefail off it must the last one).

    $ set -o pipefail
    $ false | true ; echo $?
    1
    $ set +o pipefail
    $ false | true ; echo $?
    0