From: Stephane CHAZELAS on
2008-06-14, 08:28(+00), Matthew Lincoln:
> I am not sure about on how to specify that a second command should only be execute in case
> that the first commnd fails/succeeds.
>
> When I enter:
>
> cmd1 | gzip -f ... && cmd2
>
> Is then cmd2 executed only if cmd1 is finished successfully or if gzip is finished successfully?
>
> What if I want cmd2 only to execute if both (cmd1 and gzip) end successfully?
>
> What about the other way: cmd2 should only be executed if
>
> a) cmd1 failed
>
> b) cmd1 or gzip failed?
[...]

With the zsh shell:

setopt extendedglob

cmd1 | gzip
(( ${pipestatus[(I)^0]} )) || cmd2

Or:

cmd1 | gzip

(( $pipestatus[1] || $pipestatus[2] )) || cmd2

See question 11 in comp.unix.shell FAQ:

http://cfaj.freeshell.org/shell/cus-faq-2.html#11

for more details.

--
St�phane