linux - 在 csh 中重定向 stderr

标签 linux shell csh tcsh

我正在执行一个将崩溃报告转储到 STDERR 的程序,我必须从那里过滤一些必要的信息。问题是我无法使用 grep

STDERR 重定向到 STDOUTPIPE
command 2>&1 >/dev/null | grep "^[^-]" >& /tmp/fl

出现错误:输出重定向不明确。

相同的命令在 bash 终端下有效。 我应该更改什么才能使其正常工作?

最佳答案

csh 在文件重定向方面明显比 bash 受限。在 csh 中,您可以使用通常的 > 运算符重定向 stdout,您可以同时重定向 stdout stderr>& 运营商,你可以管道 stdoutstderr|& 运营商, 但没有单独的操作符可以单独重定向 stderr

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

相关文章:

csh - 在 unix 中继续

c - Ubuntu 上的套接字(不允许操作)

linux - Linux 内核模块中的 module_init 和 init_module 有什么区别?

linux - 如何添加详细选项来控制脚本输出?

linux - 使用 awk 忽略双引号

arrays - 在shell脚本中排序

shell - c shell脚本中set命令错误

python - cat、grep 和 cut - 翻译成 python

c - 在 C 程序中的 Ubuntu 上使用 mknod

Git 预提交钩子(Hook)在文件中查找文本