Bash
bash如何執行命令
這更像是一個我一直好奇但簡單地說的一般性問題:bash 如何執行通過腳本或終端給它的命令?
我想,有可能有一堆 if 語句檢查所有命令,像這樣(虛擬碼):
if (command == "pwd") pwd(); else if (command == "echo") echo(); ...
但這會產生問題,因為每次添加新命令時都必須重新編譯程式碼,例如為 firefox 或 gedit 等程序啟動的命令。
然後我想起了這個
which
命令,它(不是雙關語)指向給定命令的目錄,這讓我假設 bash 只是查找一個文件並使用 iostream 抓取它來執行它。是這樣嗎?如果是這樣,它怎麼知道要呼叫什麼方法,或者它們只是通用的執行檔?
基本上,bash shell 程序本身內置了一些命令(例如,echo、set),在這種情況下,bash 已經將程式碼編譯到其中以在內部執行這些命令,以響應使用者從命令行呼叫它們。如果您查看
man bash
or中的手冊info bash
,它有一個“內置”列表。如果在內置命令中找不到命令,則 shell 搜尋 $PATH 環境變數中列出的目錄(按列出的順序),看看它是否可以在那裡找到外部命令。如果沒有,那麼它會報錯,找不到該命令。