O comando time
imprimirá sua saída para erro padrão, não para saída padrão. Então é isso que você precisa capturar. Então, você precisa capturar a saída de time
e não a saída do comando que você está sincronizando. Normalmente, isso é feito agrupando ou executando os comandos em um subshell (em { }
ou ( )
respecitvely), redirecionando a saída do grupo para /dev/null
e redirecionando seu erro para a saída padrão. Por exemplo:
$ declare -a array=( $( { time ls; } 2>&1 >/dev/null ))
$ echo ${array[*]}
real 0m0.003s user 0m0.000s sys 0m0.000s
Para salvar cada linha como um elemento de matriz, use o mapfile
builtin. No entanto, a matriz criada só estará disponível no agrupamento:
$ { 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
Não tenho certeza se você deseja a saída do comando na matriz ou apenas a saída de time
. Se você quiser o comando também, remova o > /dev/null
de cada um dos exemplos acima.