短く書く方法はありますか?デフォルトでは、コマンドをファイルに出力し、そのファイルを次のコマンドの入力として使用します。後で見るためにファイルをアーカイブしたいと思います。
cmd1 > verylong.txt; cmd2 < verylong.txt
私もできることを知っています
cmd1 | tee verylong.txt | cmd2
しかし、「verylong.txt」は巨大なファイルになると予想しているので、パイプを使用するとファイル全体がメモリに保存されるため、効率が悪くなると思います。一方、ファイル入力を使用すると、一度に1行ずつ処理されます。 (それとも私の推測は間違っていますか?)
こんなエレガントなことができればとても良いと思います。
cmd1 > verylong.txt > cmd2
ベストアンサー1
私が知っている限り、cmd1 | tee verylong.txt | cmd2
ファイル全体はメモリに保存されません。実際にcmd2
入力を消費する前に待機しすぎると、cmd1
呼び出しをブロックしwrite
てcmd2
再読み込みを開始したときにのみロックを解除できます。
その理由は、パイプに基本的にバッファがあるからです。特定の合理的なサイズに制限。
もちろん、コマンドが出力を書き込む前に入力全体を読み取る必要がある場合(または同様の場合)、状況はcmd2
異なる場合がありますsort
。この場合、ファイル全体の内容はcmd2
メモリに保持されますが、これはコマンドへの入力としてパイプまたは中間ファイルが使用されているかどうかには関係ありません。