Muitos shells otimizam o último comando em um script executando o comando no mesmo processo:
$ sh -c 'ps
ps'
PID TTY TIME CMD
32673 pts/3 00:00:00 zsh
32696 pts/3 00:00:00 sh
32697 pts/3 00:00:00 ps
PID TTY TIME CMD
32673 pts/3 00:00:00 zsh
32696 pts/3 00:00:00 ps
Veja como o segundo ps
foi executado no processo que inicialmente executou sh
(32696) e, em seguida, seu pai é o pai de sh
(no meu caso aqui, zsh
meu shell interativo) .
Você pode evitar isso adicionando uma linha exit
:
#! /bin/sh -
foo
exit
sh
não pode executar foo
no mesmo processo porque ainda tem mais para interpretar depois que foo
tiver terminado. Portanto, ele executará foo
em outro processo e aguardará. Em seguida, execute exit
(que sairá do script com o mesmo status de saída de foo
).
Agora, isso não é muito ideal, pois você pode ter salvado um processo aqui.
A melhor maneira de ter foo
saber sobre o caminho de foocaller
poderia ser:
#! /bin/sh -
CALLER=$0 foo
Em seguida, foo
pode consultar a variável de ambiente CALLER
para obter o caminho de seu chamador ( import os;print(os.environ["CALLER"])
em python)