Perché $ SHELL non cambia quando eseguo una nuova 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

Mi aspetto $SHELLche cambi dopo aver eseguito un'altra shell. Perché no?

PS Comunque la shell cambia, solo la variabile $ SHELL rimane la stessa:

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found

2
usare echo $0per ottenere la shell corrente
Manula Waidyanatha,

Risposte:


13

Non dovresti aspettarti che questa variabile cambi. Viene utilizzato per archiviare il percorso della shell predefinita, ovvero quella memorizzata nel database delle password, non la shell attualmente in esecuzione.


8

SHELLè specificato da POSIX . citando:

SHELL Questa variabile deve rappresentare un percorso dell'interprete del linguaggio di comando preferito dall'utente. [...]

L'esecuzione di una shell diversa non indica necessariamente un cambiamento nelle preferenze dell'utente.

È utile imparare i tipi di cose che POSIX specifica e dove cercarli poiché la maggior parte dei sistemi * .nix punta alla conformità POSIX. Le variabili d'ambiente sono una di queste cose.


-3

La variabile SHELL memorizza la shell padre per la sessione, che a volte corrisponde alla shell di accesso predefinita . $ SHELL è la shell padre che ha generato la sessione corrente.

quindi, se uso bash per il mio utente e faccio questo: chsh -s /bin/zsh userquando lo faccio echo $SHELL, la shell visualizzata sarà comunque BASH.

vedi questo articolo .


4
L'articolo a cui ti colleghi non è corretto. È il contrario, ovvero SHELL memorizza la shell di accesso predefinita (all'ultimo orario di accesso) che a volte corrisponde alla shell madre. Questa variabile non viene mai modificata dal tuo genitore o dalla shell corrente. L'unica azione che potrebbero fare è impostarla se (inaspettatamente) disinserita.
jlliagre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.