引数として提供されたファイルからデータを読み取るプログラムにデータをどのようにストリーミングしますか?

引数として提供されたファイルからデータを読み取るプログラムにデータをどのようにストリーミングしますか?

私は巨大なgzip圧縮ファイルを持っていてそれを読むことができるプログラム(この場合は4s-import)が欲しいです。まず、ファイルを解凍してから、ファイルパスを引数として使用してプログラムを呼び出すのに時間がかかります。次のことができますか?

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

SOME-MAGICがstdinを含む抽象ファイルへのパスと同じ場合はどこですか?

それ以外の場合は、より遅く、より多くのディスク容量を消費する代替方法は次のとおりです。

zcat huge.gz > huger
4s-import huger

答え1

(または)手続き型代替演算子を使用できます<()bashzsh

4s-import <(zcat huge.gz)

この演算子は一時的なfifoを生成し/dev/fd/NN、それを<(.)文字列に置き換えます/dev/fd/NN4s-importこれで/dev/fd/NNfifoを開いて読むことができ、bash実行はzcat huge.gz出力を/dev/fd/NN

答え2

  1. 多くのプログラムには-標準入力があります。あなたがこれを行う場合は「組み込み」になっているので、使用してください。

  2. /dev/stdinまたは/dev/fd/0ファイルとして試すこともできます。

  3. 3番目のオプションはmkfifofifo特殊ファイルを生成することです。あるシェルではデータ(たとえばgunzip > your_fifo_file)をパイプで接続し、もう一方のシェルではfifoをファイルとしてプログラムを呼び出します。

関連情報