chsh -s /usr/bin/zsh 不起作用

chsh -s /usr/bin/zsh 不起作用

我正在尝试使用chsh命令将我的 shell 永久更改为 zsh,但它不起作用。

zsh 已安装(通过 apt),当我直接从 bash 提示终端调用它时,它工作正常。但我无法让 zsh 默认加载到终端中,而 chsh 正在做一些奇怪的事情:

$ echo $SHELL
/bin/bash
$ which zsh
/usr/bin/zsh
$ chsh -s /usr/bin/zsh
Password: 
$ echo $SHELL
/bin/bash
$ grep kurtosis /etc/passwd
kurtosis:x:1000:1000:kurtosis,,,:/home/kurtosis:/usr/bin/zsh

看来 chsh 已成功更改 /etc/passwd,但未能更改 $SHELL 环境变量。因此,新终端始终以 bash 而不是 zsh 启动。

我不知道该去哪里查找以排除此故障。 .bashrc,即使在指定 shell 之前不会调用它?任何帮助表示感谢。

答案1

您需要再次注销以使这些更改生效。/etc/passwd 文件中定义的 shell 是您的登录shell :-) 因此您需要实际登录才能实现此目的。

答案2

这里可能会发生几个不同的问题。

问题 1. /etc/passwd 中的默认登录 shell 尚未更改,可以通过运行以下命令解决此问题:chsh -s /usr/bin/zsh这将更新 /etc/passwd

问题 2. 即使更改了默认登录 shellchsh -s /usr/bin/zsh并确认您的 shell 在 /etc/passwd 中实际设置为 zsh,Bash 仍然在使用。这是由回收的 ssh 会话引起的。注销并重新登录不会立即解决问题,会话要么需要过期或超时,要么您需要终止会话并重新连接。您可以重新启动,但下面是一种更简单的方法,可帮助您找到要终止的会话。

检查我正在使用的 shell (/bin/bash) 以及我应该使用的 shell (/usr/bin/zsh):

asc@g1:~$ echo $SHELL
/bin/bash

asc@g1:~$ cat /etc/passwd|grep asc
asc:x:1000:1000:asc,,,:/home/asc:/usr/bin/zsh

找出我的终端会话信息:

asc@g1:~$ who
asc      pts/1        2020-01-28 13:08 (172.16.1.2)

asc@g1:~$ ps aux|grep ssh
root      1220  0.0  0.0  72300  6076 ?        Ss   Jan22   0:00 /usr/sbin/sshd -D
root     32879  0.0  0.0 107988  7224 ?        Ss   13:08   0:00 sshd: asc [priv]
asc      33031  0.0  0.0 107988  3612 ?        S    13:08   0:00 sshd: asc@pts/1
asc      47453  0.0  0.0  14428  1032 pts/1    S+   13:21   0:00 grep --color=auto ssh

终止我的终端会话:

asc@g1:~$ kill 33031

然后通过 SSH 重新登录到机器,你就可以使用 ZSH 了

相关内容