无需 chsh 或管理员权限即可更改默认 shell

无需 chsh 或管理员权限即可更改默认 shell

我在此线程中看到以下片段:如何将默认 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再次调用它。

相关内容