$ 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ę $SHELL
zmiany 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
shell
environment-variables
wysypka
źródło
źródło
echo $0
aby uzyskać bieżącą powłokęOdpowiedzi:
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.
źródło
SHELL
jest określony przez POSIX . Cytowanie: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.
źródło
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 user
kiedy to zrobięecho $SHELL
, wyświetlona powłoka nadal będzieBASH
.zobacz ten artykuł .
źródło