如何将数据流传输到期望从作为参数给出的文件中读取数据的程序?


17

我有一个很大的gzip压缩文件,并且我想要一个程序(在这种情况下为4s-import)来读取它。首先解压缩文件,然后使用文件路径作为参数调用程序,这需要花费大量时间。是否可以做类似的事情:

zcat huge.gz | 4s-import <SOME MAGIC>

其中SOME-MAGIC就像是包含stdin的抽象文件的路径?

否则,我必须做的更慢且消耗更多磁盘空间的替代方法是:

zcat huge.gz > huger
4s-import huger

Answers:


32

您可以使用过程替换操作<()bash(或zsh):

4s-import <(zcat huge.gz)

该运算符将创建一个临时fifo /dev/fd/NN并替换<(.)为字符串/dev/fd/NN4s-import现在可以打开/dev/fd/NN该fifo并从中读取信息,而该fifo bash将运行zcat huge.gz,并将其输出发送到/dev/fd/NN


17
  1. 许多程序都有一个-标准输入。如果是这样,请使用它的“内置”。

  2. 您也可以尝试使用/dev/stdin/dev/fd/0作为文件。

  3. 第三种选择是用于mkfifo创建fifo特殊文件。在一个shell中,您通过管道传输数据(例如gunzip > your_fifo_file),而在另一个shell中,您以fifo作为文件调用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.