"sh"는 "/bin" 디렉토리에 있어야 합니까?

"sh"는 "/bin" 디렉토리에 있어야 합니까?

POSIX 호환 운영 체제(예: Linux)에는 쉘이 있어야 한다는 내용을 읽었습니다 sh.

하지만 디렉터리 sh에 있어야 합니까 , 아니면 아무 디렉터리에나 있을 수 있습니까?/bin

답변1

POSIX는 강제 /dev/tmp디렉토리만 존재합니다., , /dev/null, /dev/tty/dev/console파일. 표준 유틸리티가 있어야 하지만 특정 위치가 지정되지 않습니다. a 는 전혀 존재하지 않을 수도 있고 /bin, 존재한다면 포함하지 않을 수도 있고 sh, 존재한다면 POSIX 가 아닐 수도 있습니다 sh.

다음을 사용하여 PATHPOSIX 도구(포함)로 유효한 변수를 얻을 수 있습니다.shgetconf주문하다:

$ PATH=$(getconf PATH)
$ sh

이는 예를 들어 다음과 같은 Solaris에서 유용합니다.기본값은 shPOSIX와 호환되지 않습니다.sh, 그러나 이러한 방식으로 규정 준수 및 액세스를 제공합니다(왜냐하면Solaris는 인증된 Unix입니다.). POSIX 및 getconf PATH기타 많은 필수 도구(/usr/xpg4/binsh다음과 같은 쓸모없는 것을 포함하십시오.cd).

답변2

sh아니요. 가입할 필요가 없습니다 /bin. /bin, /usr/bin/usr/xpg4/bin가능한 위치를 명시적으로 참조합니다 . POSIX 사양에서는 PATH에만 있어야 합니다 sh.

이것POSIX 사양상태:

/bin/sh애플리케이션은 쉘의 표준 PATH가 가정될 수 없으며 /usr/bin/shgetconf PATH에 의해 반환된 PATH를 조사하여 결정되어야 하며 반환된 경로 이름이 쉘 내장 경로 이름이 아니라 절대 경로 이름인지 확인해야 한다는 점을 인식해야 합니다 .

예를 들어, 표준 sh 유틸리티의 위치를 ​​확인하려면 다음을 수행하십시오.

command -v sh

일부 구현에서는 다음이 반환될 수 있습니다.

/usr/xpg4/bin/sh

답변3

다른 사람들이 말했듯이 이는 POSIX 준수에 대한 엄격한 요구 사항은 아닙니다.

그러나 기존 소프트웨어와의 호환성은 틀림없이 훨씬 더 중요하며(결국 POSIX의 요점은 모든 표준 호환 운영 체제에서 특정 기능을 실행하는 것입니다), OS가 sh 를 제공하지 않으면 /bin/sh일부 기능이 중단됩니다.

가장 분명한 것은 스크립트가 #!/bin/sh이 표준화된 경로에 의존한다는 것입니다. 이는 작업에 필요하지 않습니다.#!POSIX는 이러한 기능이 일반적이라고 언급하지만 행에 대한 지원 도 필요하지 않습니다 .:

일부 역사적 구현이 쉘 스크립트를 처리하는 또 다른 방법은 파일의 처음 2바이트를 "#!" 문자열로 인식하고 파일의 첫 번째 줄의 나머지 부분을 실행할 명령 해석기의 이름으로 사용하는 것이었습니다.

그러나 지원이 없으면 많은 기존 소프트웨어가 작동하지 않거나 이식을 위해 추가 작업이 필요합니다.

관련 정보