`test` 是内置命令还是程序

`test` 是内置命令还是程序

测试是 shell 内置的还是实际的程序?

bruce@Bruce:~$ type -a test
test is a shell builtin
test is /usr/bin/test
bruce@Bruce:~$

bruce@Bruce:~$ file /usr/bin/test
/usr/bin/test: ELF 64-bit LSB executable
bruce@Bruce:~$ 

我的系统正在运行 Ubuntu 13.04 和 BASH 4.2.45(1)-release。

答案1

看来我第一次接触时并没有真正理解你的问题。我会尝试进一步解释……

尽管该程序test是 GNU coreutils 软件包的一部分,因此将随任何 GNU/Linux 系统一起提供,但它也被编译为bash大多数发行版中的内置程序。我猜这是为了提高性能,因为它不需要为每个条件语句启动一个子进程。不用说,如果系统中同时存在内置程序和二进制程序,shell 将使用内置程序而不是二进制程序。但您可以调用:

/usr/bin/test ...

...如果您想明确调用二进制文件。

还要注意的是,bash在大多数系统上,这不是唯一的 shell,其他 shell 可能没有此内置功能(例如dash)。此外,有些系统甚至可能没有bash安装。对于这种情况,可以使用 coreutils 中的二进制文件。


它很可能是系统内置的。要检查此类型,请输入:

help test

如果您看到帮助页面,则它是内置的

您也可以输入:

type -t test

由此可见:

builtin 

在我的系统上

答案2

test是 bash 内部的虚拟命令,或者您可以称之为builtin/usr/bin/test存在以及外部command。 除了内置命令和命令之外,functions您还可以将其视为自定义内置命令。 调用它们的优先级是:首先是函数,其次是内置命令,最后是外部二进制文件或命令;但您可以自定义它。

如果您以某种方式创建了一个与内置函数同名的函数,例如cd,要跳过调用该函数并调用内置函数cd,则可以使用内置命令builtin例如builtin cd args

同样,如果您有一个内置命令,其名称与存储在文件系统中的命令相同,例如test,要调用该命令test,您可以给出明确的路径例如/usr/bin/test或使用内置命令command例如command test -n xyz

为了更多地了解它,请尝试运行以下命令:

help
help builtin
help command

答案3

从历史上看,test(及其同义词[)是(并且仍然是)外部程序。但大多数 shell 将它们作为内置命令提供以提高效率。常见命令如truefalseprintfecho等也是如此。

答案4

作为对先前答案的补充,可以使用内置命令enable来启用[或禁用]给定命令的内置版本cmd(例如test),方法是enable [-n] cmd。的文档enable正是test以我的系统为例。

enable -a显示内置命令列表及其激活状态。

相关内容