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

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

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

기본적으로 저는 zsh를 쉘로 사용합니다. 다음을 입력하여 이를 알아낼 수 있습니다.

echo $SHELL나는 얻다/bin/zsh

그러나 Bash를 열고 싶기 때문에 /bin/bash지금 bash에 있다고 가정하고 입력합니다. 하지만 에코하면 $SHELL여전히 다음과 같은 메시지가 표시됩니다./bin/zsh

뭐가 문제 야?

답변1

SHELL은 zsh를 호출할 때 bash에서 zsh로 전달되는 환경 변수입니다. SHELL은 그들 중 하나가 아닙니다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가 발생합니다.

관련 정보