次のコマンドがあります
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
上記の例からすべてのコマンドを削除してください。