Shell

為什麼命令稱為 which 而不是 where ?

  • October 13, 2021

為什麼命令被呼叫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 中列出的目錄中搜尋執行檔或腳本來執行此操作。

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