【问题标题】:Get both outputs from a single time command从单个时间命令获取两个输出
【发布时间】:2014-06-16 15:37:44
【问题描述】:

好的,这就是我想要做的:

  • 执行命令,同时计时(使用time
  • 获取其输出
  • 获取经过的时间

到目前为止,这是我的代码:

for filepath in $files
do
(
output=$(time $filepath &>1)
echo ${output}
)
done

但是,每个命令仍会将其时间输出到屏幕,并且$output 包含命令的输出。

任何想法如何获得它们?

【问题讨论】:

标签: linux macos bash time


【解决方案1】:

time 将其输出写入stderr<file>,如果指定了-o <file> 选项(GNU 和FreeBSD 时间都支持)。所以我认为你不能避免使用(临时)文件来实现目标。您可以使用mktemp 命令在shell 中安全地创建一个临时文件。

【讨论】:

  • 为了清楚起见,您描述的是time 程序,而不是bash 的内置命令。 command time $filepath > output.txt 2> time.txt.
【解决方案2】:

你必须捕获标准输入和标准输出。为此,基于Is there a way to redirect time output to file in Linux 中的解决方案,我会说:

{ time command ; } 2>&1
                   ^^^^
                   redirect stderr to stdin

所以你例如这样做:

$ var=$({ time echo 1 ; } 2>&1 )

$ echo "$var"
1

real    0m0.000s
user    0m0.000s
sys     0m0.000s

【讨论】:

  • 我认为他的意思是分别获得time 结果和程序输出。如果不是,那么这个答案比我的更正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多