$ echo $SHELL
/bin/bash
$ /bin/ksh93
$ echo $SHELL
/bin/bash
$ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
$ ssh test@localhost
test@localhost's password:
$ echo $SHELL
/bin/ksh93
$ bash
$ echo $SHELL
/bin/ksh93
Espero $SHELL
que mude depois de executar outro shell. Por que não?
PS No entanto, o shell muda, apenas a variável $ SHELL permanece a mesma:
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
shell
environment-variables
pressa
fonte
fonte
echo $0
para obter o shell atualRespostas:
Você não deve esperar que essa variável mude. É usado para armazenar o caminho para o seu shell padrão, ou seja, aquele armazenado no banco de dados de senhas, não o shell que você está executando no momento.
fonte
SHELL
é especificado pelo POSIX . Citação:A execução de um shell diferente não indica necessariamente uma alteração na preferência do usuário.
É bom aprender os tipos de coisas que o POSIX especifica e onde procurá-los, pois a maioria dos sistemas * .nix visa à conformidade com o POSIX. Variáveis de ambiente são uma dessas coisas.
fonte
A variável SHELL armazena o shell pai para sua sessão, que às vezes corresponde ao seu shell de login padrão . O $ SHELL é o shell pai que gerou a sessão atual.
portanto, se eu usar o bash para meu usuário e fizer o seguinte:
chsh -s /bin/zsh user
quando o fizerecho $SHELL
, o shell exibido ainda seráBASH
.veja este artigo .
fonte