Bash

bash如何執行命令

  • February 8, 2018

這更像是一個我一直好奇但簡單地說的一般性問題:bash 如何執行通過腳本或終端給它的命令?

我想,有可能有一堆 if 語句檢查所有命令,像這樣(虛擬碼):

if (command == "pwd") pwd();
else if (command == "echo") echo();
...

但這會產生問題,因為每次添加新命令時都必須重新編譯程式碼,例如為 firefox 或 gedit 等程序啟動的命令。

然後我想起了這個which命令,它(不是雙關語)指向給定命令的目錄,這讓我假設 bash 只是查找一個文件並使用 iostream 抓取它來執行它。

是這樣嗎?如果是這樣,它怎麼知道要呼叫什麼方法,或者它們只是通用的執行檔?

基本上,bash shell 程序本身內置了一些命令(例如,echo、set),在這種情況下,bash 已經將程式碼編譯到其中以在內部執行這些命令,以響應使用者從命令行呼叫它們。如果您查看man bashor中的手冊info bash,它有一個“內置”列表。

如果在內置命令中找不到命令,則 shell 搜尋 $PATH 環境變數中列出的目錄(按列出的順序),看看它是否可以在那裡找到外部命令。如果沒有,那麼它會報錯,找不到該命令。

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