bash中如何将标准错误重定向到管道?

bash中如何将标准错误重定向到管道?

首页冒险解谜重定向更新时间:2024-09-24

管道只能传递程序的标准输出(stdout)。要通过管道传递标准错误(stderr),您需要将stderr重定向到与stdout相同的目标。您可以选择关闭stdout或将其重定向到/dev/null以仅获取stderr。以下是一些示例代码:

另一个简单的示例是重定向stdout和stderr:

这在像dialog这样的程序中有明显的应用,它通过屏幕绘制窗口(使用ncurses),并将结果返回到stderr。处理这个问题的一种方法是将stderr重定向到临时文件。

在上面的示例中,我们要么完全丢弃了stdout,要么将其发送到已知设备(用户终端的/dev/tty)。还可以仅管道stderr,但保持stdout不受影响(在不预先知道脚本输出去向的情况下)。这有点棘手。

也可以在不使用exec的情况下完成相同的操作:

关闭fd 3(3>&-)以防止命令继承它。请注意,bash允许在一个重定向中同时复制和关闭:1>&3- 您可以在Linux上尝试以下内容查看差异:

要显示一个对话框的一行命令:

这将使对话框窗口正常工作,但通过sed修改的是对话框的输出(返回给stderr)。

使用ProcessSubstitution也可以实现类似的效果:

这将通过tr命令将标准错误输出重定向到管道。

更多

如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved