在 csh 中重定向 stderr
Redirecting stderr in csh
我正在执行一个将崩溃报告转储到 STDERR
的程序,我必须从那里过滤一些必要的信息。问题是我无法使用 grep
将 STDERR
重定向到 STDOUT
和 PIPE
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
获取错误:Ambiguous output redirect.
相同的命令在 bash 终端下有效。
我应该更改什么才能使其正常工作?
如果您不介意将 stdout 和 stderr 混合到管道中,您可以使用
command |& grep "^[^-]" >& /tmp/fl
否则你可以破解:
(command >/dev/null) |& grep "^[^-]" >& /tmp/fl
将 stdout 分隔为 null,然后管道 stdout 和 stderr 只是给出
stderr 作为内容。
在文件重定向方面,csh
比 bash 明显更受限制。在 csh
中,您可以使用通常的 >
运算符重定向 stdout
,您可以使用 >&
运算符重定向 stdout
和 stderr
,你可以使用 |&
运算符对 stdout
和 stderr
进行管道传输,但是没有单个运算符可以单独重定向 stderr
。
通常的解决方法是在子 shell 中执行命令,将子 shell 中的 stdout
重定向到您想要的任何文件(/dev/null
这种情况),然后使用 |&
运算符将子 shell 的 stdout
和 stderr
重定向到主 shell 中的下一个命令。 =33=]
在您的情况下,这意味着:
( command >/dev/null ) |& grep "^[^-]" >&/tmp/fl
因为 stdout
被重定向到子 shell 内的 /dev/null
,|&
运算符最终将充当 [=41] 中的 2>&1
=] - 因为 stdout
在子 shell 中被丢弃,所以写入 stdout
的任何内容都不会到达管道。
我正在执行一个将崩溃报告转储到 STDERR
的程序,我必须从那里过滤一些必要的信息。问题是我无法使用 grep
STDERR
重定向到 STDOUT
和 PIPE
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
获取错误:Ambiguous output redirect.
相同的命令在 bash 终端下有效。 我应该更改什么才能使其正常工作?
如果您不介意将 stdout 和 stderr 混合到管道中,您可以使用
command |& grep "^[^-]" >& /tmp/fl
否则你可以破解:
(command >/dev/null) |& grep "^[^-]" >& /tmp/fl
将 stdout 分隔为 null,然后管道 stdout 和 stderr 只是给出 stderr 作为内容。
csh
比 bash 明显更受限制。在 csh
中,您可以使用通常的 >
运算符重定向 stdout
,您可以使用 >&
运算符重定向 stdout
和 stderr
,你可以使用 |&
运算符对 stdout
和 stderr
进行管道传输,但是没有单个运算符可以单独重定向 stderr
。
通常的解决方法是在子 shell 中执行命令,将子 shell 中的 stdout
重定向到您想要的任何文件(/dev/null
这种情况),然后使用 |&
运算符将子 shell 的 stdout
和 stderr
重定向到主 shell 中的下一个命令。 =33=]
在您的情况下,这意味着:
( command >/dev/null ) |& grep "^[^-]" >&/tmp/fl
因为 stdout
被重定向到子 shell 内的 /dev/null
,|&
运算符最终将充当 [=41] 中的 2>&1
=] - 因为 stdout
在子 shell 中被丢弃,所以写入 stdout
的任何内容都不会到达管道。