SHELL 환경 변수는 bash를 사용한 후에도 여전히 zsh를 가리킵니다.

SHELL 환경 변수는 bash를 사용한 후에도 여전히 zsh를 가리킵니다.

zsh와 bash 사이를 이동하려고합니다.

기본적으로 쉘은 zsh입니다. 다음을 입력하여 이를 알 수 있습니다.

echo $SHELL그리고 나는 얻는다/bin/zsh

하지만 Bash를 열고 싶기 때문에 /bin/bash; 나는 지금 bash에 있다고 가정하지만 에코하면 $SHELL여전히/bin/zsh

무슨 일이에요?

답변1

SHELL은 zsh를 호출할 때 bash에서 zsh로 전달되는 환경 변수입니다. SHELL은 다음 중 하나가 아닙니다.쉘에 의해 설정된 매개변수zsh에서는 그 값이 그대로 유지됩니다.

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

zsh 셸에 있다는 표시를 보려면 다음을 시도해 보세요.

echo $ZSH_NAME
echo $0

변수 는 전통적으로 "비밀번호 데이터베이스에 지정된 대로" 프로그램 SHELL에 의해 설정됩니다 . login(에서 복사됨$SHELL 환경 변수를 설정하는 것은 무엇입니까?)

답변2

많은 쉘은 시작할 때 버전 변수를 설정합니다.

bashBASH_VERSION을 사용하고 zshZSH_VERSION을 사용하십시오.

두 변수를 알려진 값으로 설정하면 어떤 쉘이 시작되었는지 확실하게 감지합니다.

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

notbash 5.3.1sh가 zsh이거나 5.0.2(2)-release notzshsh가 bash이면 인쇄됩니다 .

안타깝게도 KSH_VERSION을 문자열 값과 함께 사용하면 ksh segfault가 발생합니다.

관련 정보