为了外部命令它以命令作为参数,参数必须是外部命令,而不是 shell 的内置命令吗?
我根据以下两个例子提出这个问题
如果一个内置命令可以将命令作为其参数,该参数可以是内置命令还是外部命令?
如果不是,除了解释之外,还请提供反例。
答案1
Shell 内置命令只能由 shell 访问,因此外部命令无法运行它们。例如,外部time
命令只能运行其他外部命令。外部命令无法运行 shell 内置命令、shell 别名或 shell 函数。
请注意,shell 本身就是外部命令(例如/bin/sh
等/bin/bash
),因此外部命令可以使用 运行 shell -c
,例如与 比较sh -c 'time echo foo'
,sh -c '/usr/bin/time echo foo'
或执行使用内置命令的 shell 脚本。
如果碰巧有与内置 shell 同名的外部命令(例如time
,,, ...),那么外部命令可以运行这些命令,但即使它们执行echo
相同kill
的基本任务,它们也可能略有不同(例如,不同的命令行选项,不同的输出格式,不同的功能 - 内置kill
可以通过 shell 作业号杀死,外部kill
不能)。
Shell 内置命令(例如time
或command
)可以执行内置或外部命令,以及 shell 别名和函数。
答案2
一个例子是 command command
,它可以将内部命令和外部命令作为参数。
command
command [-pVv] command [arguments …]
使用参数运行命令,忽略任何名为 command 的 shell 函数。仅执行 shell 内置命令或通过搜索 PATH 找到的命令。如果有一个名为 ls 的 shell 函数,在该函数内运行“command ls”将执行外部命令 ls,而不是递归调用该函数。 -p 选项意味着使用 PATH 的默认值,保证找到所有标准实用程序。如果找不到命令或发生错误,则这种情况下的返回状态为 127,否则为命令的退出状态。
如果提供了 -V 或 -v 选项,则打印命令的描述。 -v 选项导致显示一个单词,指示用于调用命令的命令或文件名; -V 选项产生更详细的描述。在这种情况下,如果找到命令,则返回状态为零,否则返回非零。
enable
or命令help
仅将内置命令作为参数。
该time
命令可以采用 shell 内置命令以及参数。