gpt4 book ai didi

linux - 为什么有些 Bash 命令既是内置命令又是外部命令?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:57 26 4
gpt4 key购买 nike

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

  1. 如果一个命令需要改变shell进程的内部状态。
  2. 如果命令在 shell 中执行非常基本的操作。
  3. 如果经常调用命令并且需要快速执行。外部命令是通过加载外部程序来执行的,因此速度较慢。

但是为什么有些命令既是内置的又是外部的,例如 echo test ?我知道 echo 被广泛使用,因此是内置的(原因 3)。但是为什么还要将它作为一个外部命令并在 /bin/echo 中为它提供一个二进制文件呢? echo 的内置版本将始终优先于外部版本,因​​此很少使用外部版本。那么,为什么要有它的外部版本呢?

最佳答案

这正是您的观点 3. 当命令执行的操作很少时(echo 是一个很好的例子),生成一个新进程将主导运行时行为。随着磁盘、带宽和代码库的增长,当您拥有如此多的数据和如此多的文件(我们工作中的代码库有 10 万个文件!!)时,您总是会遇到这样的情况,以至于每个文件少生成一个文件会造成几分钟的差异。

这也是为什么典型的内置函数是一个直接替代品,它采用与二进制文件相同的参数(可能是其超集)。

您还问为什么旧的二进制文件仍然保留,即使 Bash 将它作为内置程序 — 答案是很多程序都依赖于 /bin/echo 的存在。实际上是 standardized .

Bash 只是众多用户界面和离线命令解释器中的一种。它们都有不同的内置插件集。有些 shell 故意很小,并且在很大程度上依赖于您所谓的“遗留”二进制文件。一个例子是 ash及其继任者 Dash .由于速度快,Dash 现在是 Ubuntu 和 Debian 中的默认 /bin/sh,并且由于体积小而在嵌入式系统中很受欢迎。 (但即使是 Dash 也内置了 echotest 和许多其他命令,并提供了交互式使用的命令历史记录。)

关于linux - 为什么有些 Bash 命令既是内置命令又是外部命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com