$SHELL
é a variável ambiente que contém seu shell preferido , não o shell atualmente em execução. Ele é inicializado por login
ou qualquer outro aplicativo que faça o seu logon com base no campo shell na sua entrada de usuário no banco de dados passwd
(seu shell de login ). / p>
Essa variável é usada para dizer a aplicativos como xterm
, vim
... qual shell eles devem iniciar quando você iniciar um shell. Você normalmente o altera quando deseja usar outro shell que não o definido para você no banco de dados passwd
.
Para obter um caminho do interpretador de shell atual, no Linux, e com shells como Bourne ou csh, você pode fazer:
readlink "/proc/$$/exe"
O rc
equivalente:
readlink /proc/$pid/exe
O fish
equivalente:
set pid %self
readlink /proc/$pid/exe
csh / tcsh define a variável $shell
para o caminho do shell.
Em shells do tipo Bourne, $0
conterá o primeiro argumento que o shell recebeu ( argv[0]
) que por convenção é o nome do comando que está sendo chamado (embora login
applications, novamente por convenção faça o primeiro caractere um -
para informar ao shell que ele é um shell de login e deve, por exemplo, originar o arquivo .profile
ou .login
contendo suas personalizações de sessão de login) quando não chamado para interpretar um script ou quando chamado com shell -c '...'
sem argumentos extras .
Em:
$ bash -c 'echo "$0"'
bash
$ /bin/bash -c 'echo "$0"'
/bin/bash
É o meu shell que chama /bin/bash
em ambos os casos, mas no primeiro caso com bash
como seu primeiro argumento e no segundo caso com /bin/bash
. Várias shells permitem passar strings arbitrárias em vez disso:
$ (exec -a whatever bash -c 'echo "$0"')
whatever
Em ksh / bash / zsh / yash.