- Published on
set -o pipefail
The set -o pipefail command is used in Bash scripts and interactive shells to change the behavior of pipelines.
What does it do?
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.
Default Behavior (Without set -o pipefail):
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)
With set -o pipefail:
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)
Why is this useful?
- Helps catch errors in pipelines that might otherwise go unnoticed.
- Improves script robustness by ensuring failures propagate.
- Useful in CI/CD pipelines or automation scripts where silent failures can be problematic.
Example Use Case:
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.