Bash는 이동/삭제된 실행 파일의 잘못된 경로를 기억합니다.

Bash는 이동/삭제된 실행 파일의 잘못된 경로를 기억합니다.

내가 할 때

which pip3

알겠어요

/usr/local/bin/pip3

그런데 실행하려고 하면 pip3다음과 같은 오류가 발생합니다.

bash: /usr/bin/pip3: No such file or directory

최근에 파일을 삭제했기 때문입니다. 이제 which명령이 다른 버전을 가리키지 pip3/usr/local/bin셸은 여전히 ​​잘못된 경로를 기억합니다. 어떻게 하면 그 경로를 잊게 만들 수 있나요?

설명서 which에 따르면

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

/usr/local/bin/usr/bin둘 다 내 PATH변수 에 있으며 /usr/local/bin/pip3심볼릭 링크가 아니라 실행 파일입니다. 그렇다면 실행해 보는 것은 어떨까요?

답변1

여기에서 명령을 실행하면 실행 파일의 위치를 ​​기억하므로 매번 다시 검색할 bash필요가 없습니다 . PATH따라서 실행 파일을 실행한 다음 위치를 변경하면 bash이전 위치가 계속 시도됩니다. 이를 확인할 수 있어야 하며 hash -t pip3이전 위치가 표시됩니다.

이것을 실행하면 hash -d pip3bash는 이전 위치를 잊어버리고 다음에 시도할 때 새 위치를 찾도록 지시합니다.

답변2

실행 파일의 위치를 ​​변경하는 경우(이동하거나 다른 위치에 실행 파일의 새 버전을 제공하여) hash -d NAME강제 bash를 사용하여 PATH에서 다시 찾으십시오. 그러나 NAME이 캐시에 없으면 오류가 발생하므로 스크립트의 일부로 다음과 같이 사용하십시오.

if hash -t $NAME >& /dev/null; then 
  hash -d $NAME
fi

관련 정보