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

관련 정보