获取时间命令的输出

获取时间命令的输出

我有以下命令

time compare -metric rmse -subimage-search -dissimilarity-threshold 1 -similarity-threshold 0.99 $page \( -size 1x1 xc:black \) null:

产生以下结果:

0 (0) @ 7,0
real    0m28.366s
user    0m25.400s
sys     0m1.500s

我希望将命令的结果存储在数组中,这样

declare -a Pageinfo=($(time compare -metric rmse -subimage-search -dissimilarity-threshold 1 -similarity-threshold 0.99 out1.tif \( -size 1x1 xc:black \) null: ))

echo "Pageinfo results  =  ${Pageinfo[*]}"

但是,数组是空的。为什么?

答案1

time命令会将其输出打印到标准错误,而不是标准输出。这就是您需要捕获的内容。然后,您需要捕获正在计时的命令的输出time,而不是该命令的输出。通常,这是通过在子 shell 中(分别在{ }或分别)中分组或运行命令( )、将组的输出重定向到标准输出/dev/null并将其错误重定向到标准输出来完成的。例如:

$ declare -a array=( $( { time ls; } 2>&1 >/dev/null ))
$ echo ${array[*]} 
real 0m0.003s user 0m0.000s sys 0m0.000s

为了保存每个线作为数组元素,使用mapfile内置的。但是,创建的数组仅在分组内可用:

$ { time ls; } 2>&1 >/dev/null | { 
    mapfile  array1; 
    echo "1:     ${array1[1]}2:${array1[2]}3:${array1[3]}"; 
  } 
1: real 0m0.003s
2:user  0m0.000s
3:sys   0m0.000s

我不确定您是否想要数组中命令的输出或仅time.如果您也需要该命令,请> /dev/null从上面的每个示例中删除 。

相关内容