Переменная окружения SHELL по-прежнему указывает на zsh после использования bash

Переменная окружения SHELL по-прежнему указывает на zsh после использования bash

Я пытаюсь переключаться между zsh и bash.

По умолчанию у меня в качестве оболочки установлена ​​zsh. Узнать это можно, введя:

echo $SHELLи я получаю/bin/zsh

Однако я хочу открыть Bash, поэтому я набираю /bin/bash; Я предполагаю, что сейчас я в bash, но если я выполню команду echo, $SHELLя все равно получу/bin/zsh

Что случилось, пожалуйста?

решение1

SHELL — это переменная окружения, которая передается из bash в zsh при вызове zsh. SHELL не является одной изПараметры, устанавливаемые оболочкойв zsh, поэтому его значение остается неизменным.

bash$ SHELL=turtle zsh
zsh$ echo $SHELL
turtle 

Чтобы убедиться, что вы находитесь в оболочке zsh, попробуйте:

echo $ZSH_NAME
echo $0

Переменная SHELLтрадиционно устанавливается программой login, «как указано в базе данных паролей». (Скопировано изЧто устанавливает переменную среды $SHELL?)

решение2

Многие оболочки устанавливают переменную версии при запуске.

bashиспользуйте BASH_VERSION и zshиспользуйте ZSH_VERSION.

Установка известных значений для обеих переменных позволит надежно определить, какая оболочка была запущена:

BASH_VERSION=notbash ZSH_VERSION=notzsh sh -c 'echo "$BASH_VERSION $ZSH_VERSION"'

выведет notbash 5.3.1, если sh - это zsh или 5.0.2(2)-release notzshsh - это bash.

К сожалению, ksh выдает ошибку сегментации при использовании KSH_VERSION со строковым значением.

Связанный контент