$HOME/bin에 파일이 있고(물어보기 전에는 그렇습니다. 내 경로에 있습니다) test
파일의 전체 경로로 실행하면 파일이 제대로 실행된다는 것을 확인했습니다. 그런데 이렇게 실행하지 않으면 아주 이상한 문제에 부딪히게 됩니다. test
터미널에서 이것을 실행 하면 아무 작업도 수행되지 않고 즉시 반환됩니다. 파일을 찾는 데 문제가 없다는 것을 알고 있으며 그 이유는 다음과 같습니다.
오류 메시지가 없습니다. 일반적으로 파일을 찾을 수 없거나 실행할 수 없는 경우 이를 설명하는 메시지가 인쇄됩니다.
계속 실행하면
which test
올바른 파일 경로가 반환됩니다.아마도 가장 이상한 점은 스크립트가 실행될 때 잘 작동한다는 것입니다
strace
.strace
무슨 일이 일어나고 있는지 알아낼 수 있는지 확인하기 위해 를 사용해 보았지만 을 사용하여 실행했을 때strace
문제가 0개로 예상대로 작동했습니다.
답변1
test
불행한 이름입니다.표준 유틸리티조건부시험. (실제로 [
는 의 명령과 동일 합니다 if [ ... ]
.것 같다구문과 비슷하지만 실제로는 일반적인 명령입니다. )
test
Bash도 내장되어 있으므로 런타임은 test
경로에서 바이너리를 찾지 않습니다.
bash$ help test | head
test: test [expr]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary.
[...]
test
매개변수가 없으면 그냥 1(false)을 반환합니다.
실행에는 자체 유틸리티가 구현되지 않으므로 strace test
내장 셸이 포함되지 않습니다 . 또는 에 기준이 있을 수 있으므로 첫 번째 항목인 경우 해당 항목 strace
이 실행됩니다.PATH
test
/bin/test
/usr/bin/test
PATH
strace
내 Bash에서는 which
외부 명령이기도 하므로 내장 명령도 이해하지 못합니다. 반면에,type
명령쉘에 내장되어 type test
표시됩니다 test is a shell builtin
.