2012-08-08 9 views

Respuesta

10

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) 
+0

¡Usted, @ lee-netherton, es un salvador! – iGbanam

Cuestiones relacionadas