Ottenere time
in bash
per scrivere su un file è un lavoro duro. È un comando integrato bash
. (In Mac OS X, c'è un comando esterno, /usr/bin/time
, che fa un lavoro simile, ma con un formato di output diverso e meno riluttanza.)
È necessario utilizzare:
(time ./program.exe) 2> time.txt
Scrive sullo standard error (da cui la notazione 2>
). Tuttavia, se non si utilizza la sub-shell (le parentesi), non funziona; l'output arriva ancora sullo schermo.
alternativa, e senza un sub-shell, è possibile utilizzare:
{ time ./program.exe; } 2> time.txt
Nota lo spazio dopo la parentesi aperta e il semi-colon; entrambi sono necessari su una singola riga. Le parentesi devono apparire dove può apparire un comando e devono essere simboli indipendenti. (Se si lotta abbastanza, si arriva con ...;}|something
o ...;}2>&1
. Entrambi identificano il tutore come un simbolo autonomo, tuttavia. Se si prova ...;}xyz
, la shell (probabilmente) non riuscirà a trovare un comando chiamato }xyz
, sebbene .)
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?
Lei avrebbe bisogno di fare qualcosa di simile:
xterm -xrm '*hold: true' -e sh -c "(time ./Program.exe) 2> time.txt & sleep 2"
il cambiamento chiave è quello di eseguire la shell con lo script proveniente dal argomento dell'opzione -c
; è possibile sostituire sh
con /bin/bash
o un nome equivalente. Questo dovrebbe aggirare qualsiasi problema di "Errore di sintassi". Non sono abbastanza sicuro di ciò che scateni quell'errore, quindi potrebbe esserci un modo più semplice e migliore per affrontarlo. E 'anche possibile che l'opzione xterm
s' -e
richiede solo un singolo argomento stringa, nel qual caso, suppongo che devi usare:
xterm -xrm '*hold: true' -e 'sh -c "(time ./Program.exe) 2> time.txt & sleep 2"'
Puoi bash manuale xterm
così come posso.
Non sono sicuro del motivo per cui si esegue il programma a tempo in modalità background, ma questo è il tuo problema, non il mio. Analogamente, lo sleep 2
non è ovviamente necessario se lo hold: true
mantiene aperto il terminale.
possibile duplicato del comando [Lottare per analizzare (bash) tempo] (http://stackoverflow.com/questions/3928430/struggling-to-parse-bash-time-command) –