POSIX는 표준 유틸리티가 PATH에 있음을 보장합니까?

POSIX는 표준 유틸리티가 PATH에 있음을 보장합니까?

존재하다"명령 검색 및 실행" 섹션, POSIX 사양에서는 PATH실행할 유틸리티를 찾을 때 검색하라고 나와 있습니다(일부 예외 있음). 사양 PATH에는 초기화가 모든 표준 유틸리티에서 발견되는 값이 보장된다는 언급이 있습니까?

아니면 표준 유틸리티를 실행하려고 할 때 "명령을 찾을 수 없음" 오류가 발생하지 않도록 보장하기 위해 다음과 같은 작업을 수행해야 합니까?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

(보다command유틸리티에 대한 POSIX 사양)

답변1

예, 아니오. POSIX 환경에서 유틸리티는 사양에 설명된 대로 작동해야 합니다. 실제로 이는 호환 버전의 유틸리티가 에 있어야 함을 의미합니다 $PATH. 그러나 POSIX 호환 시스템에서 프로그램을 실행하는 경우 비호환 환경에서 실행할 수 있습니다. 실제로 자주 일어나는 일은 운영 체제에 레거시 모드와 POSIX 모드가 있고 기본값은 레거시 모드라는 것입니다. 일부 명령이 누락된 것보다 더 나쁜 것은 레거시 모드에 의미가 다른 옵션과 같은 비호환성이 있는 경우가 많다는 것입니다.

PATH제품을 검색하실 수 있습니다.getconf. 물론 getconf원본이 $PATH정확하지 않을 수도 있기 때문에 이는 까다롭습니다. 신청 목적주문하다한 가지 접근 방식을 보여줍니다.

command -p getconf PATH

사양을 이해하면 POSIX 호환 환경에서 프로그램을 실행하는 경우에는 필요하지 않습니다. POSIX 호환 환경에서 프로그램을 실행하지 않으면 POSIX가 적용되지 않습니다. 그러나 이 애플리케이션의 사용은 제안으로 간주될 수 있습니다. 이것이 작동하지 않으면 공급업체가 POSIX 사양 문자에 대해 무엇을 했는지에 관계없이 해당 사양을 준수하지 않았다고 공급업체에 불만을 제기할 권리가 있습니다. 영혼.

관련 정보