[英]Why are some Bash commands both built-in and external?
一些命令是內部內置的 Bash 命令,而另一些是外部命令(其他程序)。 我明白為什么需要內置某些命令。 其中一些原因是:
但是為什么有些命令既是內置命令又是外部命令,例如echo和test ? 我知道echo被大量使用,因此是內置的(原因 3)。 但是,為什么還要將它作為外部命令並在/bin/echo 中有一個二進制文件呢? echo的內置版本將始終優先於外部版本,因此,幾乎從不使用外部版本。 那么,為什么還要有它的外部版本呢?
這正是你的觀點 3. 當一個命令做的很少( echo
是一個很好的例子)時,產生一個新進程會支配運行時行為。 隨着磁盤、帶寬和代碼庫的增長,當您擁有如此多的數據和如此多的文件時(我們的工作代碼庫有 10 萬個文件!!),每個文件少生成一個就會導致幾分鍾的差異。
這也是為什么典型的內置函數是一個插入式替換,它采用(可能是一個超集)與二進制文件相同的參數。
您還會問為什么即使 Bash 內置了舊的二進制文件,為什么仍然保留它——答案是很多程序依賴於/bin/echo
的存在。 它實際上是標准化的。
Bash 只是眾多用戶界面和離線命令解釋器之一。 它們都有不同的內置插件集。 一些 shell 故意很小,並且在很大程度上依賴於您可以稱為“遺留”二進制文件的內容。 一個例子是ash
及其后繼者Dash 。 由於其速度,Dash 現在是 Ubuntu 和 Debian 中的默認/bin/sh
,並且由於其體積小而在嵌入式系統中很受歡迎。 (但即使是 Dash 也內置了echo
、 test
和許多其他命令,並提供了交互式使用的命令歷史記錄。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.