POSIX 쉘 스크립트 shebang #!/bin/sh와 #!/usr/bin/env sh의 차이점은 무엇입니까?

POSIX 쉘 스크립트 shebang #!/bin/sh와 #!/usr/bin/env sh의 차이점은 무엇입니까?

나는 최근에 많은 스크립트 /usr/bin/env셰르본. 주로 사용하는 것으로 보입니다불다그리고파이썬, 하지만 지금까지는 한 번도POSIX sh( ash,, dash...).

내 의도가 휴대성이 뛰어난 것이라면 이유가 무엇인지 궁금합니다.POSIX쉘 스크립트는 env이 접근 방식의 이점을 누릴 수 있습니까?


다음을 사용할지 여부에 대한 일반적인 합의가 있습니까?

  • 기준:

    #!/bin/sh
    
  • 환경:

    #!/usr/bin/env sh
    

이것을 완전히 강조하겠습니다.

나는 이것을 본 적이 없습니다 sh.

답변1

로 설정하면 #!/bin/sh파일로 직접 이동됩니다 /bin/sh.

매개변수 #!/usr/bin/env sh로 실행 하도록 설정합니다 . 이렇게 하면 스크립트가 명시적으로 실행되지 않고 in 변수를 통해 실행됩니다 ./usr/bin/envshshPATH/bin/sh

답변2

다른 많은 게시물(예: 허용된 답변이것)는 bin/shSolaris 시스템(10 이하)에서는 POSIX 호환 쉘이 아니지만 에 위치한다고 언급했습니다 /usr/xpg4/bin/sh.

이 경우 #!/bin/shPOSIX 규격이라면 제대로 동작하지 않을 수 있습니다. 그러나 #!/usr/bin/env sh그것이 필요한 쉘을 가리킬지는 의문입니다 .

관련 정보