$ HOME / bin에 파일이 있습니다 (요청하기 전에 파일이 내 경로에 있습니다) test
. 파일의 전체 경로로 파일을 실행할 때 제대로 실행될 수 있음을 확인했습니다. 그러나이 방법으로 실행하지 않으면 정말 이상한 문제가 발생합니다. test
터미널에서 방금 실행하면 아무것도하지 않고 즉시 돌아옵니다. 나는 이것이 여러 가지 이유로 파일을 찾는 문제가 아니라는 것을 알고 있습니다.
-
오류 메시지가 없습니다. 일반적으로 파일을 찾을 수 없거나 실행할 수없는 경우 메시지가 인쇄됩니다.
-
which test
계속 실행 하면 올바른 파일 경로가 반환됩니다. -
아마도 가장 이상한 것은 아마도 스크립트가 제대로 작동 할 때 잘 작동한다는 것
strace
입니다. 나는strace
무슨 일이 일어나고 있는지 알아낼 수 있는지 확인 하려고 노력 했지만로 실행할 때strace
0 문제로 예상대로 작동했습니다.
답변
test
사용하는 불행한 이름 이며 조건부 테스트 의 표준 유틸리티 입니다 . (실제로는 in 과 동일한 명령 이며 구문적인 것처럼 보이지만 실제로는 정상적인 명령입니다.)[
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 (거짓) 만 반환합니다.
유틸리티 자체를 구현하지 않기 strace test
때문에 실행 에는 쉘 내장 기능이 포함 strace
되지 않습니다. 그것은 당신이 찾은 것을 사용합니다 PATH
. 당신은 아마 표준을 가지고 주 test
에 /bin/test
또는 /usr/bin/test
그 처음에있을 것입니다 그렇다면 PATH
, strace
실행되는 실행됩니다.
내 Bash에서 which
외부 명령이기도하므로 내장에 대한 아이디어가 없습니다. 반면에, 명령은 쉘에 내장하고, 그 보여 것입니다 .type
type test
test is a shell builtin
참조 : 왜 사용하지 “어떤?” 그렇다면 무엇을 사용해야합니까?