O CMD
output por ps
é o nome do processo ou os argumentos passados para o comando (incluindo o primeiro argumento argv[0]
). Embora tenha alguma relação com o caminho do executável, não há garantias de que eles estejam vinculados.
No Linux:
print -r -- /proc/self/exe(:A)
Em Darwin e Linux e possivelmente em outros:
lsof -ap"$$" -dtxt -Fn | sed '2!d;s/.//;q'
Mas não sei como é confiável.
Outra heurística:
print -r -- ${${0#-}:c:A}
$0
, como você vê na saída do ps contém o primeiro argumento que zsh
recebeu ( argv[0]
), ou quando passou um script como argumento, esse argumento.
No primeiro caso, normalmente (por convenção, não há garantia) que argv[0]
seria um caminho incluindo /
(relativo ou absoluto) ou zsh
( algo sem /
). Nesse caso, o chamador terá pesquisado zsh
em his $PATH
ou sua tabela de hash de comando ... Se o caminho for relativo, o método acima funcionará apenas se o diretório atual não foi alterado desde que o zsh foi chamado. Se não houver /
, o método só funcionará se zsh
estiver procurando o executável da mesma forma que o chamador.
No caso de um script, é o caminho do script que será retornado em vez daquele do interpretador (ao contrário das duas primeiras soluções).