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

Soc*_*tes 12 time bash 16.04

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

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

第一个不执行,而第二个执行。第一个找不到-f参数。检查时whereis time我确实得到了路径/usr/bin/time,所以我以这种方式理解它time/usr/bin/time.

显然,我的假设是错误的。有人可以帮我详细说明吗?

Byt*_*der 20

让我们看看time实际使用该type命令的内容(请参阅 参考资料help type):

$ type -a time
time is a shell keyword
time is /usr/bin/time
Run Code Online (Sandbox Code Playgroud)

很明显,time在我们的系统上

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

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

现在,让我们检查一下每个人可以做什么:

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

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

您会注意到 shell 关键字支持的选项比可执行文件少,但它还有其他优点,因为您可以使用它来计时复杂的 Bash 构造,例如管道。有关示例,请参阅此答案的结尾

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

顺便说一下,whiletime是 Bash 中的一个 shell 关键字,它在sh(Dash)中不存在,在那里您只能获得可执行文件。