从命令扩展中将stderr捕获到管道中

时间:2012-01-23 20:53:03

标签: bash

我有一个程序可以返回stdout上的答案和stderr上的错误。 不幸的是,即使成功,程序也会在stderr上发出一些文本结束。

我想使用命令扩展将程序输出存储在变量中: ans = $(prog)2>& 1 | grep -v成功

这不起作用。尝试将2>& 1放入parens,但我怀疑是$ ans然后 获得成功文本。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

不确定,你想要得到什么,但可能这是你的命令:

ans=$(prog 2>&1 | grep -v success)

如果您只想从标准错误流中过滤“成功”,可以使用以下内容:

ans=$({ ./foo 3>&2 2>&1 >&3- | grep -v success; } 2>&1)

以防万一,正如BashFAQ/002所述:

  

你不能做的是在一个变量中捕获stdout,在另一个变量中捕获stderr,仅使用FD重定向。您必须使用临时文件(或命名管道)来实现该文件。