为什么我不能使用chsh命令更改外壳?


12

至少我以为,我学会了一条新命令,因为该命令:的chsh行为不像所描述的那样。

它被描述为这样工作:

  1. cat /etc/shells 要知道安装了哪些外壳,因此可以在其中进行选择。
  2. 这样做echo $SHELL就知道了,它外壳所使用。
  3. 选择一种贝壳并输入 chsh -s /path/to/shell
  4. 输入密码并使用验证echo $SHELL您是否在新的外壳中。

我这样做了,输入密码时没有收到错误消息,但是我仍然在同一外壳中。

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash

5
您必须先注销然后再次登录。
Rui F Ribeiro'5

7
请不要发布终端文字图片。可以将其复制并粘贴到您的问题正文中,除非您显示图形故障或类似内容,否则实际上无需发布图像。
Sergiy Kolodyazhnyy


我编辑了帖子,删除了图片,然后粘贴了文字,但是图片在一夜之间回来了。
sharkant

@sharkant似乎某人在审阅队列中进行了编辑,并且获得了批准,该操作在事后对您的帖子进行了编辑。我以为SE编辑系统不会用旧的覆盖新的编辑,可是,谁知道呢?
Zan Lynx

Answers:


19

注销并再次登录。

chsh命令将更新/etc/passwd文件,但不会更改当前外壳程序,也不会更改当前外壳程序中$SHELL变量的值(无法执行此操作)。这就是您需要重新登录的原因。您必须开始一个新的登录会话才能使更改生效。


我不了解什么是登录Shell,如何知道我是登录外壳还是某种非登录外壳。如何开始新的登录会话?
sharkant'5

1
@sharkant关键是要/etc/passwd在下次登录之前,不会读取您在中更改的信息。您将必须完全注销,然后再次登录才能使更改生效。如果执行此操作失败,则重新启动计算机也将起作用。
库萨兰达

1
我想我这次明白了:chsh -s / path / to / shell命令不会立即更改我所在的shell,但是会更改/ etc / passwd中的条目,该条目在我启动shell时会生效?
sharkant'5

@sharkant这就是它的工作方式!我很高兴我终于明白了你的误解。我将更新答案。
库萨兰达

1

在我的情况下,使用usermod实用程序命令有效。在Ubuntu 18.04上运行。

  1. 首先,检查当前值

grep nameofuser /etc/passwd

  1. 更改

sudo usermod --shell /bin/bash nameofuser

  1. 验证一下

grep nameofuser /etc/passwd

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.