No está capturando nada en foo
porque time
envía su salida en stderr
. El problema es que el comando wget
también envía la mayor parte de su salida al stderr
. Para dividir las dos corrientes (y tirar la salida de wget
) tendrá que utilizar un subshell: La parte interna de este comando
TIMEFORMAT=%R;
foo=$(time (wget http://www.example.com 2>/dev/null 1>&2) 2>&1)
echo $foo
Aquí es una explicación de lo que está pasando ...
:
(wget http://www.example.com 2>/dev/null 1>&2)
envía tanto stderr
y stdout
-/dev/null
, esencialmente tirarlas a la basura.
La parte exterior:
foo=$(time (...) 2>&1)
Envía stderr
del comando time
al mismo lugar que stdout
se envía de modo que pueda ser capturado por el command substitution ($()
).
Actualización:
Si quisieras conseguir realmente inteligente, puede tener la salida de wget
pasado a través de stderr
haciendo malabares con los descriptores de fichero como este:
foo=$(time (wget http://www.example.com 2>&1) 3>&1 1>&2 2>&3)
Esto es un FAQ: http://mywiki.wooledge.org/BashFAQ/032 –