Shell

登錄到 shell 會話是否會在永遠不會更新的路徑上建構執行檔的記憶體?

  • November 7, 2022

我注意到,當我編譯儲存在/usr/bineg中的打包程序的自定義建構時/usr/bin/emacs,會which emacs顯示已經存在的執行檔,儘管在我的./usr/bin/emacs``/usr/local/bin/emacs``/usr/local/bin``PATH

我需要登錄和註銷,或者在顯示新的二進製文件screen之前打開一個新框架。which emacs

這是因為一些記憶體,還是有一些安全功能導致在再次登錄之前引用現有路徑?

編輯

對於那些認為這個問題是重複的或由其他問題回答的人,例如 -如何清除 Bash 的執行檔路徑記憶體?, hash 命令的目的是什麼?,這個問題專門詢問shell,而不是bash,或者hash內置的命令bash(我不知道),儘管它是大多數係統上的預設外殼。

還有其他的shell,例如,zsh我使用的那個,fish, ksh, eshellksh還有許多其他新的shell,例如oilshell進入市場,可以這麼說。

所以我認為這個問題應該獨立存在,一般是關於貝殼,而不是一個特定的外殼。

如果有理由這樣做,經驗表明這是明智的選擇,或者它與經濟或性能有關,而不是其他答案可能會詳細說明。

我希望此編輯成為評論,但它們的長度有限。

是的,bash 和其他 shell 通過嘗試 PATH 變數中的所有內容來維護它已查找的命令的“雜湊”表,因此不必每次都檢查。像您一樣對環境進行更改的人會發現該命令hash -d NAME很有用,或者hash -r. 這些是 bash 命令,其他 shell 的執行方式可能有所不同。

所以,

hash -d emacs

將要求 bash 忘記 emacs 路徑,並且

hash -r

會要求它忘記所有路徑。我傾向於使用後者。

引用自:https://unix.stackexchange.com/questions/723885