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'