为什么时间的输出格式取决于我如何称呼它

xax*_*axa 14 command-line bash time-command

这可能是一个新手的问​​题,但我不明白这是如何配置的以及为什么time在这两种情况下命令的输出格式不同:

如果使用 via time,输出是三行基本信息

$ time sleep 1

real    0m1.003s
user    0m0.000s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

然后我可以检查使用的是哪个二进制文件

$ which time
/usr/bin/time
Run Code Online (Sandbox Code Playgroud)

并直接调用它以完全不同的格式获得输出,并提供更多信息

$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
Run Code Online (Sandbox Code Playgroud)

没有相关的别名 time

$ alias | grep time
$ 
Run Code Online (Sandbox Code Playgroud)

我在跑Ubuntu 16.04

hee*_*ayl 23

第一个是bash自己的内置关键字time(用 编译bash),第二个是外部可执行文件time/usr/bin/time,随time包提供)。

此外,which无法显示 shell 的内置命令或关键字,因为它只是搜索PATH,您需要使用type它。作为内置的 shell,type可以额外检查 shell 的内部实体(以及PATH),因此您可以通过以下方式发现差异:

type -a time
Run Code Online (Sandbox Code Playgroud)

这里:

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

如果您只使用time. 您还可以通过使用type(without -a)来获取正在执行的内容:

type time
Run Code Online (Sandbox Code Playgroud)

-a通知type在外壳的内部实体搜索和也PATH即在所有可能的来源进行搜索。

如果出于某种原因您需要外部的,请使用以下任何一种:

\time
"time"
'time'
command time
Run Code Online (Sandbox Code Playgroud)

  • @jpaugh 不太对。POSIX 只允许`time` 是外部的,但不允许`type`,`type` 在所有符合POSIX 的shell 中都可用。 (2认同)