재건됨

재건됨

command -p mkdir쉘 스크립트에서 사용하는데 문제가 있습니다 ksh93.

command -p비트는,POSIX에 따르면,

명령 검색은 기본값을 사용하여 수행되며 PATH모든 표준 유틸리티를 찾을 수 있습니다.

설명서 ksh93에도 비슷한 문구가 있습니다.

-p옵션을 사용하면 값으로 정의된 경로가 아닌 기본 경로가 검색됩니다 PATH. 이름을 조회할 때 기능은 검색되지 않습니다. 또한 이름이 특수 내장 항목을 참조하는 경우 주요 단검과 관련된 특수 속성은 존중되지 않습니다. (예를 들어, 미리 정의된 별칭은 redirect='command exec'잘못된 리디렉션이 주어졌을 때 스크립트가 종료되는 것을 방지합니다.)

스크립트를 다음과 같이 단순화했습니다.

#!/usr/local/bin/ksh93 -x
echo "$PATH"
command -p mkdir t

실행하세요:

$ ./test.sh
+ echo /usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
+ command -p mkdir t
./test.sh[3]: mkdir: not found [No such file or directory]

$PATHksh93for (설명서에 따르면) 의 기본값은 /bin:/usr/bin:이며 mkdir다음에서 찾을 수 있습니다 /bin.

$ command -v mkdir
/bin/mkdir

getconf PATH를 호출하기 전에 스크립트에서 명령을 실행 하면 (기본 시스템 정의 값을 가져오기 위해 $PATH) mkdir,통화 mkdir성공.

ksh93이는 적어도 Ubuntu, OpenBSD, macOS 및 Solaris에서는 "version AJM 93u+ 2012-08-01"에서 볼 수 있으며 cat적어도 동일한 방식으로 호출할 때도 영향을 미칩니다.

질문:여기서 분명한 것을 놓치고 있습니까?

추가 정보:

builtin의 명령은 ksh93(존재하지 않는) paths 아래에 여러 유틸리티를 나열합니다 /opt/ast/bin. 이것이 이것과 관련이 있습니까?

$ builtin
:
.
[
/opt/ast/bin/basename
/opt/ast/bin/cat
/opt/ast/bin/chmod
/opt/ast/bin/cmp
/opt/ast/bin/cut
/opt/ast/bin/dirname
/opt/ast/bin/getconf
/opt/ast/bin/head
/opt/ast/bin/logname
/opt/ast/bin/mkdir
/opt/ast/bin/sync
/opt/ast/bin/uname
/opt/ast/bin/wc
alarm
alias

(등.)

ast-users업데이트: 이 쿼리를 메일링 리스트에도 제출했습니다.

답변1

여기와 위에 표시된 내용에 따르면 ast-user이는 버그처럼 보이지만 질문에 대한 답변은 아닙니다.

재건됨

이 질문은 별도의 질문으로 답변하는 것이 가장 좋지만 현재로서는 이것으로 충분합니다.

Ksh93에는 공유 라이브러리에서 추가 명령을 로드한 다음 기존(또는 존재하지 않는) 디렉터리에 바인딩하는 기능이 있습니다.$PATH

경로가 있는 명령이 /opt/ast/bin/고려됩니다.경계도착하다 /opt/ast/bin. 이는 $PATH에/opt/bin/ast/bin 앞으로 /bin, ksh93은 cat내장 함수를 먼저 호출합니다 /bin/cat.

그 존재 /opt/ast/bin여부는 /opt/ast/bin/cat이 메커니즘에 영향을 미치지 않습니다.

답변2

command -pksh93의 AT&T 배포판에는 기본/표준 경로가 올바르게 초기화되지 않아 버그가 많은 것으로 알려져 있습니다. 이것은 수정된 수백 개의 버그 중 하나입니다.Keshi93u+m활발히 유지관리되고 개발되고 있습니다. (저는 메인 개발자/유지관리자입니다.) 최소한 Debian Unstable 및 Slackware-current에서는 기본 ksh93이지만, 물론 코드를 얻고 직접 컴파일할 수도 있습니다.

관련 정보