Shell
為什麼命令稱為 which 而不是 where ?
為什麼命令被呼叫
which
而不是where
?從邏輯上講,您會想要搜尋執行檔的位置,因此它們在“哪裡”,而不是哪個。
詞源在程序的早期版本中
which
給出:which : 告訴你你得到了哪個程序
只有比爾喬伊可以告訴你為什麼問題是“我得到哪個程序”而不是“程序來自哪裡”(但請注意,詢問“哪裡”最終假設只有一個,而目的
which
是確定哪個程序將在一組潛在的程序中使用)。
這主要在評論中介紹,但這是我的看法。
我一直理解它的原因
which
是向您展示正在呼叫**哪個二進製文件;**可能有多個同名的二進製文件,但執行命令時只會選擇一個。
which``$PATH
通過遍歷環境變數來確定正在執行哪些二進製文件:[root@headdesk ~]# echo $PATH /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@headdesk ~]#
which
將查看/usr/local/sbin
,然後/sbin
,依此類推。例如,看看
which vim
,它位於我們的 3rd 位置$PATH
:[root@headdesk ~]# which vim /bin/vim
如果我們添加具有更高路徑優先級的執行檔,我們將看到我們添加的執行檔:
[root@headdesk ~]# >/usr/local/sbin/vim; chmod +x /usr/local/sbin/vim [root@headdesk ~]# which vim /usr/local/sbin/vim
如果我們想查看
vim
路徑中的所有執行檔,我們可以使用該-a
標誌:$$ root@headdesk ~ $$# which -a vim /bin/vim /usr/bin/vim 這在手冊頁中有更簡潔的介紹:
描述
這需要一個或多個參數。對於它的每個參數,它將在 shell 提示符下輸入該參數時將執行的執行檔的完整路徑列印到標準輸出。它通過使用與 bash(1) 相同的算法在環境變數 PATH 中列出的目錄中搜尋執行檔或腳本來執行此操作。