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
많은 쉘은 시작 시 버전 변수를 설정합니다.
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 notzsh
sh가 bash인 경우에 인쇄됩니다.
불행하게도 문자열 값과 함께 KSH_VERSION을 사용할 때 ksh segfault가 발생합니다.