Jon*_*lus 17 shell bash io-redirection arguments
我有一个巨大的 gzipped 文件,我想要一个程序(在这种情况下为 4s-import)来读取它。首先解压缩文件,然后以文件路径作为参数调用程序需要花费大量时间。是否有可能做这样的事情:
zcat huge.gz | 4s-import <SOME MAGIC>
Run Code Online (Sandbox Code Playgroud)
SOME-MAGIC 就像包含标准输入的抽象文件的路径?
否则我必须做的更慢、更消耗磁盘空间的替代方案是:
zcat huge.gz > huger
4s-import huger
Run Code Online (Sandbox Code Playgroud)
tkr*_*nwa 33
您可以使用过程替换操作<()的bash(或zsh):
4s-import <(zcat huge.gz)
Run Code Online (Sandbox Code Playgroud)
此运算符将创建一个临时 fifo/dev/fd/NN并替换<(.)为字符串/dev/fd/NN。4s-import现在可以打开/dev/fd/NN并读取该 fifo,而bash将运行zcat huge.gz,它将其输出发送到/dev/fd/NN.
Bgs*_*Bgs 17
许多程序都有一个-作为标准输入。如果你的,使用它,因为它是“内置的”。
您也可以尝试使用/dev/stdin或/dev/fd/0作为文件。
第三个选项是用来mkfifo创建一个fifo 特殊文件。在一个 shell 中,您输入数据(例如gunzip > your_fifo_file),而在另一个 shell 中,您使用 fifo 作为文件调用您的程序。