Table of Contents

BASH - Output - Check Exit Status

To get the exit status, you use the special parameter $? after running the command:

command
status=$?

Check exit status

If you don't actually want to store the exit status, but simply want to take an action upon success or failure, just use if:

if command; then
    printf "it succeeded\n"
else
    printf "it failed\n"
fi

Exit Status from a piped command - use PIPESTATUS

What if you want the exit status of one command from a pipeline?

If you want the last command's status, no problem – it's in $? just like before.

If you want some other command's status, use the PIPESTATUS array.

NOTE: This is BASH only.

In the case of Zsh, it's lower-cased pipestatus).

Say you want the exit status of grep in the following:

grep foo somelogfile | head -5
status=${PIPESTATUS[0]}

Bash 3.0 added a pipefail option as well, which can be used if you simply want to take action upon failure of the grep:

set -o pipefail
if ! grep foo somelogfile | head -5; then
    printf "uh oh\n"
fi