Unix 在不损坏终端的情况下在程序之间传输二进制输出

Unix 在不损坏终端的情况下在程序之间传输二进制输出,unix,terminal,Unix,Terminal,我正在尝试一个程序(prog1),该程序生成二进制输出(它是一个编码器),我想将其传递给另一个程序(prog2)。prog2可以从stdin获取数据,所以我想通过管道将prog1的输出传输到prog2。问题是,由于它是二进制数据,终端可能会损坏。 例如 $>项目1 |项目2- 还有别的办法吗?如果可以的话,我希望避免仅仅为了在两者之间路由数据而编写粘合代码 谢谢 当你写作时 $ prog1 | prog2 - prog1写入其标准输出的所有内容都将进入prog2,而不是tty。prog1当然可

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

还有别的办法吗?如果可以的话,我希望避免仅仅为了在两者之间路由数据而编写粘合代码

谢谢

当你写作时

$ prog1 | prog2 -
prog1写入其标准输出的所有内容都将进入prog2,而不是tty。prog1当然可以通过向stderr写入二进制数据或通过其他方式向终端写入数据,但更可能的情况是prog2也在写入二进制数据。作为一个简单的测试,请尝试:

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

如果不起作用,请尝试:

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


或者在这个主题上的一些其他变体。

应该没有任何终端副作用。您确定管道末尾的
-
并不意味着
prog2
会将一些二进制数据转储到shell中吗?
$ { prog1 | prog2 -; } 2>&1 | xxd