This is a discussion on Execute second command only if first fails/succeeds? within the Linux Networking forums, part of the Linux Forums category; I am not sure about on how to specify that a second command should only be execute in case that ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
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? Matthew |
|
|||
|
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 |
|
|||
|
kmlincoln100@hotmail.com (Matthew Lincoln) writes:
>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? No. They go in order. the && will apply to gzip. BUt if cmd1 fails, the pipe is broken and gzip fails anyway. >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? man bash |
|
|||
|
On Sat, 14 Jun 2008 14:22:20 +0000, Unruh wrote:
> kmlincoln100@hotmail.com (Matthew Lincoln) writes: > >>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? > > No. They go in order. the && will apply to gzip. BUt if cmd1 fails, the > pipe is broken and gzip fails anyway. > >>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? > > man bash The exit status of a pipeline in bash is the exit status of the last command in the pipeline - but you can use set -o pipefail to make it error for any command in the pipeline, not just the last. |