我在此线程中看到以下片段:如何将默认 shell 从 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
如果您想执行 zsh 而不是 bash,只需替换/usr/local/bin/bash
为可执行文件的路径即可zsh
。请注意,此代码片段特定于 csh;如果您的登录 shell 不是 (t)csh,则此代码~/.login
不会为您做任何事情。
至于为什么要这样写,你得问写它的人。[检查那人是谁。]哦。好吧,如果你这样做,exec /usr/local/bin/bash
那么你将不会启动登录 shell,因此你的命令.profile
不会被执行。但这可以通过执行以更简单的方式解决/usr/local/bin/bash --login
。
现在,如果您的登录 shell 不是 csh,您将需要一个不同的代码片段exec
。在 Bourne 风格的 shell 中,包括 zsh:
if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi
如果exec ~/bin/zsh -l
您希望 zsh 的新实例读取您的~/.zprofile
.请注意,如果您这样做,上面的代码片段必须位于您的.profile
或.bash_profile
;如果您的登录 shell 是 zsh,请不要将代码片段放入您的 中.zprofile
,否则请确保 zsh 的新实例不会exec
再次调用它。