运行 chsh 不会更改 shell

运行 chsh 不会更改 shell

我想将 shell 从 bash 更改为 zsh。

我尝试以 zol 用户身份登录时运行以下命令:

$ chsh -s /bin/zsh
$ sudo chsh -s /bin/zsh zol
$ su -c 'chsh -s /bin/zsh zol'
# The above all results with:
$ password:
$ chsh: Shell not changed.

# zsh exists in /etc/shells.. 
chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh

可能出什么问题了?我该如何修复它?

答案1

如果您在尝试更改信息时打开了 /etc/passwd (vim /etc/passwd),则用户帐户修改将不会被保存。

替代方案:尝试使用 usermod (如 zol):

$ usermod -s /bin/zsh 

或者

$ sudo usermod -s /bin/zsh zol

如果这也不起作用,请/etc/passwd手动编辑。

sudo vipw
# set zol's shell to /bin/zsh
:wq

答案2

刚刚遇到这个。无论我做什么,登录和退出都不会改变我的 shell,但它已列在 /etc/shells 和 /etc/passwd 中。

最后我突然意识到:也许我已经用另一个会话登录了?

所以我做了

# who

它验证了我确实有来自其他机器的其他打开会话:

dom  pts/0        Nov 6 13:53 (10.1.6.121)
dom  pts/1        Nov 5 12:30 (10.1.6.165)
dom  pts/2        Nov 4 12:33 (10.1.6.197)

然后我做了:

pkill -KILL -u dom

我立即注销并重新登录后:瞧!外壳已更改

答案3

如果您看到chsh: Shell not changed.,则可能意味着 shell 已经更改。

检查列出的是哪个 shell:

cat /etc/passwd | grep `cd; pwd`

如果正确,请注销并重新登录以使更改生效。

答案4

改变它从/etc/passwd

我在使用 zsh 时遇到了一些问题(这是 manjaro 中的默认设置),我用它来返回 bash。

[infinito@manjaro ~]$ grep infinito /etc/passwd
infinito:x:1000:1000:Sergio N:/home/infinito:/bin/bash      <---here

相关内容