Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: set -e (no && or ||)



On 10/12/12 7:53 AM, Peter Stephenson wrote:
> On Fri, 12 Oct 2012 07:05:41 -0400
> Sergey Fadeev <hindsight@xxxxxxxxx> 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@xxxxxxxx    http://cnswww.cns.cwru.edu/~chet/



Messages sorted by: Reverse Date, Date, Thread, Author