Linux

shell 內置命令是否真的從它的路徑執行程序?

  • July 24, 2018

我正在從這裡閱讀標記的答案:內置命令和非內置命令有什麼區別?

他在這裡說:

內置命令只是 shell 自己執行的命令,而不是將其解釋為載入和執行其他程序的請求。這有兩個主要影響。首先,它通常更快,因為載入和執行程序需要時間。當然,命令執行時間越長,載入時間與整體執行時間相比就越不重要

這是否意味著當我們執行類似cdorecho的 shell 內置命令時,shell(比如說 bash)對它的解釋與cd從使用which cd.

我原以為我們執行的所有命令都會執行相應的程序。看到這個答案讓我很困惑。

如果 shell 不執行程序或文件,那麼為什麼which cd仍然返回該程序的路徑?這不是說當我們執行echo hicommand 時,它會搜尋 env 變數中的路徑以PATH按名稱執行程序echo嗎?

請解釋這個….

shell 知道內置了哪些實用程序。

shell 使用以下bash步驟查找命令(一旦執行了別名擴展):

  1. 如果命令不包含斜杠

  2. 如果命令是 shell 函式,則呼叫該函式。

  3. 否則,如果它對應於內置命令,則使用該命令。

  4. 否則,shell 將搜尋$PATH具有該名稱的執行檔並在找到時執行它。

  5. 如果命令包含斜杠,則執行該命名文件。

這意味著 shell 搜尋執行檔的唯一時間$PATH是命令不包含斜杠、不是 shell 函式且不是內置實用程序時。如果給定的命令已經過雜湊處理,shell 將不會對目錄進行物理搜尋(bash參見參考資料help hashbash

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