So, I've read this: Bash script with `set -e` doesn't stop on `... && ...` command
It makes sense. So now, the question:
Test A:
$ cat ./test.sh
set -ex
source foo && true
echo 'running'
$ ./test.sh
++ source foo
./test.sh: line 16: foo: No such file or directory
$ echo $?
1
Test B:
$ cat ./test.sh
set -ex
cat foo && true
echo 'running'
$ ./test.sh
++ cat foo
cat: foo: No such file or directory
++ echo running
running
$ echo $?
0
Why is source
uniquely violating this rule (bold)?
The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test following the if or elif reserved words, part of any command executed in a && or || list except the command following the final && or ||, any command in a pipeline but the last, or if the command's return value is being inverted with !.
sh
notbash
. – meuh Aug 21 '18 at 07:28