it-swarm.com.de

Wie kann ich die Ausgabe des Befehls "time" umleiten?

Ich habe versucht, die Ausgabe des Befehls time umzuleiten, konnte aber nicht:

$time ls > filename
real    0m0.000s
user    0m0.000s
sys     0m0.000s

In der Datei kann ich die Ausgabe des Befehls ls sehen, nicht die von time. Bitte erläutern Sie, warum ich das nicht konnte und wie es geht.

88
abubacker

sie können die Zeitausgabe umleiten mit,

(time ls) &> file

Weil Sie (time ls) als einen einzelnen Befehl nehmen müssen, damit Sie geschweifte Klammern verwenden können.

97
sganesh

keine Notwendigkeit, Sub-Shell zu starten. Verwenden Sie auch einen Codeblock.

{ time ls; } 2> out.txt

oder

{ time ls > /dev/null 2>&1 ; } 2> out.txt
119
ghostdog74

Die Befehlszeit sendet ihre Ausgabe an STDERR (anstelle von STDOUT). Das liegt daran, dass der Befehl, der mit der normalen Zeit ausgeführt wird (in diesem Fall ls), an STDOUT ausgegeben wird.

Wenn Sie die Ausgabe der Zeit erfassen möchten, geben Sie Folgendes ein:

(time ls) 2> filename

Das erfasst nur die Ausgabe der Zeit, aber die Ausgabe von ls geht normal zur Konsole. Wenn Sie beide in einer Datei erfassen möchten, geben Sie Folgendes ein:

(time ls) &> filename

2> leitet STDERR weiter und> leitet beide weiter.

22
Mnementh

zeit ist Shell eingebaut und ich bin mir nicht sicher, ob es eine Möglichkeit gibt, es umzuleiten. Sie können jedoch /usr/bin/time stattdessen, die definitiv alle Ausgabeumleitungen akzeptieren.

9
Michal Čihař

Wenn Sie die Ausgabe von time und dem Befehl nicht mischen möchten. Mit GNU time können Sie -o file mögen:

/usr/bin/time -o tim grep -e k /tmp 1>out 2>err

während tim die Ausgabe der Zeit ist, sind out und err stdout und stderr von grep.

3
Ding-Yi Chen

Der Grund, warum die Umleitung mit time nicht zu funktionieren scheint, ist, dass es sich um ein für Bash reserviertes Wort handelt (kein eingebautes!), Wenn es vor einer Pipeline verwendet wird. Bash (1):

Wenn die in Word reservierte Zeit vor einer Pipeline liegt, werden die verstrichene Zeit sowie die von der Ausführung verbrauchte Benutzer- und Systemzeit beim Beenden der Pipeline gemeldet.

Verwenden Sie geschweifte Klammern, um die Ausgabe von time umzuleiten:

{ time ls; } 2> filename

Oder anrufen /usr/bin/time:

/usr/bin/time ls 2> filename
2
user1338062