내 관리자는 내 기본 쉘이 로 설정되어 있다고 bash
말하지만
$ echo $SHELL
/bin/csh
$
기본 쉘이 이 변수와 관련이 있습니까 SHELL
? 아니요, 변수는 무엇에 사용됩니까?
답변1
이는 100% 정확하지 않습니다. 예를 들어:
$> echo $SHELL
/bin/bash
$> /bin/ksh
$] echo $SHELL
/bin/bash
$SHELL에는 /etc/passwd의 사용자 항목에 지정된 세션의 상위 쉘(일반적으로 로그인 쉘)이 포함되어 있습니다. 더 명확하게 말하면 $SHELL은 현재 세션을 생성한 상위 셸입니다. 내 예에서 현재 Korn 쉘은 기술적으로 BASH에서 실행되고 있으므로 $SHELL이 수정되지 않습니다.
분명히 이것은 거의 전적으로 의미론적인 구별이지만, 보이는 것이 곧 얻는 것이라고 믿는 함정에 빠지지 마십시오.
답변2
유닉스의 "기본 쉘"시스템 관리자사용자 데이터베이스의 "쉘" 열에 저장되는 것입니다. 이것은 텍스트 모드(텍스트 모드 콘솔 또는 SSH와 같은 네트워크를 통해)로 로그인할 때 호출되는 프로그램입니다.
유닉스의 "기본 쉘"애플리케이션예 sh
또는 $SHELL
. $SHELL
대화형 쉘인지 스크립트를 실행하는 쉘 인지에 대해서는 몇 가지 차이점이 있습니다. 이것POSIX 사양이와 관련하여 다양한 관행을 반영하는 모호성이 있습니다.
이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타내야 합니다. 이 인터프리터가 쉘 및 유틸리티 볼륨의 쉘 명령 언어에 대한 IEEE Std 1003.1-2001을 준수하지 않는 경우,2장, 쉘 명령 언어, 유틸리티의 동작은 IEEE Std 1003.1-2001에 설명된 것과 다를 수 있습니다.
선호하는 명령 언어에 대한 이 점은 일부 응용 프로그램이 $SHELL
POSIX 쉘 명령 구문으로 명령을 실행하려고 시도할 수 있음을 의미합니다. 그러나 UNIX 응용 프로그램에서 셸 명령을 실행하는 일반적인 방법은 다음과 같습니다.system
, 환경 변수 값에 관계없이 적절한 쉘을 찾아야 합니다 $SHELL
. Bash와 ksh는 POSIX 호환 셸의 예입니다. Zsh가 가깝습니다. Csh는 다르며 SHELL
csh로 설정하는 데 때때로 문제가 발생할 수 있습니다(대부분의 응용 프로그램에서 이를 호출 sh
하고 csh는 기본 사용에 충분히 호환되므로 이는 일반적이지 않습니다).
사실 유닉스의 경우사용자는 선호하는 대화형 셸 입니다 $SHELL
. 즉, 터미널 에뮬레이터를 시작할 때 보고 싶은 것입니다. 로그인 쉘과 동일할 필요는 없습니다. .profile
또는 에서 이를 수행할 수 있습니다 .login
.
1
예를 들어, 저는 일반적으로 Bourne 호환성을 유지하면서 기본 로그인 셸을 그대로 두고 .profile
사용 SHELL
가능한 경우 zsh로 설정합니다.
답변3
아니요, 기본 쉘과는 아무런 관련이 없습니다.
체계기본/etc/default/useradd
쉘은 파일에 정의되어 있습니다.
당신의기본쉘은 파일에 정의되어 있습니다 /etc/passwd
. chsh
명령을 통해 변경할 수 있습니다 .
$SHELL
변수대개저장현재의쉘 실행 파일 경로입니다. 이 시점에서 모든 쉘은 다르게 동작합니다. 예를 들어 시작할 때 쉘 변수가 설정되지 않은 경우 bash는 이를 설정하고, 그렇지 않으면 변경되지 않은 상태로 유지합니다. tcsh는 이 변수를 전혀 지원하지 않습니다.
답변4
나는 항상 환경 변수가 실행 중인 프로그램에 대한 제안을 제공할 수 있다고 생각했습니다. $SHELL은 쉘을 실행해야 할 때 프로그램이 시작되기를 원하는 쉘입니다. 이것을 귀하의 이메일 프로그램이 귀하에게 제공할 편집기를 결정하는 데 사용할 수 있는 $EDITOR와 비교하십시오. B/c 이러한 환경 변수는 변경하기 쉽고 실제로 세상이 어떻게 생겼는지 결정하는 데 의존할 수는 없습니다.
기본 쉘에 대한 질문과 관련하여: chsh는 로그인 쉘을 변경할 수 있는 명령입니다. 변경하기 전에 현재 선택 항목이 무엇인지 표시됩니다.