时间和 /usr/bin/time 有什么区别?

时间和 /usr/bin/time 有什么区别?

我执行过两个相同的命令,但它们不共享相同的参数:

  • time -f "%E %C" mycommandtomeasure
  • /usr/bin/time -f "%E %C" mycommandtomeasure

第一个不执行,而第二个执行。第一个找不到参数-f。检查时whereis time我确实获得了路径/usr/bin/time,所以我这样理解它与time是相同的命令/usr/bin/time

显然,我的假设是错误的。有人能帮我解释一下吗?

答案1

让我们看看time该命令实际上在做什么type(见help type):

$ type -a time
time is a shell keyword
time is /usr/bin/time

显然,time在我们的系统上

  • 直接内置于 Bash shell 中的关键字
  • 可执行文件/usr/bin/time

由于 shell 关键字优先于可执行文件,因此仅键入时实际运行的time是 shell 关键字。您还可以从列出它们的顺序或仅列出一种有效类型type -a的输出中看到这一点。type time

现在,让我们检查一下它们各自能做什么:

  • 可执行文件通常都有一个 manpage(手册页),我们可以使用命令打开并阅读它man,即这里man time

  • 要获取有关 Bash 内置内容的帮助,您必须使用以下help命令:help time

你会注意到 shell 关键字支持的选项比可执行文件少,但它有其他优点,例如你可以用它来计算复杂的 Bash 构造(如管道)。请参阅本答案结束举个例子。

但是,如果您需要使用可执行文件而不是 shell 关键字,您可以输入完整路径,即/usr/bin/time,或者您可以在命令前面加上反斜杠以阻止 Bash 对其进行评估:\time

顺便说一句,虽然time在 Bash 中是一个 shell 关键字,但它在 Dash 中并不存在sh,在 Dash 中您只能获得可执行文件。

答案2

当您运行时,time您会运行一个不支持所有功能的内置 shell 命令。

当您运行 时/usr/bin/time,您运行的是一个真正的 GNUtime程序。

您可以设置一个别名来始终运行“真实”的别名。

相关内容