2011-01-06 21 views
9

voglio eseguire alcuni eseguibili con il comando timeottenere i valori dal comando 'tempo' tramite script bash

time myexec -args 

Come posso conservare solo l'uscita tempo di una variabile in bash? Questa è l'unica parte che mi interessa per questo script, non l'output dell'eseguibile. C'è un modo per ottenere quel valore, o dovrò analizzare il testo dell'intero comando?

risposta

6

Qualcosa di simile?

TIME="$(sh -c "time myexec -args &> /dev/null" 2>&1)" 
+0

' e> 'non è valido per uno script POSIX sh, e un guscio invocato sotto il nome 'sh' ti garantisce alcuna funzionalità non specificata nello standard. (Ad esempio, questo si interromperà assolutamente su sistemi Debian o Ubuntu dove 'sh' è implementato da dash). –

+0

Buon punto, ma la domanda è specifica per bash. – chris

+0

L'OP può * invocare * questo codice da bash, ma quando si esegue 'sh -c', non è più bash (se si è su Debian, Ubuntu, ecc.); quale shell è usata per * invocare * 'sh' è irrilevante per la questione di quale shell in realtà * implementa *' sh' su un dato sistema. –

14

Vedere BashFAQ/032.

Tutto l'output (stdout, stderr e time) catturato in una variabile:

var=$({ time myexec -args; } 2>&1) 

uscita stdout e stderr vanno ai loro posti normali:

exec 3>&1 4>&2 
var=$({ time myexec -args 1>&3 2>&4; } 2>&1) # Captures time only. 
exec 3>&- 4>&- 
0

BASH ha la sua variante integrata di time. Se fai un man time troverai che molte di quelle opzioni elencate non funzioneranno con il comando time. La pagina man avverte gli utenti di BASH che possono usare il percorso esplicito a time.

Il percorso esplicito è /usr/bin/time su Ubuntu, ma è possibile trovarlo con $ which time.

Con il percorso corretto, è possibile utilizzare l'opzione -f o --format e molti parametri di formattazione che formeranno correttamente i risultati che è possibile memorizzare in una variabile.

STUFF_HERE = `/ usr/bin/tempo -f% E sonno 1 2> & 1`

+0

Questo è un apice lì, non un apostrofo. – karatedog

+1

Non dovresti spiegarlo se [hai usato '$()' invece che i backtick] (http://mywiki.wooledge.org/BashFAQ/082). –

+3

ma mi piacciono i backtick. – karatedog

Problemi correlati