如何捕获bash关键字的stderr(例如时间)?

如何捕获bash关键字的stderr(例如时间)?

我想计时读取 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 中()并将其重定向stderrstdout


例子:

$ foo=$((time history -r) 2>&1)
$ echo $foo
real 0m0.001s user 0m0.000s sys 0m0.000s
$ 

相关内容