
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와 호환되거나 호환되지 않을 수 있는 사용자의 로그인 셸로 설정됩니다.Zsh그리고물고기대중적인 대안입니다. 저는 다양한 Unix 변형에서 10년 동안 zsh를 사용해 왔으며 어떤 시스템 유틸리티도 실패한 기억이 없습니다. 나는 sh 스크립트를 실행하는 $SHELL
대신 엉성하게 작성된 코드 호출을 가끔 보았습니다 . sh
이는 매우 드물며 SHELL
원하는 대로 설정하는 것을 방해할 필요가 없습니다.
간단히 말해서, 그렇습니다. SHELL
여러분이 가장 좋아하는 대화형 셸이며 응용 프로그램은 어떤 구문을 허용하는지, 심지어 -c
옵션을 허용하는지 여부도 보장하지 않습니다.