我正在尝试使用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 了