如何使 Linux 时间函数作为命令输出的前缀而不是将输出放在命令后面?

如何使 Linux 时间函数作为命令输出的前缀而不是将输出放在命令后面?
~$ /usr/bin/time -f "%e: " echo test
test
0.00: 

我希望输出是

0.00:测试

我该如何实现这个目标?

答案1

除非您要求某种形式的时间旅行,否则您需要捕获输出并重新排列它。 time在标准错误上输出其结果。

$ /usr/bin/time -f "%e: " echo test >so 2>se; echo $(<se) $(<so)
0.01: test

答案2

正如 geekosaur 的回答所说,time 会打印到 stderr,而你的命令会打印到 stdout。并且 time 会等待你的命令完成,然后再写入输出。我认为你应该尝试使用sponge包中的程序moreutils, 像这样:

/usr/bin/time -f "%e: " echo test | sponge

Sponge 是一个程序,它会吸收所有输入,并在输入关闭时(即前一个程序终止)将其写入。上述方法之所以有效,是因为当 echo 完成时,time 会打印到 stderr,而 echo 的标准输出将被海绵吸收,海绵只会在左侧完成时自行拧干。所以据我所知,这几乎可以满足您的要求,尽管我无法测试它的完全准确性,因为我的系统的 /usr/bin/time 不支持 -f 选项。

答案3

我认为这是不可能的。一种方法是将输出捕获到变量中并对其进行操作。

相关内容