在没有损坏终端的情况下在程序之间管道二进制输出

时间:2012-11-21 15:41:33

标签: unix terminal

我正在尝试一个程序(prog1),它生成二进制输出(它是一个编码器),我想传递给另一个程序(prog2)。 prog2可以从stdin获取数据,所以我想将prog1的输出传递给prog2。问题是,由于它是二进制数据,终端可能会被破坏。 例如 $> prog1 | prog2 -

还有其他方法吗?我想避免编写胶水代码,只是为了在两者之间路由数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

写作时

$ prog1 | prog2 -

prog1写入stdout的所有内容都转到prog2,而不是你的tty。 prog1当然可以通过将二进制数据写入stderr或者通过其他方式将数据写入终端,但是你的prog2更有可能也在编写二进制数据。作为一个简单的测试,请尝试:

$ prog1 | prog2 - | xxd

(如果您没有xxd,请尝试任何十六进制转储程序,或者只是od

如果这不起作用,请尝试:

$ { prog1 | prog2 - | xxd; } 2> /dev/null

$ { prog1 | prog2 -; } 2>&1 | xxd

或该主题的其他变体。