Pipe output and capture exit status in Bash Pipe output and capture exit status in Bash bash bash

Pipe output and capture exit status in Bash


There is an internal Bash variable called $PIPESTATUS; it’s an array that holds the exit status of each command in your last foreground pipeline of commands.

<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

Or another alternative which also works with other shells (like zsh) would be to enable pipefail:

set -o pipefail...

The first option does not work with zsh due to a little bit different syntax.


Dumb solution: Connecting them through a named pipe (mkfifo). Then the command can be run second.

 mkfifo pipe tee out.txt < pipe & command > pipe echo $?


using bash's set -o pipefail is helpful

pipefail: the return value of a pipeline is the status of the last command to exit with a non-zero status, or zero if no command exited with a non-zero status