~$ /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
我认为这是不可能的。一种方法是将输出捕获到变量中并对其进行操作。