Sie erfassen nichts in foo
, weil time
seine Ausgabe auf stderr
sendet. Das Problem ist, dass der Befehl wget
auch den größten Teil seiner Ausgabe an stderr
sendet. So teilen die beiden Ströme (und die Ausgabe von wget
wegzuwerfen) müssen Sie verwenden, um eine subshell:
TIMEFORMAT=%R;
foo=$(time (wget http://www.example.com 2>/dev/null 1>&2) 2>&1)
echo $foo
Hier ist eine Erklärung dessen, was los ist ...
Der innere Teil dieses Befehls :
(wget http://www.example.com 2>/dev/null 1>&2)
Sendet sowohl stderr
und stdout
-/dev/null
, im wesentlichen wegzuwerfen.
Der äußere Teil:
foo=$(time (...) 2>&1)
Sendet stderr
vom time
Befehl an der gleichen Stelle, die stdout
gesendet wird, so dass es durch die command substitution ($()
) eingefangen werden können.
Update:
Wenn Sie wirklich klug bekommen wollten, können Sie die Ausgabe von wget
bis hin zu stderr
durch Jonglieren die Datei-Deskriptoren wie diese geführt haben:
foo=$(time (wget http://www.example.com 2>&1) 3>&1 1>&2 2>&3)
Dies ist eine FAQ ist: http://mywiki.wooledge.org/BashFAQ/032 –