timeコマンドの出力を取得する

timeコマンドの出力を取得する

次のコマンドがあります

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そのコマンドの出力ではなく、時間が測定されるコマンドの出力をキャプチャする必要があります。通常、これはサブシェル(内部または別々){ }でコマンドをグループ化または実行して、グループ( )の出力を標準出力にリダイレクト/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上記の例からすべてのコマンドを削除してください。

おすすめ記事