1

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 !.

3
  • You need to be more careful. You are running your scripts with sh not bash.
    – meuh
    Aug 21, 2018 at 7:28
  • @Fólkvangr, it fails on Darwin, and on Linux.
    – vcardillo
    Aug 22, 2018 at 0:03
  • @meuh it doesn't matter. it fails with /bin/bash and /bin/sh
    – vcardillo
    Aug 22, 2018 at 0:04

1 Answer 1

5

source is an alias to the dot . command and the dot command is a so called special command where POSIX describes that these commands exit the whole non-interactive shell in case that an error occurs.

If you call your command via:

bash test.sh

bash does not exit, but when you call:

bash -o posix test.sh

it exits. So either your bash has been compiled to be POSIX compliant by default or you did call a different shell than bash.

See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14 for the standard.

2
  • Spectacular, thank you! So interesting. I was scratching my head for a while on this one.
    – vcardillo
    Aug 21, 2018 at 18:26
  • 2
    Bash, when called with a file called sh, enters posix mode. That is a third possibility and the one that apply here IMO (not compiled, nor other shell).
    – user232326
    Aug 23, 2018 at 0:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .