zsh-workers
 help / color / mirror / code / Atom feed
* set -e (no && or ||)
@ 2012-10-12 11:05 Sergey Fadeev
  2012-10-12 11:53 ` Peter Stephenson
  0 siblings, 1 reply; 4+ messages in thread
From: Sergey Fadeev @ 2012-10-12 11:05 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 333 bytes --]

Why doesn't it exit the shell?
 $ set -e
 $ echo $(false)
 Shouldn't the error code of $(false) command substitution be checked by set -e before passing stdout to the echo builtin?
 Isn't it the most logical behavior that most people would expect of set -e?
 Zsh version: zsh 4.3.17 (x86_64-redhat-linux-gnu) (if it matters)
 Thanks

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: set -e (no && or ||)
  2012-10-12 11:05 set -e (no && or ||) Sergey Fadeev
@ 2012-10-12 11:53 ` Peter Stephenson
  2012-10-12 13:29   ` Bart Schaefer
  2012-10-12 13:49   ` Chet Ramey
  0 siblings, 2 replies; 4+ messages in thread
From: Peter Stephenson @ 2012-10-12 11:53 UTC (permalink / raw)
  To: zsh-workers

On Fri, 12 Oct 2012 07:05:41 -0400
Sergey Fadeev <hindsight@email.com> wrote:

> Why doesn't it exit the shell?
>  $ set -e
>  $ echo $(false)
>  Shouldn't the error code of $(false) command substitution be checked
> by set -e before passing stdout to the echo builtin?

No, because the command was "echo", and that didn't fail.  Exit status
effectively means exit status seen by the main shell command
interpreter ($?), although I'm sure there are some subtleties I haven't
thought about.

The way to get the status of a substitution to fail is to use an
assignment:

output=$(false)

which does cause the shell to exit on failure, because it would set $? to
1.  This is standard shell behaviour, though I can't point to where in
the standard it says.

pws


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: set -e (no && or ||)
  2012-10-12 11:53 ` Peter Stephenson
@ 2012-10-12 13:29   ` Bart Schaefer
  2012-10-12 13:49   ` Chet Ramey
  1 sibling, 0 replies; 4+ messages in thread
From: Bart Schaefer @ 2012-10-12 13:29 UTC (permalink / raw)
  To: zsh-workers

On Oct 12, 12:53pm, Peter Stephenson wrote:
} Subject: Re: set -e (no && or ||)
}
} On Fri, 12 Oct 2012 07:05:41 -0400
} Sergey Fadeev <hindsight@email.com> wrote:
} 
} > Why doesn't it exit the shell?
} >  $ set -e
} >  $ echo $(false)
} >  Shouldn't the error code of $(false) command substitution be checked
} > by set -e before passing stdout to the echo builtin?
} 
} No, because the command was "echo", and that didn't fail.

The idea being that not every nonzero status is an error, and -e means
to exit on error.

For example, you generally don't want the shell to exit on something
like this:

	while read line
	then echo This should eventually stop
	fi
	echo But you probably want to arrive here without exiting


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: set -e (no && or ||)
  2012-10-12 11:53 ` Peter Stephenson
  2012-10-12 13:29   ` Bart Schaefer
@ 2012-10-12 13:49   ` Chet Ramey
  1 sibling, 0 replies; 4+ messages in thread
From: Chet Ramey @ 2012-10-12 13:49 UTC (permalink / raw)
  To: Peter Stephenson; +Cc: zsh-workers, chet.ramey

On 10/12/12 7:53 AM, Peter Stephenson wrote:
> On Fri, 12 Oct 2012 07:05:41 -0400
> Sergey Fadeev <hindsight@email.com> wrote:
> 
>> Why doesn't it exit the shell?
>>  $ set -e
>>  $ echo $(false)
>>  Shouldn't the error code of $(false) command substitution be checked
>> by set -e before passing stdout to the echo builtin?
> 
> No, because the command was "echo", and that didn't fail.  Exit status
> effectively means exit status seen by the main shell command
> interpreter ($?), although I'm sure there are some subtleties I haven't
> thought about.
> 
> The way to get the status of a substitution to fail is to use an
> assignment:
> 
> output=$(false)
> 
> which does cause the shell to exit on failure, because it would set $? to
> 1.  This is standard shell behaviour, though I can't point to where in
> the standard it says.

2.9.1 Simple Commands

If there is a command name, execution shall continue as described in
Command Search and Execution. If there is no command name, but the command
contained a command substitution, the command shall complete with the exit
status of the last command substitution performed. Otherwise, the command
shall complete with a zero exit status.


-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
		 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    chet@case.edu    http://cnswww.cns.cwru.edu/~chet/


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-10-12 13:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-12 11:05 set -e (no && or ||) Sergey Fadeev
2012-10-12 11:53 ` Peter Stephenson
2012-10-12 13:29   ` Bart Schaefer
2012-10-12 13:49   ` Chet Ramey

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).