‘test’라는 실행 파일이 $ PATH에 있지만 실행되지 않습니다 파일이 있습니다 (요청하기

$ HOME / bin에 파일이 있습니다 (요청하기 전에 파일이 내 경로에 있습니다) test. 파일의 전체 경로로 파일을 실행할 때 제대로 실행될 수 있음을 확인했습니다. 그러나이 방법으로 실행하지 않으면 정말 이상한 문제가 발생합니다. test터미널에서 방금 실행하면 아무것도하지 않고 즉시 돌아옵니다. 나는 이것이 여러 가지 이유로 파일을 찾는 문제가 아니라는 것을 알고 있습니다.

  1. 오류 메시지가 없습니다. 일반적으로 파일을 찾을 수 없거나 실행할 수없는 경우 메시지가 인쇄됩니다.

  2. which test계속 실행 하면 올바른 파일 경로가 반환됩니다.

  3. 아마도 가장 이상한 것은 아마도 스크립트가 제대로 작동 할 때 잘 작동한다는 것 strace입니다. 나는 strace무슨 일이 일어나고 있는지 알아낼 수 있는지 확인 하려고 노력 했지만로 실행할 때 strace0 문제로 예상대로 작동했습니다.



답변

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외부 명령이기도하므로 내장에 대한 아이디어가 없습니다. 반면에, 명령은 쉘에 내장하고, 그 보여 것입니다 .typetype testtest is a shell builtin

참조 : 왜 사용하지 “어떤?” 그렇다면 무엇을 사용해야합니까?


답변