在Bash中将stderr管道到另一个命令,而不是stdout

摘要

在Bash中,有时候我们想将stdout和stderr分别导向不同的命令进行处理。本教程将介绍如何使用命名管道(named pipes)实现这一目的,将stdout传递给一个命令,将stderr传递给另一个命令。

内容

要将stderr管道到另一个命令,可以按照以下步骤进行操作:

  1. 创建命名管道(named pipes):
1mkfifo stdout-target
2mkfifo stderr-target
  1. 将stdout导向stdout-target管道,将stderr导向stderr-target管道,同时运行两个接收管道输入的命令:
1cat < stdout-target | command-for-stdout &
2cat < stderr-target | command-for-stderr &
  1. 运行主命令,将stdout导向stdout-target管道,将stderr导向stderr-target管道:
1main-command 1>stdout-target 2>stderr-target
  1. 运行完主命令后,记得删除命名管道:
1rm stdout-target stderr-target

总结

通过使用命名管道,我们可以将stdout和stderr分别导向不同的命令进行处理。这种方法比较灵活,可以将输出导向任何你想要的命令进行进一步处理。记得在使用命名管道后,及时删除它们,以避免占用过多的系统资源。


相关文章推荐