다음 명령이 있습니다
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
위의 모든 예에서 해당 명령을 제거하세요.