GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die Ausgabe eines Befehls in `time Command` umleiten?

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'

Linux
  1. Verwendung des Linux-Touch-Befehls + Beispiele

  2. Finden Sie die Ausführungszeit eines Befehls oder Prozesses in Linux

  3. Wie hängt man die Ausgabe an eine Datei an?

  4. Wie leitet man die Ausgabe von system() in eine Datei um?

  5. Wie kann die Ausgabe eines Befehls in eine Datei umgeleitet werden, wenn der Befehl Benutzereingaben auffordert?

Linux-Zeitbefehl

So leiten Sie die Shell-Befehlsausgabe um

Zeiterfassung mit Timewarrior auf der Kommandozeile

Wie weist man die Ausgabe eines Befehls einer Shell-Variablen zu?

Text auf der Terminalausgabe suchen?

Verstehen des Zeitbefehls in Linux