* How to inherent non-zero exit status using pipe? (dash)
@ 2010-08-11 12:34 Peng Yu
2010-08-11 13:51 ` Eric Blake
0 siblings, 1 reply; 3+ messages in thread
From: Peng Yu @ 2010-08-11 12:34 UTC (permalink / raw)
To: dash
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.
$ cat main.sh
#!/usr/bin/env bash
echo abc 1>&2
echo abc 1>&2
echo abc 1>&2
echo abc 1>&2
echo abc 1>&2
exit 1
$ ./main.sh
abc
abc
abc
abc
abc
$ echo $?
1
$ ./main.sh |head -n 3
abc
abc
abc
abc
abc
$ echo $?
0
--
Regards,
Peng
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: How to inherent non-zero exit status using pipe? (dash)
2010-08-11 12:34 How to inherent non-zero exit status using pipe? (dash) Peng Yu
@ 2010-08-11 13:51 ` Eric Blake
2010-08-13 1:15 ` Herbert Xu
0 siblings, 1 reply; 3+ messages in thread
From: Eric Blake @ 2010-08-11 13:51 UTC (permalink / raw)
To: Peng Yu; +Cc: dash
[-- Attachment #1: Type: text/plain, Size: 1024 bytes --]
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 '${PIPESTATUS[@]}' 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 eblake@redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 620 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: How to inherent non-zero exit status using pipe? (dash)
2010-08-11 13:51 ` Eric Blake
@ 2010-08-13 1:15 ` Herbert Xu
0 siblings, 0 replies; 3+ messages in thread
From: Herbert Xu @ 2010-08-13 1:15 UTC (permalink / raw)
To: Eric Blake; +Cc: pengyu.ut, dash
Eric Blake <eblake@redhat.com> wrote:
>
> Generally not possible using only POSIX constructs (bash's 'set -o
> pipefail' and '${PIPESTATUS[@]}' 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>&-
Another way is to use fifos.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-08-13 1:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-11 12:34 How to inherent non-zero exit status using pipe? (dash) Peng Yu
2010-08-11 13:51 ` Eric Blake
2010-08-13 1:15 ` Herbert Xu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.