환경 변수에는 두 가지 가능한 용도가 있습니다 SHELL
.
- 지정하는 데 사용할 수 있습니다.인터렉티브사용자가 사용하려는 쉘 및/또는
- 프로세스는 이를 사용하여 다른 명령을 실행하고 일반적인 관용구
/bin/sh -c "..."
의 명령을 대체할 수 있습니다.
전자(예: )에만 사용된다면 이상할 수 있지만 , 후자에도 사용된다면 인수를 이해 하고 환경을 그대로 유지하는 ipython
것과 같은 기본 형태의 POSIX 호환성을 제공해야 합니다 (-c
이건 매우 까다롭다).
이것POSIX 표준여기서는 그다지 명확하지 않습니다. 그냥 이렇게 쓰여 있습니다.
이 변수는 사용자가 선호하는 명령 언어 해석기의 경로 이름을 나타내야 합니다. 이 인터프리터가 IEEE Std 1003.1-2001, 2장, 셸 및 유틸리티 볼륨의 셸 명령 언어를 준수하지 않는 경우 유틸리티는 IEEE Std 1003.1-2001에 설명된 것과 다르게 동작할 수 있습니다.
두 번째 용도는 실제로 일반적이거나 유효한데, 이상한 것으로 설정하면 무엇을 걱정해야 합니까 SHELL
?
답변1
POSIX C API 중 어느 것도 SHELL
명시적으로 환경 변수를 사용하지 않습니다. 이것system
그리고popen
함수는 이름이 지정된 프로그램을 호출해야 합니다 sh
. 일부 유틸리티(예:ex
,mailx
, …)을 사용해야 $SHELL
하지만 항상 사용자 제공 코드를 실행합니다.make
명시적으로 무시됩니다 $SHELL
.
이 섹션은 다음과 같습니다.환경 변수허용하다유용$SHELL
, 그러나 C API("시스템 인터페이스")는 POSIX sh와 호환되지 않는 경우 다르게 동작하지 않습니다.
실제로 SHELL
POSIX 규격일 수도 있고 아닐 수도 있는 사용자의 로그인 셸로 설정됩니다.지쉬그리고물고기인기있는 대안입니다. 저는 10년 동안 다양한 Unix 변형에서 zsh를 사용해 왔고 시스템 유틸리티 오류가 기억나지 않습니다. sh 스크립트를 실행하는 $SHELL
대신 호출하는 일부 엉성하게 작성된 코드를 가끔 볼 수 있습니다 . sh
이는 매우 드물며 SHELL
원하는 대로 설정하는 데 방해가 되지 않습니다.
간단히 말해서, 그렇습니다. SHELL
이것은 여러분이 가장 좋아하는 대화형 셸이며, 애플리케이션은 어떤 구문을 허용하는지, 심지어는 options 를 허용하는지 여부에 대해 보장하지 않습니다 -c
.