在以下示例中,每个是time
关键字还是/usr/bin/time
?为什么,或者你如何找到它?
关键字可以是命令吗?
或者关键字是否time
适用于空命令? (我可能在帖子或评论中问过这个问题,但我找不到)
谢谢。
$ time time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time
real 0m0.000s
user 0m0.000s
sys 0m0.000s
答案1
在 中time time
,both 都是 bash 内置的,none 是外部/usr/bin/time
命令。
这是可能的,因为time
内置函数将管道作为其参数,但time
它本身就是一个管道,因此可以进行多次调用。
如果你查看 bash 源代码,你甚至会发现引用此的注释特例,寻找对time
以下另一个time
或 的呼叫time -p
。
您只能看到一次输出,因为time
它是由设置位标志,因此多次调用它没有任何效果,因为它只是在该管道上设置相同的位......
然而,这会在两个单独的管道中调用它,因此您会看到两次输出:
$ time { time; }
real 0m0.000s
user 0m0.000s
sys 0m0.000s
real 0m0.000s
user 0m0.000s
sys 0m0.000s
/usr/bin/time
您可以通过使用路径显式调用它来查看使用外部的结果...或者使用\time
(前导\
阻止 shell 使用内置)或使用内置command
(如 中所示time command time
),例如:
$ time command time
Usage: time [-apvV] [-f format] [-o file] [--append] [--verbose]
[--portability] [--format=format] [--output=file] [--version]
[--quiet] [--help] command [arg...]
real 0m0.002s
user 0m0.000s
sys 0m0.000s
/usr/bin/time
正如您所看到的,当不带参数调用外部时,外部会抱怨......这就是您所看到的。 (此外,如果您在实际命令中使用它,您会注意到输出格式与 bash 内置的输出格式不同。)
答案2
如果您在第一个示例中只看到一个输出,则这是一个 shell 错误。
在重新实现ksh
where time
is a概念的 shell 中keyword
,time
不带参数打印整个管道的时间,在这种特殊情况下只是单个time
关键字。
如果您调用time time
,则第一次打印整个管道的计时,第二次time
仅打印其自身的计时。
因此,time
单独的关键字确实是空命令之前的关键字。
答案3
可能两者都取决于您的设置。
您可以使用以下命令查看系统上的内容:
$ type time
time is a shell keyword
在您的示例中,两个时间都time time
将指向相同的命令。