Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Stop script if one command returns != 0
# p.stephenson@xxxxxxxxxxx / 2014-05-14 15:20:11 +0100:
> On Wed, 14 May 2014 16:01:19 +0200
> Florian Lindner <mailinglists@xxxxxx> 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
Messages sorted by:
Reverse Date,
Date,
Thread,
Author