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.

관련 정보