使 zsh 成为没有 root 访问权限的默认 shell

goo*_*cow 67 bash login zsh profile

我用我的学校的电脑,并想用zsh代替bash。我想将其设为默认 shell,但我无法运行命令,例如$ chsh -s $(which zsh)因为我没有管理员权限。

有没有办法可以将某些内容放入我的内容中.bashrczsh在打开时自动调用的内容作为解决方法?

澄清一下,zsh已经安装了。

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,dashksh: 您需要编辑的文件是~/.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 中的示例