Dlaczego $ SHELL nie zmienia się po uruchomieniu nowej powłoki?

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

Oczekuję $SHELLzmiany po uruchomieniu kolejnej powłoki. Dlaczego nie

PS Jednak powłoka się zmienia, tylko zmienna $ SHELL pozostaje taka sama:

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
wysypka
źródło
2
użyj, echo $0aby uzyskać bieżącą powłokę
Manula Waidyanatha

Odpowiedzi:

13

Nie należy oczekiwać zmiany tej zmiennej. Służy do przechowywania ścieżki do domyślnej powłoki, tj. Przechowywanej w bazie danych haseł, a nie tej, którą aktualnie używasz.

jlliagre
źródło
8

SHELLjest określony przez POSIX . Cytowanie:

SHELL Ta zmienna powinna reprezentować nazwę ścieżki preferowanego przez użytkownika interpretera języka poleceń. [...]

Uruchomienie innej powłoki niekoniecznie oznacza zmianę preferencji użytkownika.

Warto poznać rodzaje rzeczy, które określa POSIX i gdzie ich szukać, ponieważ większość systemów * .nix dąży do zgodności z POSIX. Zmienne środowiskowe są jedną z tych rzeczy.

Ciro Santilli
źródło
-3

Zmienna SHELL przechowuje powłokę nadrzędną dla Twojej sesji, która czasami pasuje do domyślnej powłoki logowania . $ SHELL jest powłoką nadrzędną, która zrodziła bieżącą sesję.

więc jeśli użyję bash dla mojego użytkownika i zrobię to: chsh -s /bin/zsh userkiedy to zrobię echo $SHELL, wyświetlona powłoka nadal będzieBASH .

zobacz ten artykuł .

fromnaboo
źródło
4
Artykuł, do którego prowadzi link, jest niepoprawny. Odwrotnie, tzn. SHELL przechowuje domyślną powłokę logowania (przy ostatnim logowaniu), która czasami pasuje do powłoki nadrzędnej. Ta zmienna nigdy nie jest modyfikowana przez twoją nadrzędną lub bieżącą powłokę. Jedyną czynnością, jaką mogą zrobić, jest ustawienie go, jeśli (nieoczekiwanie) jest wyłączone.
jlliagre