Execute second command only if first fails/succeeds?

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 ...


Go Back   Usenet Forums > Linux Forums > Linux Networking

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 06-14-2008
Matthew Lincoln
 
Posts: n/a
Default Execute second command only if first fails/succeeds?

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
Reply With Quote
  #2 (permalink)  
Old 06-14-2008
Stephane CHAZELAS
 
Posts: n/a
Default Re: Execute second command only if first fails/succeeds?

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
Reply With Quote
  #3 (permalink)  
Old 06-14-2008
Unruh
 
Posts: n/a
Default Re: Execute second command only if first fails/succeeds?

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

Reply With Quote
  #4 (permalink)  
Old 06-30-2008
Dan Stromberg
 
Posts: n/a
Default Re: Execute second command only if first fails/succeeds?

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.

Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 05:30 PM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0