$ 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
Я ожидаю $SHELL
изменения после запуска другой оболочки. Почему не так?
PS Однако оболочка меняется, только переменная $ SHELL остается неизменной:
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
echo $0
для получения текущей оболочкиОтветы:
Вы не должны ожидать, что эта переменная изменится. Он используется для хранения пути к вашей оболочке по умолчанию, т.е. к той, которая хранится в базе данных паролей, а не к той оболочке, которую вы используете в данный момент.
источник
SHELL
это определяется POSIX . Цитирование:Запуск другой оболочки не обязательно указывает на изменение предпочтений пользователя.
Полезно изучить типы вещей, которые определяет POSIX, и где их искать, поскольку большинство систем * .nix нацелены на соответствие POSIX. Переменные среды являются одной из таких вещей.
источник
Переменная SHELL хранит родительскую оболочку для вашего сеанса, которая иногда совпадает с вашей оболочкой входа по умолчанию . $ SHELL является родительской оболочкой, которая породила текущий сеанс.
Итак, если я использую bash для своего пользователя и делаю это:
chsh -s /bin/zsh user
когда я это сделаюecho $SHELL
, отображаемая оболочка все равно будетBASH
.см этой статьи .
источник