Я использую эмулятор терминала с bash в качестве оболочки по умолчанию, затем вывел значение переменной окружения SHELL, чтобы вывести текущую оболочку, и это сработало, но когда я вхожу в другую оболочку, например, zshell, она продолжает возвращать первое значение оболочки по умолчанию.
Как заставить ее вывести значение текущей оболочки, в которой я нахожусь?
$ echo $SHELL
/bin/bash
$ zsh
unixnode%
$ unixnode% echo $SHELL
/bin/bash
решение1
Когда вы входите в систему с помощью оболочки входа, переменная оболочки присваивается этой оболочке.
Всякий раз, когда вы используете оболочку без входа, например, просто запускаете zsh из текущего сеанса оболочки входа, значение переменной Shell останется прежним, однако если вы захотите изменить ее на другую оболочку, вам придется выйти из системы и снова войти в другую оболочку.
решение2
Как распечатать значение текущей оболочки, в которой я нахожусь
Это зависит от оболочки. Для оболочек типа POSIX используйте$0
$ bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
bash
$ /bin/bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
/bin/bash
$ zsh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
zsh
$ ksh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
ksh
$ dash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
dash
В руководстве по bash естьэто сказать о $SHELL
Еще несколько интересных фактов о том, как разные оболочкиинициализировать$ОБОЛОЧКА
$ unset SHELL; bash -c 'echo $SHELL'
/usr/local/bin/fish
$ unset SHELL; ksh -c 'echo $SHELL'
/bin/sh
$ unset SHELL; zsh -c 'echo $SHELL'
$ unset SHELL; dash -c 'echo $SHELL'
$ unset SHELL; fish -c 'echo $SHELL'
$ unset SHELL; tcsh -c 'echo $SHELL'
SHELL: Undefined variable.