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

13
 $ 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 que o $SHELL seja alterado depois de executar outro shell. Por que isso não acontece?

P.S. 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
    
por rush 14.08.2012 / 12:02

3 respostas

13

Você não deve esperar que essa variável mude. Ele é usado para armazenar o caminho para o seu shell padrão, ou seja, aquele armazenado no banco de dados de senha, não no shell que você está executando atualmente.

    
por 14.08.2012 / 12:07
8

SHELL é especificado por POSIX . Citando:

SHELL This variable shall represent a pathname of the user's preferred command language interpreter. [...]

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, já que a maioria dos sistemas * .nix visam a conformidade POSIX. Variáveis de ambiente são uma dessas coisas.

    
por 13.06.2013 / 08:30
-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.

então, se eu usar bash para meu usuário e fizer isso: chsh -s /bin/zsh user , quando eu fizer echo $SHELL , o shell exibido ainda será BASH .

veja este artigo .

    
por 14.08.2012 / 12:42