새 쉘을 실행할 때 $ SHELL이 변경되지 않는 이유는 무엇입니까?


14
 $ 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다른 쉘을 실행 한 후에 변경 될 것으로 예상 됩니다. 왜 그렇지 않습니까?

추신 : 그러나 쉘은 변경되지만 $ SHELL 변수 만 동일하게 유지됩니다.

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found

2
echo $0현재 포탄을 얻기 위해 사용
Manula Waidyanatha

답변:


13

이 변수가 변경되지 않아야합니다. 기본 쉘의 경로, 즉 현재 실행중인 쉘이 아닌 비밀번호 데이터베이스에 저장된 경로를 저장하는 데 사용됩니다.


8

SHELL되는 POSIX에 의해 지정 . 인용 :

SHELL이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타냅니다. [...]

다른 쉘을 실행한다고해서 반드시 사용자 환경 설정이 변경된 것은 아닙니다.

대부분의 * .nix 시스템은 POSIX 준수를 목표로하기 때문에 POSIX가 지정하는 유형과 검색 위치를 익히는 것이 좋습니다. 환경 변수는 그중 하나입니다.


-3

SHELL 변수는 세션상위 쉘을 저장하며 때로는 기본 로그인 쉘과 일치합니다 . $ SHELL은 현재 세션을 생성 한 상위 쉘입니다.

난 내 사용자에 대한 떠들썩한 파티를 사용하여이 작업을 수행 할 경우 그래서, : chsh -s /bin/zsh user, 내가 할 때 echo $SHELL, 쉘은 계속 될 것입니다 표시 BASH.

이 기사를 참조 하십시오 .


4
링크 된 기사가 잘못되었습니다. 즉, SHELL은 부모 쉘과 때때로 일치하는 기본 로그인 쉘 (마지막 로그인 시간)을 저장합니다. 이 변수는 부모 또는 현재 셸에서 수정하지 않습니다. 그들이 할 수있는 유일한 조치는 (예기치 않게) 설정되지 않은 경우 설정하는 것입니다.
jlliagre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.