$ echo $SHELL
/bin/bash
$ /bin/ksh93
$ echo $SHELL
/bin/bash
$ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
$ ssh test@localhost
test@localhost's password:
$ echo $SHELL
/bin/ksh93
$ bash
$ echo $SHELL
/bin/ksh93
$SHELL
다른 쉘을 실행한 후에 변경되기를 바랍니다 . 왜 안 돼?
PS 그러나 쉘은 변경되지만 $SHELL 변수만 변경되지 않습니다.
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
답변1
이 변수가 변경될 것으로 예상해서는 안 됩니다. 현재 실행 중인 쉘이 아닌, 비밀번호 데이터베이스에 저장된 경로인 기본 쉘에 대한 경로를 저장하는 데 사용됩니다.
답변2
SHELL
예POSIX에 의해 지정됨. 인용하다:
SHELL 이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타내야 합니다. [...]
다른 셸을 실행한다고 해서 반드시 사용자 기본 설정이 변경되는 것은 아닙니다.
대부분의 *.nix 시스템은 POSIX와 호환되도록 설계되었으므로 POSIX가 지정하는 항목 유형과 이를 검색할 위치를 아는 것이 좋습니다. 환경변수도 그 중 하나입니다.
답변3
SHELL 가변 스토리지세션의 상위 셸(때로는 기본 로그인 셸과 일치함). $SHELL은 현재 세션을 생성한 상위 쉘입니다.
따라서 내 사용자에 대해 bash를 사용하고 다음을 수행하면 chsh -s /bin/zsh user
이 작업을 수행할 때 echo $SHELL
표시되는 쉘은 여전히 입니다 BASH
.
바라보다이 기사.