chsh 또는 관리자 권한 없이 기본 쉘 변경

chsh 또는 관리자 권한 없이 기본 쉘 변경

이 스레드에서 다음 스니펫을 보았습니다.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.zprofileexec

관련 정보