比較的短い文字列データ(数行になることもあります)を、ファイル(wdiffなど)からの入力のみを繰り返し受け入れるコマンドラインプログラムにフィードしたいことがよくあります。確かに、1つ以上の一時ファイルを作成し、そこに文字列を保存して、ファイル名をパラメーターとしてコマンドを実行できます。しかし、データが実際にディスクに書き込まれる場合、この手順は非常に非効率的であるように見えます。また、この手順を何度も繰り返すと、必要以上にディスクに害を及ぼす可能性があります。 1行の長いテキストファイルをwdiffにフィードしたい場合。これを回避するための推奨される方法はありますか。たとえば、パイプなどの疑似ファイルを使用して、実際にディスクに書き込むことなく(または、クリティカルな長さを超える場合にのみデータを書き込む)、データを一時的に保存します。 wdiffは2つの引数を取ることに注意してください。私が理解している限り、wdiff <"text"
のような方法でデータをフィードすることはできません。 。
承認された回答:
名前付きパイプを使用します。実例として:
mkfifo fifo
echo -e "hello worldnnext linenline 3" > fifo
-e
改行エスケープを正しく解釈するようにechoに指示します(n
)。これによりブロックされます。つまり、何かがパイプからデータを読み取るまでシェルがハングします。
同じディレクトリのどこかで別のシェルを開きます:
cat fifo
エコーを読み取り、他のシェルを解放します。パイプはディスク上にファイルノードとして存在しますが、パイプを通過するデータは存在しません。それはすべてメモリ内で行われます。バックグラウンドできます(&
)エコー。
パイプには64kのバッファー(Linuxの場合)があり、ソケットのように、いっぱいになるとライターをブロックするため、ライターを早めに殺さない限り、データが失われることはありません。