chsh 和 $SHELL 报告不同的 shell

chsh 和 $SHELL 报告不同的 shell

我使用将 shell 更改为 csh(从 bash)chsh,现在它似乎卡在 csh 中。具体来说,我现在拥有的是

% echo $SHELL
/bin/csh
% chsh
changing shell for USER
New shell[/bin/bash]: /bin/bash
Shell not changed.
%

我对这里发生的事情感到非常困惑。我想指出的是,我在从 csh 和 bash 切换之间重新启动了会话,并且只是bash再次运行切换到 bash shell。

编辑:由于某种原因,它开始奇迹般地发挥作用。有任何想法吗?至于为什么会这样

答案1

chsh命令会读取/etc/password用户条目的文件,并将其用作更改 shell 的值。因此,chsh应该与此命令打印的值相同:

$ awk -F: '/'"$USER"'/ {print $7}' /etc/passwd
/bin/csh

是否展示的值$SHELL也匹配这样的值取决于 shell 启动时它的值。设置一个值并调用 csh 不会改变它:

$ export SHELL=/bin/mysh
$ csh
% echo "$SHELL"
/bin/mysh

如果 SHELL 未设置,它在 csh 中也保持为未设置:

% exit
$ unset SHELL
$ csh
% echo $SHELL
SHELL: Undefined variable.

但 bash 则不然:

% exit
$ unset SHELL
$ bash
$ echo $SHELL
/bin/bash

因此,SHELL 的值可能与 不同步/etc/passwd

相关内容