Logos Asked: 2025-02-17 04:07:45 +0800 CST2025-02-17 04:07:45 +0800 CST 2025-02-17 04:07:45 +0800 CST 如何打开终端时自动启动 ZSH? 772 我已经安装了 zsh 和 oh-my-zsh,但我的终端(xfce4-terminal在EndeavourOS(基于 Arch)上)总是以 启动bash。 zsh 1 个回答 Voted Best Answer Stéphane Chazelas 2025-02-17T05:12:28+08:002025-02-17T05:12:28+08:00 大多数终端仿真器启动的 shell 的名称或路径存储在$SHELL环境变量中,该 shell 本身通常在登录到帐户数据库中的用户登录 shell 时设置(参见perl -le 'print((getpwuid$<)[8])'或 的输出getent -- passwd "$LOGNAME" | cut -d: -f7),如果没有这样的变量,通常是用户的登录 shell 或/bin/sh(前者,xfce4-terminal除非已配置custom-command)。 一些终端仿真器具有可覆盖该默认值或更改默认值的定制文件(例如,~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml通过xfce4-terminal某些首选项GUI 对话框编辑的),或者在桌面范围配置数据库中具有设置(例如,在仿真器的custom-command输出中查找)或可能在 X11 资源中(可以在命令行、某些或某些文件中设置,或使用诸如;和的输出可用于查询这些内容)。dconf dump /org/gnome/terminal/gnome-terminal~/.Xdefaults-$HOSTNAMEapp-defaultsxrdbappresxrdb -q 在您的情况下,最有可能的是,您的登录 shell 仍然是/bin/bash(这是大多数 GNU/Linux 系统上的默认设置,也是bashGNU 项目的 shell),您只需将其更改为/bin/zsh或任何在(参见 的输出)zsh中列出的路径(或在某些系统上)。/etc/shellsgrep zsh /etc/shellschshpasswd -s 如果您无法更改登录 shell,例如,您处于企业环境中,您的帐户是集中管理的,而管理员不允许您更改 shell 或zsh不在允许的 shell 之列(尽管在这种情况下,我认为您无法在系统范围内安装软件),则您需要确保在登录时$SHELL将变量设置为/bin/zsh。在某些环境中,可以通过向SHELL=/bin/zsh某些~/.environment或添加来完成此操作~/.pam_environment。 这种方法在任何桌面环境之外的 Linux 虚拟终端中都不起作用。在这种情况下,如果您无法更改登录 shell,唯一的方法是在登录时bash启动zsh,您可以通过添加以下内容来实现(假设zsh已安装在/bin您的系统上): if [ -x /bin/zsh ]; then export SHELL=/bin/zsh case $- in (*i*) exec -a -zsh "$SHELL" esac fi 在 开始时~/.bash_profile。这将$SHELL无条件地进行设置,以便从该会话内启动的诸如终端仿真器或编辑器之类的程序将知道要启动zsh而不是您的登录 shell,并且zsh如果bash以登录 shell 的形式交互启动,则还将作为登录 shell 执行(仅作为登录 shell 调用的 bash 实例读取~/.bash_profile)。 对于图形桌面环境中的终端仿真器,如果所有其他方法(使用chsh、登录时设置$SHELL、手动配置终端仿真器)都失败,则可以添加相同的代码(不带),-a -zsh以便以~/.bashrc交互方式运行 bash 最终运行zsh。
大多数终端仿真器启动的 shell 的名称或路径存储在
$SHELL
环境变量中,该 shell 本身通常在登录到帐户数据库中的用户登录 shell 时设置(参见perl -le 'print((getpwuid$<)[8])'
或 的输出getent -- passwd "$LOGNAME" | cut -d: -f7
),如果没有这样的变量,通常是用户的登录 shell 或/bin/sh
(前者,xfce4-terminal
除非已配置custom-command
)。一些终端仿真器具有可覆盖该默认值或更改默认值的定制文件(例如,
~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-terminal.xml
通过xfce4-terminal
某些首选项GUI 对话框编辑的),或者在桌面范围配置数据库中具有设置(例如,在仿真器的custom-command
输出中查找)或可能在 X11 资源中(可以在命令行、某些或某些文件中设置,或使用诸如;和的输出可用于查询这些内容)。dconf dump /org/gnome/terminal/
gnome-terminal
~/.Xdefaults-$HOSTNAME
app-defaults
xrdb
appres
xrdb -q
在您的情况下,最有可能的是,您的登录 shell 仍然是
/bin/bash
(这是大多数 GNU/Linux 系统上的默认设置,也是bash
GNU 项目的 shell),您只需将其更改为/bin/zsh
或任何在(参见 的输出)zsh
中列出的路径(或在某些系统上)。/etc/shells
grep zsh /etc/shells
chsh
passwd -s
如果您无法更改登录 shell,例如,您处于企业环境中,您的帐户是集中管理的,而管理员不允许您更改 shell 或
zsh
不在允许的 shell 之列(尽管在这种情况下,我认为您无法在系统范围内安装软件),则您需要确保在登录时$SHELL
将变量设置为/bin/zsh
。在某些环境中,可以通过向SHELL=/bin/zsh
某些~/.environment
或添加来完成此操作~/.pam_environment
。这种方法在任何桌面环境之外的 Linux 虚拟终端中都不起作用。在这种情况下,如果您无法更改登录 shell,唯一的方法是在登录时
bash
启动zsh
,您可以通过添加以下内容来实现(假设zsh
已安装在/bin
您的系统上):在 开始时
~/.bash_profile
。这将$SHELL
无条件地进行设置,以便从该会话内启动的诸如终端仿真器或编辑器之类的程序将知道要启动zsh
而不是您的登录 shell,并且zsh
如果bash
以登录 shell 的形式交互启动,则还将作为登录 shell 执行(仅作为登录 shell 调用的 bash 实例读取~/.bash_profile
)。对于图形桌面环境中的终端仿真器,如果所有其他方法(使用
chsh
、登录时设置$SHELL
、手动配置终端仿真器)都失败,则可以添加相同的代码(不带),-a -zsh
以便以~/.bashrc
交互方式运行 bash 最终运行zsh
。