예를 들어:
$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found
차이점은 무엇입니까? 두 경우 모두 node
및 foo
잘못된 명령이지만 Unix가 node
바이너리를 찾을 수 없는 것 같습니까? 예를 들어 프로그램을 제거할 때 node
프로그램을 정리하여 다음을 얻을 수 있는 방법이 있습니까?
$ node
-bash: node: command not found
편집하다:
명령 결과 type
:
$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found
답변1
bash
명령의 위치를 기억하고 저장하기 때문입니다 .해시시테이블.
언로드 후에도 node
해시 테이블은 지워지지 않고 여전히 에 있는 것으로 간주 bash
되어 검색을 건너뛰고 호출이 직접 사용됩니다 . 더 이상 존재하지 않으면 오류가 반환됩니다 . 즉 , 해당 파일이나 디렉터리가 없다는 의미이며 오류가 사용자에게 보고됩니다.node
/usr/local/bin/node
PATH
/usr/local/bin/node
execve()
node
execve()
ENOENT
bash
에서는 bash
해시 테이블의 항목을 삭제할 수 있습니다.
hash -d node
또는 전체 해시 테이블을 삭제합니다(모든 POSIX 쉘에서 작동):
hash -r
답변2
Ubuntu Linux 16.04에서 "해당 파일 또는 디렉터리가 없습니다"는 현재 작업 디렉터리를 전환해야 함을 의미하고 "명령을 찾을 수 없음"은 문제를 해결하기 위해 apt-get install xxxyyy_zzz를 사용해야 함을 의미합니다.