我有一个程序可以返回stdout上的答案和stderr上的错误。 不幸的是,即使成功,程序也会在stderr上发出一些文本结束。
我想使用命令扩展将程序输出存储在变量中: ans = $(prog)2>& 1 | grep -v成功
这不起作用。尝试将2>& 1放入parens,但我怀疑是$ ans然后 获得成功文本。
有什么想法吗?
答案 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重定向。您必须使用临时文件(或命名管道)来实现该文件。