将输出重定向到标准输出而不是文件

将输出重定向到标准输出而不是文件

我正在编写一个java包装器convert(这是image magick的一部分)。我想要做的是调用一个命令,convert -thumbnail 1024 test.JPG >(cat)使其将缩略图字节流打印到标准输出。之后我想从这个流中读取并将其存储在 Blob 存储中。我在使用上面的命令时遇到困难,因为它看起来无法处理二进制数据。打印字节后,它还会打印类似的内容62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c

我想避免写入临时文件,因为我不想处理任何目录权限。

我的命令做错了什么?是cat无法处理二进制数据还是其他原因?

答案1

来自命令行处理的输出文件名部分网页:

标准输出

Unix 允许一个命令的输出通过管道传输到另一个命令。 ImageMagick 允许将一个命令通过管道传输到另一个文件名为 - 的命令。

在此示例中,我们将 Convert 的输出通过管道传输到显示程序:

magick logo: gif:- | display gif:-

然后你的命令行可以这样开始:

convert -thumbnail 1024 test.JPG - 

...或选择转换为具有正确前缀的其他格式:

convert -thumbnail 1024 test.JPG png:-

...此时您可以将该输出传送到您的 blob-store-reader:

convert -thumbnail 1024 test.JPG - | blob-store-reader

答案2

cat是为行和文本而设计的,但它不关心是否处理除一些控制字符之外的二进制数据。这是终端(您的普通标准输出)无法处理二进制数据并且可能会被卡住。

顺便说一句,对所需的输出文件使用“进程替换”就像走风景路线一样。并且,您应该正确使用它,添加另一个>用于重定向。但是,到底为什么呢?man convert:

对于标准输入或输出,将“文件”指定为“-”。

相关内容