Ah, got it sorted out. Not a bug, of course (:
Bash, when not in posix mode, clears the '-e' flag in subshell environments. On 10/3/19, John W <jwde...@gmail.com> wrote: > I'm seeing some strange behavior w/regard to `set -e` when invoking a > shell function through a `$(...)` construct. > > I can't tell if it's a bug or not; the manpage doesn't really mention > $() specially with regard to `set -e`, that I have found. > > I made a SO post with a bunch of details here: > https://stackoverflow.com/questions/58228383/bash-set-e-reset-inside-functions-when-run-via > > But here's my small repro program: > > #!/usr/bin/env bash > > echo "Initial: $-" > set -eu > echo "After set: $-" > > function foo() { > echo "Inside foo: $-" > } > foo > > function bar() { > false # I'd expect this to immediately fail > echo "Inside bar: $-" > } > # When a $(...) construct is involved, 'bar' runs to completion! > x=$(bar) > echo "We should never get here ... but we do." > echo "$x" > > For me, this ouputs: > > Initial: hB > After set: ehuB > Inside foo: ehuB > We should never get here ... but we do. > Inside bar: huB > > and it's really the last two lines that confuse me. Why was 'set -e' > disabled inside of "bar"? > > Is this documented behavior, and I missed it? > Or a bug? > Or makes sense under some interpretation of things that I'm not grasping? > > Thanks for any advice > -John >