이 스레드에서 다음 스니펫을 보았습니다.csh에서 bash로 기본 쉘을 변경하는 방법
sleep 2
if (-x /usr/local/bin/bash) then
exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash'
endif
제가 알기로 이 코드 조각을 넣으면 ~/.login
로그인할 때 호출됩니다.bash
zsh
저도 비슷한 상황에 처해 있으며 비슷한 코드 조각을 사용하여 제가 로그인한 기본 버전이 아닌 다른 버전을 호출하고 싶습니다 . 제가 이런 문제를 겪고 있는 이유 중 하나는 zsh
허용된 옵션 중에서 원하는 버전을 선택할 수 없고 chsh
관리자 권한이 없기 때문입니다.
이것으로:
- 다른 버전의 zsh 간에 전환할 때 이를 수행하려면 위의 코드 조각을 어떻게 변경할 수 있습니까?
exec
위 코드 조각에 두 개의 명령이 필요한 이유는 무엇입니까 ? 그들은 무엇을 하고 있나요? 또한 위의 코드 조각이 사용되는 이유는 무엇입니까?sh
그리고bash
(사용자는 로그인을 사용해야 합니다csh
)
답변1
bash 대신 zsh를 실행하려면 /usr/local/bin/bash
실행 파일의 경로로 바꾸십시오 zsh
. 이 코드 조각은 csh에만 해당됩니다. 로그인 쉘이 (t)csh가 아닌 경우 이 코드는 ~/.login
아무 작업도 수행하지 않습니다.
왜 이렇게 쓰여졌는지는 쓴 사람에게 물어봐야 합니다.[그 사람이 누구인지 확인해 보세요. ]오. 음, 이렇게 하면 exec /usr/local/bin/bash
로그인 쉘이 시작되지 않으므로 명령이 .profile
실행되지 않습니다. 하지만 이는 실행을 통해 더 간단한 방법으로 해결될 수 있습니다 /usr/local/bin/bash --login
.
이제 로그인 셸이 csh가 아닌 경우 다른 코드 조각이 필요합니다 exec
. zsh를 포함한 Bourne 스타일 쉘에서:
if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi
zsh 의 exec ~/bin/zsh -l
새 인스턴스 가 ~/.zprofile
. zsh의 새로운 인스턴스 는 다시 호출하지 않습니다..profile
.bash_profile
.zprofile
exec