Veja o que eu uso:
head -n 1 /proc/$$/status | cut -f2
Não tenho certeza se é portável para todos os Unices, mas funciona no Linux e no Cygwin.
Suponha que alguém execute
. some_script
ou
source some_script
Como pode some_script
determinar o caminho absoluto do shell atual (ou seja, aquele que está executando o comando .
ou source
)? (Observe que, em geral, esse caminho não é o mesmo que o valor de $SHELL
.)
Em outras palavras, estou procurando a contraparte do "caminho absoluto" de $$
. Eu acho que o processo shell atual deve conhecer o executável de onde veio, mas AFAICT, não é armazenado em nenhuma variável de ambiente.
O melhor que posso encontrar resume-se a extrair a saída gerada por uma variante adequada de ps -p $$
; por exemplo:
CURRENT_SHELL=${"$( PS_FORMAT=cmd PS_PERSONALITY=linux ps -p $$ -h )"% *}
Isso provavelmente não é muito portátil. (E é feio, para arrancar.)
Estou principalmente interessado no caso em que o shell atual é uma versão de zsh
. (Eu tenho um interesse secundário na resposta correspondente para bash
.)
Veja o que eu uso:
head -n 1 /proc/$$/status | cut -f2
Não tenho certeza se é portável para todos os Unices, mas funciona no Linux e no Cygwin.
Tags zsh shell-script