kon*_*box 86
.bash_profile在您的主目录中创建并添加以下行:
export SHELL=/bin/zsh
exec /bin/zsh -l
Run Code Online (Sandbox Code Playgroud)
更新:.profile当默认 shell 不是 bash 时,可以作为通用解决方案。我不确定.profileZsh是否也可以调用它,它可能会变得多余,但我们可以通过简单的检查安全地做到这一点:
export SHELL=/bin/zsh
[ -z "$ZSH_VERSION" ] && exec /bin/zsh -l
Run Code Online (Sandbox Code Playgroud)
我们还可以使用which来获取zsh依赖于 值的动态路径$PATH:
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 14
通常,您可以chsh作为非 root 用户使用。但它偶尔会被禁用,通常在使用某种形式的网络用户数据库(如 NIS 和 LDAP)的站点中。可能有ypchsh(NIS) 或chsh.ldap(LDAP) 代替。
chsh通常也只允许一些已批准的shell,通常是/etc/shells.
如果您不能chsh在您的站点上使用或其变体,则将您的登录 shell 安排到exec您喜欢的 shell,并将SHELL变量设置为指向您喜欢的 shell。
如果您的登录 shell 是sh,dash或ksh: 您需要编辑的文件是~/.profile. 请注意,此文件在交互式会话开始时以及一些非交互式会话启动脚本(例如 X11 会话)中读取,因此您需要注意:仅exec在当前进程时调用(替换当前进程) shell 是交互式的。除了 Bourne shell(/bin/shSolaris 10 及之前的版本),您可以通过i选项列表 ( $-)中的来判断 shell 是交互式的。
preferred_shell=
if [ -x /bin/zsh ]; then
preferred_shell=/bin/zsh
fi
…
if [ -n "$preferred_shell" ]; then
case $- in
*i*) SHELL=$preferred_shell; export SHELL; exec "$preferred_shell";;
esac
fi
Run Code Online (Sandbox Code Playgroud)
如果您希望 zsh 读取您的.zprofile,请传递该-l选项。
如果您的登录 shell 是bash,则可以按上述操作。或者,您可以将这些命令放在~/.bash_profile. 大多数会话启动脚本只读取~/.profile而不是读取~/.bash_profile,但我见过一些在 bash 和读取下运行.bash_profile,所以即使在那里你也应该小心不要exec在非交互式 shell 中调用。
如果您的登录 shell 是 csh 或 tcsh,请参阅在没有 chsh 或管理员权限的情况下更改默认 shell 中的示例