[英]Redirecting stderr in csh
我正在执行一个程序,将崩溃报告转储到STDERR
,我必须从中过滤一些必要的信息。 问题是我无法将STDERR
重定向到STDOUT
并使用grep
其PIPE
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl
获取错误: Ambiguous output redirect.
相同的命令在bash终端下工作。 我应该改变什么来使它工作?
在文件重定向方面, csh
比bash明显更有限。 在csh
,你可以使用通常的>
运算符重定向stdout
,你可以使用>&
运算符重定向stdout
和stderr
,你可以使用|&
运算符管道stdout
和stderr
,但是没有单个运算符可以单独重定向stderr
。
通常的解决方法是在子shell中执行命令,将该子shell中的stdout
重定向到您想要的任何文件(在这种情况下为/dev/null
),然后使用|&
运算符重定向stdout
和stderr
子shell到主shell的下一个命令。
在你的情况下,这意味着:
( command >/dev/null ) |& grep "^[^-]" >&/tmp/fl
因为stdout
被重定向到子shell内的/dev/null
, |&
运算符最终将在bash中作为2>&1
- 因为stdout
在子shell中被丢弃,所以写入stdout
任何内容都不会到达管道。
如果您不介意将stdout和stderr混合到您可以使用的管道中
command |& grep "^[^-]" >& /tmp/fl
否则你可以做黑客:
(command >/dev/null) |& grep "^[^-]" >& /tmp/fl
将stdout分隔为null,然后管道stdout和stderr只给stderr作为内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.