chshと$ SHELLは異なるシェルを報告します。

chshと$ SHELLは異なるシェルを報告します。

bashからcshに変更シェルを使用しましたが、chsh今はcshに閉じ込められているようです。具体的に今私が持っているのは

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

私はここで何が起こっているのかとても混乱しています。 cshとbashからの切り替えの間にセッションを再開し、bashbashシェルへの切り替えを再度実行したことを指摘したいと思います。

編集する:何らかの理由でそれは奇跡的に動作し始めました。どんなアイデアがありますか?なぜそうなのか

答え1

このコマンドはユーザー項目ファイルをchsh読み取り、それを値として使用してシェルを変更します。/etc/passwordしたがって、chshこのコマンドで印刷される値は同じでなければなりません。

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

〜これ展示する値は、$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

関連情報