Getting time
in bash
in eine Datei schreiben ist harte Arbeit. Es ist ein eingebauter Befehl bash
. (Unter Mac OS X gibt es einen externen Befehl, /usr/bin/time
, die eine ähnliche Arbeit erledigt, aber mit einem anderen Ausgabeformat und weniger Widerspenstigkeit.)
Sie müssen verwenden:
(time ./program.exe) 2> time.txt
Es schreibt Standardfehler (daher die Notation 2>
). Wenn Sie jedoch die Untershell (die Klammern) nicht verwenden, funktioniert es nicht; Die Ausgabe kommt immer noch auf den Bildschirm.
Alternativ und ohne Unterschale, können Sie verwenden:
{ time ./program.exe; } 2> time.txt
Notieren Sie sich den Raum nach der offenen Klammer und dem Semikolon; beide sind in einer einzigen Zeile notwendig. Die geschweiften Klammern müssen dort erscheinen, wo ein Befehl erscheinen könnte, und müssen eigenständige Symbole sein. (Wenn Sie hart genug kämpfen, werden Sie mit ...;}|something
oder ...;}2>&1
kommen. Beide von ihnen identifizieren die geschweifte Klammer als ein eigenständiges Symbol, wenn Sie versuchen ...;}xyz
, wird die Shell (wahrscheinlich) finden Sie einen Befehl mit dem Namen }xyz
, obwohl .; die Schale mit dem Skript kommt aus dem Argument der -c
Option auszuführen ist
xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"
der Schlüssel ändern:)
I need to run more command in more terminal. If I do this:
xterm -xrm '*hold: true' -e (time ./Program.exe) >> time.exe & sleep 2
it doesn't work and tells me Syntax error: "(" unexpected
. How do I fix this?
Sie wäre so etwas wie tun müssen, Sie können sh
durch /bin/bash
oder einen gleichwertigen Namen ersetzen. Das sollte alle 'Syntaxfehler'-Probleme umgehen. Ich bin mir nicht ganz sicher, was diesen Fehler auslöst, also könnte es einen einfacheren und besseren Weg geben, damit umzugehen. Es ist auch denkbar, dass xterm
‚s -e
Option nur ein einziges String-Argument, in diesem Fall, ich nehme an, Sie verwenden würden:
xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'
Sie können manuelle bash xterm
so gut wie ich kann.
Ich bin mir nicht sicher, warum Sie das zeitgesteuerte Programm im Hintergrundmodus ausführen, aber das ist Ihr Problem, nicht meins. Ebenso ist die sleep 2
nicht offensichtlich notwendig, wenn die hold: true
das Terminal offen hält.
mögliche Duplikate von [Struggling zu analysieren (Bash) Zeitbefehl] (http://StackOverflow.com/questions/3928430/Struggling-to-Parse-Bash-Time-Command) –