我正在尝试一个程序(prog1),它生成我想传递给另一个程序(prog2)的二进制输出(它是一个编码器)。prog2 可以从标准输入获取数据,所以我想将 prog1 的输出通过管道传输到 prog2。问题是,由于它是二进制数据,终端可能会损坏。例如 $> prog1 | 编2-
还有其他方法吗?如果可以的话,我想避免编写胶水代码只是为了在两者之间路由数据。
谢谢!
当你写
$ prog1 | prog2 -
prog1 写入其标准输出的所有内容都将发送到 prog2,而不是您的 tty。prog1 当然可以通过将二进制数据写入 stderr 或通过其他方式将数据写入终端,但您的 prog2 更有可能也在写入二进制数据。作为一个简单的测试,请尝试:
$ prog1 | prog2 - | xxd
(如果您没有 xxd,请尝试任何十六进制转储程序,或者只是od
)
如果这不起作用,请尝试:
$ { prog1 | prog2 - | xxd; } 2> /dev/null
或者
$ { prog1 | prog2 -; } 2>&1 | xxd
或该主题的其他变体。