Quando test.sh
chama source
, o bash está explicitamente obtendo common.sh
no script atual e, portanto, atualiza a variável BASH_SOURCE
. Quando test2.sh
executa a substituição de comando (que pode ser qualquer coisa) e subsequente eval
, não há sourcing
explícito acontecendo, então BASH_SOURCE não é afetado.
Instrua seus scripts de shell com
declare -p BASH_SOURCE
linhas para ver a diferença:
$ ./test.sh
declare -a BASH_SOURCE='([0]="common.sh" [1]="./test.sh")'
declare -a BASH_SOURCE='([0]="./test.sh")'
me: common.sh
vs:
$ ./test2.sh
declare -a BASH_SOURCE='([0]="./test2.sh")'
declare -a BASH_SOURCE='([0]="./test2.sh")'
me: test2.sh
Em test2.sh
, para todo o bash sabe, você executou um comando arbitrário, por exemplo, $(echo ls)
.