$SHELL 환경 변수는 대화형 쉘에만 적용됩니까?

$SHELL 환경 변수는 대화형 쉘에만 적용됩니까?

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를 준수하지 않는 경우 다른 동작을 갖습니다 .

실제로는 SHELLPOSIX와 호환되거나 호환되지 않을 수 있는 사용자의 로그인 셸로 설정됩니다.Zsh그리고물고기대중적인 대안입니다. 저는 다양한 Unix 변형에서 10년 동안 zsh를 사용해 왔으며 어떤 시스템 유틸리티도 실패한 기억이 없습니다. 나는 sh 스크립트를 실행하는 $SHELL대신 엉성하게 작성된 코드 호출을 가끔 보았습니다 . sh이는 매우 드물며 SHELL원하는 대로 설정하는 것을 방해할 필요가 없습니다.

간단히 말해서, 그렇습니다. SHELL여러분이 가장 좋아하는 대화형 셸이며 응용 프로그램은 어떤 구문을 허용하는지, 심지어 -c옵션을 허용하는지 여부도 보장하지 않습니다.

관련 정보