shell命令的搜索順序(hash -r, hash的作用)


我一直以為, shell命令, 比如執行ls, which, less這些, 就是在$PATH或者shell function/builtin中找, 今天才知道還有hash table的存在. 並且hash table搜索先於$PATH. hash table記錄了最近的搜索路徑, 用hash查看, 得到的是:

hits    command                                                                                       
   1    /usr/bin/which                                                                                
   1    /usr/local/gnubin/stat                                                                        
   8    /usr/bin/man                                                                                  
   3    /usr/local/gnubin/cut                                                                         
   2    /usr/bin/vim                                                                                  
   1    /usr/local/gnubin/ls

這有什么影響呢? 如果之前調用了命令, 保存了搜索路徑, 又改了環境變量, 按理說前面那個命令的搜索路徑應該被更新, 由於hash table的存在, 就得不到更新. 這幾天我就遇到了這個問題. 我裝了兩個編譯器, LLVM和GCC, 默認是GCC, 發現有代碼只能用clang編譯(既然發現了這一點, 說明我調用了GCC的gcc), 然后我改環境路徑, 改完了用which gcc看, 是clang, 但執行的時候, 還是GCC. 就是這個原因. 怎么辦? 用hash -r清空hash table


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM