一時データ用の擬似ファイル

一時データ用の擬似ファイル

私はしばしば、繰り返しの方法でファイル(wdiffなど)の入力を受け入れるコマンドラインプログラムに比較的短い文字列データ(数行程度)を提供したいと思います。もちろん、1つ以上の一時ファイルを作成し、そこに文字列を保存してから、ファイル名を引数として使用してコマンドを実行できます。しかし、私の考えでは、データが実際にディスクに書き込まれている場合、このプロセスは非常に非効率的になります。 。ファイルをwdiffとして保存します。パイプなどの擬似ファイルを使用して、実際にデータをディスクに書き込むことなく一時的に保存する(またはしきい値を超える場合にのみ書き込む)など、この問題を回避するための推奨方法はありますか? wdiffには2つのパラメーターが必要です。私が理解する限り、これはwdiff <"text"

ベストアンサー1

command1 <( command0 )Bashでは、stdoutをリダイレクトcommand0し、それをcommand1コマンドライン引数としてファイル名に渡すリダイレクト構文を使用できます。これは…プロセスの交換

ファイル名コマンドライン引数を使用する一部のプログラムは実際には真のランダムアクセスファイルを必要とするため、この手法はこれらのプログラムでは機能しません。ただし、以下を使用するとうまく機能しますwdiff

user@host:/path$ wdiff <( echo hello; echo hello1 ) <( echo hello; echo hello2 )
hello
[-hello1-]
{+hello2+}

その後、FIFOを生成し、内部コマンドを<( )FIFOにパイプし、FIFOのファイル記述子をパラメータとして渡します。何が起こっているのかを確認するには、次の方法で何もせずにechoパラメータを印刷します。

user@host:/path$ echo <( echo hello )
/dev/fd/63

名前付きパイプを作成する方が柔軟ですが(複数のプロセスを使用して複雑なリダイレクトロジックを作成したい場合)、多くの目的に十分で使いやすいです。

>( )出力として使用したい場合の構文もあります。

$ someprogram --logfile >( gzip > out.log.gz )

また、見ることができますBashのマニュアルページ「プロセスの置き換え」セクションそしてBashリダイレクトチートシート関連技術を確保するために

おすすめ記事