Seu sistema provavelmente tem bash
instalado em vários locais, seja como versões diferentes de bash
ou apenas links simbólicos.
which
não é realmente um comando útil para a maioria das finalidades - não é realmente portátil ou muito utilizável em scripts. Em geral, type
é melhor. A ideia por trás de which
é fazer uma pesquisa em PATH
do comando que você fornece como argumento.
$SHELL
não reflete necessariamente o shell em execução no momento. Em vez disso, $SHELL
é o shell preferido do usuário , que normalmente é o definido em %código%. Se você iniciar um shell diferente após o login, você não pode necessariamente esperar que /etc/passwd
corresponda ao shell atual.
Como você pode ver, $SHELL
e $SHELL
são completamente não relacionados. Nenhum destes lhe dirá qual shell você está realmente executando.
Nota: Infelizmente, a correspondência do shell que você está executando atualmente com um local no sistema de arquivos é mais difícil do que se imagina. Isso ocorre porque os binários são carregados na memória para serem executados e, na maioria dos sistemas, a cópia na memória continuará sendo executada mesmo após você excluir o original do disco (o kernel pode manter a cópia do disco no "limbo" até que seja realmente não é mais necessário). Eu não acho que haja alguma maneira portátil de fazer isso - você teria que recorrer a métodos específicos de plataforma. Por exemplo, no Linux, examinar o link which
deve dar uma ideia decente do que arquivo está em execução (onde /proc/$$/exe
é o ID do processo do seu shell em execução). Infelizmente eu não estou familiarizado com o Solaris, então não posso ajudá-lo.