Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Process Substitution(プロセス置換?)を使って、地獄の名前付きパイプや一時ファイルからサヨナラバイバイ

Process Substitution(プロセス置換?)は、ぱっと見リダイレクトっぽい構文の素敵テクです。
これを使えば地獄の名前付きパイプや一時ファイルからサヨナラバイバイ。

使い方

$ diff <(command1) <(command2) 

とやれば、コマンド間出力の比較ができます。
実際にはこんな感じ。

$ diff <(ls -l) <(ls -la)
1a2,3
> drwxr-xr-x  12 shuzo_kino  staff     408  4  6 21:57 .
> drwxr-xr-x+ 48 shuzo_kino  staff    1632  4 13 09:09 ..

プロセス置換知る前の私なら、コマンド毎に一時ファイル作って比較する方法を使ってました。
慣れてる人なら、名前付きパイプなんて手もあるそうですが……
どっちを使うにしても、プロセス置換の方が圧倒的に読みやすいですね。

利点

Wikipediaからの抄訳で恐縮ですが……プロセス置換には以下の優位性があります。

Simplicity(単純さ)

The commands can be given in-line; there is no need to save temporary files or create named pipes first.
コマンドがインライン展開されるので一時ファイルや名前付きパイプが不要です

Performance(性能)

Reading directly from another process is often faster than having to write a temporary file to disk, then read it back in. This also saves disk space.
別プロセスの読み込みは、時に一時ファイルを作って読み込む方式より高速である事があります。
また、ファイル領域の節約にもなります。

Parallelism(比較性?)

The substituted process can be running concurrently with the command reading its output or writing its input, taking advantage of multiprocessing to reduce the total time for the computation.
プロセス置換は入出力へのアクセスが同時に行われるため、複数プロセスで走らせるより時間や計算資源の節約につながります。