From: Roman Neuhauser <neuhauser@sigpipe.cz>
To: Peter Stephenson <p.stephenson@samsung.com>
Cc: zsh-users@zsh.org
Subject: Re: Stop script if one command returns != 0
Date: Wed, 14 May 2014 18:22:48 +0200 [thread overview]
Message-ID: <20140514162248.GE1629@isis.sigpipe.cz> (raw)
In-Reply-To: <20140514152011.7a811dcb@pwslap01u.europe.root.pri>
# p.stephenson@samsung.com / 2014-05-14 15:20:11 +0100:
> On Wed, 14 May 2014 16:01:19 +0200
> Florian Lindner <mailinglists@xgm.de> wrote:
> > I have a script that I source with a number of commands and exports. Is
> > there a way to tell zsh (or even in a portable way to sh) to stop
> > execution of this script if any of the commands returns a return code
> > other than zero?
>
> (Count the responses. I'm guessing 3 to 5...)
>
> set -e
>
> is standard across Bourne-like shells including zsh --- this is
> equivalent to the zsh option "ERREXIT".
errexit as specified by SUS/POSIX is mostly useless and very dangerous.
http://pubs.opengroup.org/onlinepubs/9699919799/:
% The -e setting shall be ignored when executing the compound list
% following the while, until, if, or elif reserved word, a pipeline
% beginning with the ! reserved word, or any command of an AND-OR list
% other than the last.
you might think this means that
if { f; g; h}; then ... fi
will execute all of f, g, h no matter if any of them fails.
that's true, but not the whole truth: errexit won't be in effect
*globally* while the condition is getting executed. this goes down
to functions:
---------- 8< ----------
#!/bin/sh
set -e
f()
{
# h must not run when g fails;
# we have errexit, hooray!
do-this
do-that
}
if f; then # f is executed with set +e in effect !!!
...
fi
f && echo ok # again, f runs with set +e
---------- >8 ----------
http://austingroupbugs.net/view.php?id=537
--
roman
next prev parent reply other threads:[~2014-05-14 16:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-14 14:01 Florian Lindner
2014-05-14 14:19 ` Chris Johnson
2014-05-14 14:20 ` Peter Stephenson
2014-05-14 14:31 ` Florian Lindner
2014-05-14 15:10 ` Bart Schaefer
2014-05-14 16:22 ` Roman Neuhauser [this message]
2014-05-14 14:21 ` Florian Lindner
2014-05-14 14:35 ` Peter Stephenson
2014-05-14 14:49 ` Peter Stephenson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140514162248.GE1629@isis.sigpipe.cz \
--to=neuhauser@sigpipe.cz \
--cc=p.stephenson@samsung.com \
--cc=zsh-users@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).