Por que $ SHELL não muda quando executo um novo shell?


14
 $ 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 $SHELLque 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

2
usar echo $0para obter o shell atual
manula Waidyanatha

Respostas:


13

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.


8

SHELLé especificado pelo POSIX . Citação:

SHELL Essa variável deve representar um nome de caminho do interpretador de linguagem de comando preferido do usuário. [...]

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.


-3

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 userquando o fizer echo $SHELL, o shell exibido ainda será BASH.

veja este artigo .


4
O artigo ao qual você vincula está incorreto. É o contrário, ou seja, a SHELL armazena seu shell de login padrão (no último horário de login) que às vezes corresponde ao seu shell pai. Essa variável nunca é modificada pelo pai ou pelo shell atual. A única ação que eles podem fazer é defini-la se (inesperadamente) não estiver definida.
Jlliagre
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.