On 08/11/2010 06:34 AM, Peng Yu wrote: > Hi, > > The following example returns the exit status of the last command in a > pipe. I'm wondering if there is a way to inherent non-zero exit status > using pipe. That is, if there is any command in a pipe that return a > non-zero status, I'd like the whole pipe return a non-zero status.
Generally not possible using only POSIX constructs (bash's 'set -o
pipefail' and '${pipestat...@]}' are extensions). But what you _can_ do
is play with exec to be able to propagate non-zero status from a
particular portion of a pipeline through a temporary variable or file:
$ exec 3>&1 # duplicate original stdout
$ result=$(
exec 4>&1 >&3 3>&- # move cmd subst stdout, and restore original
{ ./main.sh; echo $? >&4 # run command, and record its status
} | head -n 3)
$ echo $? # status from head
$ echo $result # status from ./main.sh
$ exec 3>&-
--
Eric Blake [email protected] +1-801-349-2682
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
