我正在执行一个将崩溃报告转储到 STDERR
的程序,我必须从那里过滤一些必要的信息。问题是我无法使用 grep
STDERR
重定向到 STDOUT
和 PIPE
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
出现错误:输出重定向不明确。
相同的命令在 bash 终端下有效。 我应该更改什么才能使其正常工作?
最佳答案
csh
在文件重定向方面明显比 bash 受限。在 csh
中,您可以使用通常的 >
运算符重定向 stdout
,您可以同时重定向 stdout
和 stderr
与 >&
运营商,你可以管道 stdout
和 stderr
与 |&
运营商, 但没有单独的操作符可以单独重定向 stderr
。
通常的解决方法是在子 shell 中执行命令,将该子 shell 中的 stdout
重定向到您想要的任何文件(/dev/null
在这个case),然后使用|&
操作符将子shell的stdout
和stderr
重定向到主shell中的下一个命令。
在您的情况下,这意味着:
( command >/dev/null ) |& grep "^[^-]" >&/tmp/fl
因为 stdout
被重定向到子 shell 内的 /dev/null
,|&
运算符最终将充当 2>&1
在 bash 中 - 因为 stdout
在子 shell 中被丢弃,所以写入 stdout
的任何内容都不会到达管道。
关于linux - 在 csh 中重定向 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010883/