kon*_*box 86
.bash_profile
在您的主目录中创建并添加以下行:
export SHELL=/bin/zsh
exec /bin/zsh -l
Run Code Online (Sandbox Code Playgroud)
更新:.profile
当默认 shell 不是 bash 时,可以作为通用解决方案。我不确定.profile
Zsh是否也可以调用它,它可能会变得多余,但我们可以通过简单的检查安全地做到这一点:
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/sh
Solaris 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 中的示例