Linux
shell 內置命令是否真的從它的路徑執行程序?
我正在從這裡閱讀標記的答案:內置命令和非內置命令有什麼區別?
他在這裡說:
內置命令只是 shell 自己執行的命令,而不是將其解釋為載入和執行其他程序的請求。這有兩個主要影響。首先,它通常更快,因為載入和執行程序需要時間。當然,命令執行時間越長,載入時間與整體執行時間相比就越不重要
這是否意味著當我們執行類似
cd
orecho
的 shell 內置命令時,shell(比如說 bash)對它的解釋與cd
從使用which cd
.我原以為我們執行的所有命令都會執行相應的程序。看到這個答案讓我很困惑。
如果 shell 不執行程序或文件,那麼為什麼
which cd
仍然返回該程序的路徑?這不是說當我們執行echo hi
command 時,它會搜尋 env 變數中的路徑以PATH
按名稱執行程序echo
嗎?請解釋這個….
shell 知道內置了哪些實用程序。
shell 使用以下
bash
步驟查找命令(一旦執行了別名擴展):
如果命令不包含斜杠
如果命令是 shell 函式,則呼叫該函式。
否則,如果它對應於內置命令,則使用該命令。
否則,shell 將搜尋
$PATH
具有該名稱的執行檔並在找到時執行它。如果命令包含斜杠,則執行該命名文件。
這意味著 shell 搜尋執行檔的唯一時間
$PATH
是命令不包含斜杠、不是 shell 函式且不是內置實用程序時。如果給定的命令已經過雜湊處理,shell 將不會對目錄進行物理搜尋(bash
參見參考資料help hash
)bash
。