Ich habe versucht, die Ausgabe des Zeitbefehls umzuleiten, konnte aber nicht:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
In der Datei kann ich die Ausgabe des ls
Befehls sehen, nicht die von time
. Bitte erklären Sie, warum ich nicht konnte und wie das geht.
shell
unix
time
io-redirection
abubacker
quelle
quelle
Antworten:
Sie können die Zeitausgabe mit umleiten,
Weil Sie (Zeit ls) als einen einzigen Befehl nehmen müssen, damit Sie geschweifte Klammern verwenden können.
quelle
&>
bitte, wo kann ich davon erfahren?&>file
ist analog zu>file 2>&1
. Es steuert sowohl stdout als auch stderr.Sub-Shell muss nicht gestartet werden. Verwenden Sie auch einen Codeblock.
oder
quelle
2>
bitte. Wo kann ich davon erfahren?Die Befehlszeit sendet ihre Ausgabe an STDERR (anstelle von STDOUT). Dies liegt daran, dass der Befehl, der normalerweise mit der 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:
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:
2> leitet STDERR um und> leitet beide um.
quelle
Die Zeit ist in die Shell eingebaut und ich bin mir nicht sicher, ob es eine Möglichkeit gibt, sie umzuleiten. Sie können jedoch
/usr/bin/time
stattdessen verwenden, die definitiv alle Umleitungen der Ausgabe akzeptieren.quelle
bash time mycmd 2>file
. Oder einfach anrufen/usr/bin/time
wie bereits erwähnt.Wenn Sie die Ausgabe von
time
und den Befehl nicht mischen möchten . Mit GNU-Zeit können Sie Folgendes verwenden-o file
:while
tim
wird von der Zeit ausgegebenout
underr
ist stdout und stderr vongrep
.quelle
Der Grund, warum die Umleitung nicht zu funktionieren scheint
time
ist, dass es sich um ein reserviertes Bash-Wort handelt (nicht um ein eingebautes!), Wenn es vor einer Pipeline verwendet wird. Bash (1):Um die Ausgabe von umzuleiten
time
, verwenden Sie entweder geschweifte Klammern:Oder rufen Sie an
/usr/bin/time
:quelle
Ich benutze die Umleitung von stdout und stderr Methode mit geschweiften Klammern zum Testen.
Das
&>>rpt
repräsentiert dies>>rpt 2>&1
aber kürzer.Die geschweiften Klammern führen einen oder mehrere Befehle in der aktuellen Shell aus. Siehe: Mann schlagen
quelle