簡體   English   中英

為什么有些 Bash 命令既是內置命令又是外部命令?

[英]Why are some Bash commands both built-in and external?

一些命令是內部內置的 Bash 命令,而另一些是外部命令(其他程序)。 我明白為什么需要內置某些命令。 其中一些原因是:

  1. 如果一個命令需要改變shell進程的內部狀態。
  2. 如果命令在 shell 中執行非常基本的操作。
  3. 如果一個命令經常被調用並且需要快速執行。 外部命令是通過加載外部程序來執行的,因此速度較慢。

但是為什么有些命令既是內置命令又是外部命令,例如echotest 我知道echo被大量使用,因此是內置的(原因 3)。 但是,為什么還要將它作為外部命令並在/bin/echo 中有一個二進制文件呢? echo的內置版本將始終優先於外部版本,因​​此,幾乎從不使用外部版本。 那么,為什么還要有它的外部版本呢?

這正是你的觀點 3. 當一個命令做的很少( echo是一個很好的例子)時,產生一個新進程會支配運行時行為。 隨着磁盤、帶寬和代碼庫的增長,當您擁有如此多的數據和如此多的文件時(我們的工作代碼庫有 10 萬個文件!!),每個文件少生成一個就會導致幾分鍾的差異。

這也是為什么典型的內置函數是一個插入式替換,它采用(可能是一個超集)與二進制文件相同的參數。

您還會問為什么即使 Bash 內置了舊的二進制文件,為什么仍然保留它——答案是很多程序依賴於/bin/echo的存在。 它實際上是標准化的

Bash 只是眾多用戶界面和離線命令解釋器之一。 它們都有不同的內置插件集。 一些 shell 故意很小,並且在很大程度上依賴於您可以稱為“遺留”二進制文件的內容。 一個例子是ash及其后繼者Dash 由於其速度,Dash 現在是 Ubuntu 和 Debian 中的默認/bin/sh ,並且由於其體積小而在嵌入式系統中很受歡迎。 (但即使是 Dash 也內置了echotest和許多其他命令,並提供了交互式使用的命令歷史記錄。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM