原因分析
跳转到“原因分析”-
chsh命令未完全生效:- 使用
chsh命令更改默认 shell 需要重新登录会话,并且有时可能需要重启系统以确保所有会话都正确更新。如果更改后没有注销并重新登录,系统可能仍会使用旧的默认 shell(例如bash)。
- 使用
-
SSH 配置未更新:
- SSH 服务可能在某些配置文件中被设置为默认使用
bash作为登录 shell,即使用户的默认 shell 被设置为zsh。这种情况通常发生在某些服务器环境中,管理员可能对/etc/passwd文件或 SSH 服务配置进行了限制。
- SSH 服务可能在某些配置文件中被设置为默认使用
-
.bash_profile或.bashrc自动执行bash:- 如果在主目录中有
.bash_profile或.bashrc文件,这些文件会在每次登录时自动运行。如果这些文件包含启动bash的命令,即使默认 shell 是zsh,仍然会启动bash。
- 如果在主目录中有
-
未正确修改
/etc/passwd文件:chsh命令实际是修改/etc/passwd文件中的默认 shell 信息。如果由于某些原因(例如权限问题或命令语法错误),该文件未被正确修改,默认 shell 仍然可能是bash。
-
SSH Daemon 配置:
- SSH Daemon(
sshd)的配置文件可能会强制所有连接使用bash作为默认 shell。在这种情况下,即使用户的 shell 已被更改为zsh,SSH 登录仍会使用bash。
- SSH Daemon(
解决方法
跳转到“解决方法”在 .bash_profile 或 .bashrc 文件中添加以下代码:
# 启动 zshif [ -t 1 ]; then exec zshfi由于代码片段有效地在 bash 启动后立即切换到 zsh,最可能的情况是:
- 系统或用户的登录 shell 实际上仍然是
bash,而不是zsh。 - 确保使用
chsh -s $(which zsh)正确更改用户的默认 shell,或者手动编辑/etc/passwd文件并重新启动 SSH 服务。
来源:CSDN 原文,首次发布于 2024-08-29。