2009-06-12 89 views
6

我想捕获时间命令(写入标准错误)的输出到一个变量中。我知道,这可以这样做:将标准错误捕获到bash中的变量中

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

最里面的重定向发送mycommand的标准输出和标准错误到/ dev/null的,因为它是没有必要的,而最外面的重定向发送标准错误到标准输出等等它可以存储在变量中。

我的问题是我无法在shell脚本中使用这个工作,但事实证明这是因为其他地方的错误。所以,现在我已经写下了这个问题,而我会问,这是实现这个目标的最好方法,还是你有不同的做法?

回答

8

我会做的唯一的变化是:

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

$()命令语法,如果你的外壳支持它优越的原因有两个:

  • 不需要转义反斜线,
  • 你可以嵌套命令而不会溢出反引号。

描述的差异:Bash Command Substition

+1

+1超过`宁愿$(...)...` – 2009-06-12 05:34:36

1

如果您确实不需要stdout或stderr从计时程序,这是一个很好的方法来做到这一点,应该像其他方法一样有效。