为什么unbuffer命令会影响time命令?

为什么unbuffer命令会影响time命令?

在将 unbuffer 命令与 time 命令一起使用时,我注意到一些奇怪的事情。这里我只想看看在我的系统中找到某个文件需要多长时间:

time find . -name unixstuff

输出是:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.011u 0.173s 0:00.38 47.3%     0+0k 0+0io 0pf+0w

但是当我在此命令输出之前写入 unbuffer 时:

./Documents/CProgramming/2031/unix/Awk/unixstuff
0.01user 0.17system 0:00.38elapsed 47%CPU (0avgtext+0avgdata 4656maxresident)k
0inputs+0outputs (0major+338minor)pagefaults 0swaps

请注意,0.17s 已扩展为 0.17system,并且还发生了其他速记扩展。我想知道为什么会发生这种行为改变。我不希望管道中出现不可预测的输出。

答案1

这是因为time第一个命令中的 是 shell 关键字。time第二个命令中的是可执行文件。查看type输出time

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

该命令unbuffer需要一个程序作为参数,而不是 shell 关键字。它无法解释 shell 关键字,这是一个bash内部关键字。

您看到的输出的差异是该time命令的这两种实现的差异。只需在第一个命令中使用绝对路径,即可获得与第二个命令相同的行为:

/usr/bin/time find . -name unixstuff

相关内容