2011-01-06 11 views
9

Quiero correr algunos ejecutables con el comando tiempoobtener valores de comando de 'tiempo' a través de escritura del golpe

time myexec -args 

¿Cómo puedo almacenar sólo la salida de tiempo a una variable en bash? Esa es la única parte que me importa para este script, no la salida del ejecutable. ¿Hay alguna manera de obtener ese valor, o tendré que analizar el texto de todo el comando?

Respuesta

6

¿Algo como esto?

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

' &> 'no es válida en una secuencia de comandos POSIX sh, y una cáscara invocarse bajo el nombre 'sh' garantiza que no hay funcionalidad no especificada en el estándar. (Por ejemplo, esto romperá absolutamente con los sistemas Debian o Ubuntu donde 'sh' se implementa mediante el guión). –

+0

Buen punto, pero la pregunta es específicamente para bash. – chris

+0

El OP puede estar * invocando * este código de bash, pero cuando ejecuta 'sh -c', ya no es bash (si está en Debian, Ubuntu, etc.); qué shell se usa para * invocar * 'sh' es irrelevante para la pregunta de qué shell realmente * implementa *' sh' en un sistema dado. –

14

Ver BashFAQ/032.

Toda la salida (stdout, stderr y time) capturado en una variable:

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

salida a stdout y stderr van a sus lugares normales:

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

BASH tiene su variante incorporada de time. Si hace un man time, encontrará que muchas de las opciones enumeradas allí no funcionarán con el comando time. La página man advierte a los usuarios de BASH que pueden usar la ruta explícita al time.

La ruta explícita es /usr/bin/time en Ubuntu, pero puede encontrarla en $ which time.

Con la ruta adecuada, puede usar la opción -f o --format y una gran cantidad de parámetros de formato que formatearán muy bien su resultado que también puede almacenar en una variable.

STUFF_HERE = `/ usr/bin/tiempo -f% E sueño 1 2> & 1`

+0

Eso es un revés allí, no un apóstrofo. – karatedog

+1

No tendría que explicar eso si usó '$()' en lugar de palos de retroceso] (http://mywiki.wooledge.org/BashFAQ/082). –

+3

pero me gustan los backticks. – karatedog

Cuestiones relacionadas