內置命令和非內置命令有什麼區別?
內置命令和另一個名義上可以做同樣事情的命令之間有什麼本質區別嗎?
例如。內置函式是否得到“特殊”處理?…執行它們的開銷是否更少?.. 或者它們只是簡單地“內置”;喜歡你汽車的儀錶盤?
…並且這些內置函式是否有明確的(目前)列表?
從您的評論中,您似乎對shell到底是什麼感到困惑。核心負責管理系統。它是實際載入和執行程序、訪問文件、分配記憶體等的部分。但是核心沒有使用者界面;您只能通過使用另一個程序作為中介與它進行通信。
shell 是一個程序,它列印一個提示,從您那裡讀取一行輸入,然後將其解釋為一個或多個命令來操作文件或執行其他程序。在 GUI 發明之前,shell 是作業系統的主要使用者界面。在 MS-DOS 上,shell 被呼叫
command.com
,人們通常不會更改它。然而,在 Unix 上,長期以來使用者可以選擇多個 shell 。它們可以分為3種類型。Bourne 兼容的 shell 使用從原始Bourne shell派生的語法。C shell 使用原始C shell的語法。還有一些非傳統的 shell 發明了自己的語法,或者從某種程式語言中藉用了一種,並且通常比前兩種類型更不受歡迎。
內置命令只是 shell 自己執行的命令,而不是將其解釋為載入和執行其他程序的請求。這有兩個主要影響。首先,它通常更快,因為載入和執行程序需要時間。當然,命令執行時間越長,載入時間與整體執行時間相比就越不重要(因為載入時間相當恆定)。
其次,內置命令會影響 shell 的內部狀態。
cd
這就是為什麼必須內置命令 like 的原因,因為外部程序無法更改 shell 的目前目錄。其他命令,例如echo
,可能是為了提高效率而內置的,但沒有內在的原因它們不能是外部命令。內置哪些命令取決於您使用的 shell。您必須查閱其文件以獲取列表(例如,其
bash
內置命令在其手冊的第 4 章中列出)。該type
命令可以告訴您命令是否是內置的(如果您的 shell 與POSIX 兼容),因為 POSIX 要求它type
是內置的。如果which
不是您的外殼程序中的內置程序,那麼它可能不會知道您的外殼程序的內置程序,而只會查找外部程序。