Published Feb 25, 2025
[
 
]
The set -o pipefail
command is used in Bash scripts and interactive shells to change the behavior of pipelines.
When pipefail
is enabled, a pipeline will return the exit status of the rightmost command that fails (i.e., exits with a non-zero status), rather than the exit status of the last command in the pipeline.
By default, a pipeline in Bash only returns the exit status of the last command.
#!/bin/bash
false | true
echo $? # Output: 0 (Success, because 'true' is the last command)
When pipefail
is set, the exit status of the pipeline is the first non-zero exit code in the pipeline (if any).
#!/bin/bash
set -o pipefail
false | true
echo $? # Output: 1 (Failure, because 'false' failed)
set -o errexit # Exit script on any command failure
set -o pipefail # Ensure pipeline failures are not ignored
cat nonexistent.txt | grep "hello"
# Without pipefail, the script might continue even if `cat` fails.