Caminho absoluto para o zsh atualmente em execução?

3

Às vezes, a saída de ps -p $$ mostra o caminho absoluto para o zsh em execução no momento,

% ps -p $$
  PID TTY           TIME CMD
 1027 ttys005    0:00.11 /usr/local/bin/zsh

mas nem sempre:

% ps -p $$
  PID TTY           TIME CMD
 1507 ttys003    0:00.07 zsh -fl

O que é uma maneira consistente de obter o caminho para o zsh ?

em execução no momento

EDIT (esclarecimento): Estou interessado em como fazer isso principalmente em Darwin e Linux, mas também no NetBSD.

    
por kjo 16.08.2013 / 22:23

2 respostas

4

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

    
por 16.08.2013 / 22:44
0

Você pode usar este comando para obter o caminho absoluto de qualquer programa: qual cmd

Por exemplo: qual zsh

    
por 19.08.2013 / 05:30