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