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