システムプログラムを数万回呼び出すメインスクリプトを作成しました。デフォルトスクリプトは、呼び出されるたびにプログラムに入力ファイルを生成して提供します。完了すると、プログラムは基本スクリプトから読み取ることができる出力ファイルを生成します。プログラムが実行されると:program inputFile outputFile
デフォルトのスクリプトは遅く実行されますが、これは実行中に発生する大量のI / 0オーバーヘッドが原因であると考えられますprogram
。
ディスクに書いたり読んだりせずにプログラムを実行できますか?
inputFile
と両方に複数outputFile
行を含めることができます。プログラムの内部構造は変更される可能性がありますが、私はそうしたくありません。残念ながら、他の場所では関連するアドバイスを見つけることができませんでした。
答え1
これはスクリプトのペアによって異なりますprogram
。ファイルを何度も処理する必要がある複雑な作業を行うと、運が悪くなる可能性があります。 (私たちはこれを「ゼロ」と呼びます。)
まず、名前付きファイルの代わりに標準出力に出力を書き込むようにプログラムに直接的かつ明示的に指示できることを確認してください。一部のプログラムは、ダッシュ()のみを含む引数を-
適切な標準入力または標準出力として解釈します。だから試してみてください
プログラム入力ファイル - |あなたの処理
/dev/stdout
次に、出力ファイル名と同じようにしてください。
プログラム入力ファイル/ dev / stdout |あなたの処理
第三に、名前付きパイプを試してみてください。
myFifo=$(mktemp) プログラム入力ファイル "$myFifo"& あなたの処理<"$myFifo" rm "$myFifo"