繁体   English   中英

在csh中重定向stderr

[英]Redirecting stderr in csh

我正在执行一个程序,将崩溃报告转储到STDERR ,我必须从中过滤一些必要的信息。 问题是我无法将STDERR重定向到STDOUT并使用grepPIPE

command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl

获取错误: Ambiguous output redirect.

相同的命令在bash终端下工作。 我应该改变什么来使它工作?

在文件重定向方面, csh比bash明显更有限。 csh ,你可以使用通常的>运算符重定向stdout ,你可以使用>&运算符重定向stdoutstderr ,你可以使用|&运算符管道stdoutstderr ,但是没有单个运算符可以单独重定向stderr

通常的解决方法是在子shell中执行命令,将该子shell中的stdout重定向到您想要的任何文件(在这种情况下为/dev/null ),然后使用|&运算符重定向stdoutstderr子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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM