![如何捕获bash关键字的stderr(例如时间)?](https://linux22.com/image/129368/%E5%A6%82%E4%BD%95%E6%8D%95%E8%8E%B7bash%E5%85%B3%E9%94%AE%E5%AD%97%E7%9A%84stderr%EF%BC%88%E4%BE%8B%E5%A6%82%E6%97%B6%E9%97%B4%EF%BC%89%EF%BC%9F.png)
我想计时读取 bash 历史并将结果放入变量中。不幸的是,time
(这是一个 shell 关键字)将结果打印到stderr
,并且显然stderr
从 shell 关键字重定向与重定向常规命令输出的工作方式不同。换句话说,
foo=$(time history -r 2>&1)
不起作用(foo
变量为空,输出打印到终端)。如何捕获time
关键字的输出?
注意:由于history
是 shell 内置命令,我无法使用外部time
命令(即/usr/bin/time
) - 我必须time
在 bash 中使用关键字。
答案1
您可以使用以下语法:
foo=$((time history -r) 2>&1)
将命令放在 a 中()
并将其重定向stderr
到stdout
例子:
$ foo=$((time history -r) 2>&1)
$ echo $foo
real 0m0.001s user 0m0.000s sys 0m0.000s
$