
Tendo um script simples:
echo "file: $0"
quando invocado assim:
bash meuscript.sh
ou
./meuscript.sh
fornece o nome do arquivo do script ( file: myscript.sh
) conforme esperado, mas quando invocado:
fonte meuscript.sh
ou
. ./meuscript.sh
fornece o nome do shell ( bash
) em vez do nome do arquivo de script.
Por que é assim?
Responder1
A primeira chamada iniciará uma nova instância do bash para interpretar o script, o que significa que o bash definirá $0
seu caminho.
A segunda chamada tratará o arquivo como executável e o executará, apontando $0
para ele.
As duas últimas chamadas carregarão o arquivo na instância atual do bash, então $0
apontarão para lá.
NB: #2 precisa que o arquivo seja executável, #1, #3 e #4 não.