Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #11594

Re: command substitution is stripping set -e from options

From Greg Wooledge <wooledg@eeg.ccf.org>
Newsgroups gnu.bash.bug
Subject Re: command substitution is stripping set -e from options
Date 2015-10-08 14:49 -0400
Message-ID <mailman.50.1444330330.4386.bug-bash@gnu.org> (permalink)
References (5 earlier) <20151002132221.GL25574@eeg.ccf.org> <56103208.30406@case.edu> <CADex794ttQa_b9NBGKJMsXj36yoRL3JQ16aja=S8=hAxGgzCQA@mail.gmail.com> <56168B10.1000905@case.edu> <CADex796=T3x11Y5Tz7udh7UzpYDaOY+0-EatZrAu2hGNRZ=gqg@mail.gmail.com>

Show all headers | View raw


On Thu, Oct 08, 2015 at 09:36:59PM +0300, Christoph Gysin wrote:
> But this issue brings a new corner case:
> 
>   func() {
>     cmd1
>     cmd2
>   }
> 
>   var=$(func)
> 
> This won't work, because set -e is stripped inside the substitution,
> so the whole function runs without error checking.

I know you don't want to hear this, but you really need to stop thinking
of set -e as "error checking".  It is an obsolescent historical anomaly
that bash is required to support because POSIX specifies it.  It isn't
useful for any purpose, and people who insist on using it are simply
causing extra pain for themselves.

Bash does not have automatic error checking.  Instead, it uses the C
model: you need to check for erroneous results yourself, after every
command whose results you actually care about.

If you dislike this, then switch your project to a programming language
that *has* automatic error checking.  Bash is just a shell, and there
are many other languages that may better suit your project.

Back to gnu.bash.bug | Previous | Next | Find similar


Thread

Re: command substitution is stripping set -e from options Greg Wooledge <wooledg@eeg.ccf.org> - 2015-10-08 14:49 -0400

csiph-web