在将 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