Re: Problem around brackets, and ||

2010-05-04 Thread Marc Herbert
Le 03/05/2010 21:08, Kunszt Árpád a écrit :

 http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3
  
 I read it, thanks. I understand it now.
 
 I read man bash lots of times, but this behavior had escaped my
 attention. There isn't any word about cmd1  cmd2 || cmd3 only the cmd1
  cmd2 and cmd1 || cmd2 mentioned. I think lots of people, including
 myself, thought that  and || is an equivalent to the if ... then ...
 else statement.

Out of curiosity, what made you think that?

I find the following quite intuitive:

   true  false || this_cmd_is_run


true  false is obviously equal to false.



 So my bugreport is now against the documentation. :-)

This is already documented. Excerpts from the List of Commands
section:

*) AND and OR lists are executed with left associativity

Applied here:
   cmdA  cmdB || cmdC   =   { cmdA  cmdB ; } || cmdC


*) The return status of AND and OR lists is the exit status of the
  last command executed in the list

Applied here:   
Whenever cmdB is run and fails, { cmdA  cmdB ; } is
considered to have failed  (and cmdC is run)






Re: Problem around brackets, and ||

2010-05-03 Thread Greg Wooledge
On Mon, May 03, 2010 at 07:49:12PM +0200, Kunszt Árpád wrote:
 Description:
 If the last command in a {...} has  and fails and the {...}
 has an || outside then the outside command will be executed.

Use if/then/else/fi instead of  ||.  Using  || is dangerous, as I've
explained here:

http://mywiki.wooledge.org/BashPitfalls#cmd1_.26.26_cmd2_.7C.7C_cmd3