당신이 당신의 $PATH
다른 곳에서 같은 이름의 다른 실행 파일이 있습니까? 그렇다면 해시 테이블을 사용하여 여분의 $PATH
조회 (Command Search and Execution 참조)를 피하기 때문에 bash가 잘못된 실행 파일을 실행하고있을 가능성이 있습니다.
예를 들어 $PATH
이 /opt/local/bin:/usr/bin
이고 grep
이 /usr/bin
에만 설치되어 있다고 가정합니다. 이제
$ echo $PATH
/opt/local/bin:/usr/bin
$ which grep
/usr/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
을 당신이 당신의 $PATH
/usr/bin
이상에 이전하는 /opt/local/bin
에 grep
의 최신 버전을 설치한다고 가정 : 당신이 grep
을 실행하면, 당신은 확실한 결과를 얻을. which
항상 전체 $PATH
조회 매번 않지만, 배쉬는 해시 테이블을 유지하기 때문에, 배쉬는 여전히 명령이 grep
지도 /usr/bin
의 하나로 생각 : 당신은이 문제를 진단 할 type
builtin을 사용할 수 있습니다
$ which grep
/opt/local/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
$ /opt/local/bin/grep --version
GNU grep 2.6.3
. type
은 명령이 쉘 내장 명령인지, 별칭인지, 함수인지, 키워드인지 또는 실행 파일인지 알려줍니다. 후자의 경우 실행 파일의 전체 경로를 알려줍니다.
$ type grep
grep is hashed (/usr/bin/grep)
어떻게 해결할 수 있습니까? hash
내장 명령을 사용하여 해시 테이블을 조작 할 수 있습니다 (자세한 내용은 help hash
을 입력하십시오). 하나의 항목 (이 경우 grep
)을 수정하려는 경우 hash -d grep
을 사용하여 "grep
에 대한 해시 테이블 항목 삭제"를 수행 할 수 있습니다.이 경우 다음에 grep
을 실행하면 전체 $PATH
을 예상대로 검색합니다. 새로운 소프트웨어를 많이 설치했거나 $PATH
을 변경 한 경우 전체 해시 테이블을 지우려면 hash -r
을 사용하여 비워 두십시오.
실행 파일의 이름은 무엇입니까? 그것이 a.out이라고 가정하면, pwd && ./a.out의 결과는 무엇입니까? (./ PATH 문제가 아닌지 확인하는 것이 중요합니다.) –
이 실행 파일의 이름은 "qact" – Johnyy