Ich versuche, etwas mit:
zu timen/usr/bin/time myCommand
Allerdings seit /usr/bin/time schreibt nach stderr, wenn myCommand schreibt auch an stderr, ich bekomme mehr als nur mal 's Output auf den Stream. Was ich tun möchte, ist, die gesamte Ausgabe von myCommand auf /dev/null umzuleiten , aber die Ausgabe von time immer noch auf stderr schreiben. Anhand eines Beispiels myCommand die in stderr von ls /nofile schreibt , sehen wir, dass es (offensichtlich) überhaupt keine Ausgabe mit folgendem gibt:
$ /usr/bin/time ls /nofile 2> /dev/null
$
Ohne Umleitung sehen wir sowohl die Ausgabe von ls (auf stderr) und die Ausgabe von time (auch auf stderr):
$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Was ich will, ist etwas, das einfach produziert:
$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Irgendwelche Ideen?
Akzeptierte Antwort:
In ksh, bash und zsh time ist ein Schlüsselwort, kein Builtin. Umleitungen in derselben Zeile gelten nur für den zeitlich festgelegten Befehl, nicht für die Ausgabe von time selbst.
$ time ls -d / /nofile >/dev/null 2>/dev/null
real 0m0.003s
user 0m0.000s
sys 0m0.000s
Um die Ausgabe von time umzuleiten selbst in diesen Shells müssen Sie eine zusätzliche Gruppierungsebene verwenden.
{ time mycommand 2>&3; } 3>&2 2>mycommand.time
Wenn Sie die GNU-Version der eigenständigen time verwenden Dienstprogramm, es hat ein -o Option zum Schreiben der Ausgabe von time anderswo als stderr. Sie können time gewinnen ins Terminal schreiben:
/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null
Wenn Sie die Ausgabe von time beibehalten möchten Bei seinem Standardfehler benötigen Sie eine zusätzliche Ebene des Dateideskriptor-Shufflings.
/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null
Zu jeder time Dienstprogramm können Sie eine Zwischen-Shell aufrufen, um die gewünschten Umleitungen durchzuführen. Aufrufen einer Zwischen-Shell, um zusätzliche Aktionen wie cd auszuführen , Umleitungen usw. ist ziemlich üblich – das sind die kleinen Dinge, für die Shells entwickelt wurden.
/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'