2009-06-12 13 views
6

Me gustaría capturar la salida del comando de tiempo (que escribe a error estándar) en una variable. Sé que esto se puede hacer de esta manera:capturando el error estándar en una variable en bash

 
    $ var=`time (mycommand &> /dev/null) 2>&1` 
    $ echo "$var" 
    real 0m0.003s 
    user 0m0.001s 
    sys  0m0.002s 

Con la redirección interna envío de la salida estándar y error estándar de mycommand a/dev/null, ya que no es necesario, y la redirección externa envío de error estándar a la salida estándar por lo que puede ser almacenado en la variable.

Mi problema es que no puedo hacer que funcione dentro de un script de shell, pero resulta que se debe a un error en otro lugar. Entonces, ahora que he seguido adelante y escribí esta pregunta, en su lugar, voy a preguntar: ¿es esta la mejor manera de lograrlo o lo harías de manera diferente?

Respuesta

8

El único cambio que haría es:

var=$(time (mycommand &> /dev/null) 2>&1) 

La sintaxis $() comando si shell admite que es superior por dos razones:

  • hay necesidad de escapar las barras invertidas,
  • se puede anidar comandos sin escapar de los backticks.

Descripción de las diferencias: Bash Command Substition

+1

1 para preferir $ (...) sobre '...' –

1

Si realmente no necesita stdout o stderr del programa que se está programando, esta es una buena forma de hacerlo y debe ser tan eficiente como cualquier otro método.

Cuestiones relacionadas