bashのプロセス置換(Process Substitution)で中間ファイルを不要に

bashのプロセス置換は、引数でファイルを指定すべきところをコマンドの結果で代用できる機能。コマンドの結果をファイルとして扱え、作業用の中間ファイルを作る必要がなくなる。

記述方法 内容
<(コマンドリスト) コマンドの結果をファイルとして扱う
>(コマンドリスト) 出力先をコマンドに渡す

>(コマンドリスト)

プロセス置換の利用例としてよく挙げられるものに、ファイルの比較を行うdiffの引数にファイルの代わりにコマンドを渡すがある。

filenameで始まる名前のファイルが大量にあるとして、原則、ファイルには特定の文字列「something」が入っているとする。somethingが入っていないファイルを探したい。

grep -lで出力したファイル名と、lsで出力したファイル名をdiffに渡している。

>(コマンドリスト)

ファイルを探すという目的の場合、diffの出力形式ではなく、ファイル名だけを並べたくなるかもしれない。
出力結果の整形もプロセス置換でできる。

プロセス置換の方向が先ほどと逆になっている。
diffの結果をリダイレクトするが、リダイレクト先をファイルの代わりにtailコマンドにするために、プロセス置換を使っている。今回はさらにtailの結果をリダイレクト + コマンド置換して、cutに渡している。
※ファイルに書き出す時、プロセス置換した中でリダイレクトしないと、プロセス置換で処理した結果が書き出せない。下はdiff結果が書き出される。

プロセス置換利用時の注意点

シェルスクリプトを書く場合、/bin/shにはプロセス置換がないため、shコマンドではなくbashコマンドを利用する。

あるいは実行権限をつけて、「./スクリプト名」かフルパスでの実行であれば、shebangに#!/bin/bashが指定されていれば、bashで実行されるため問題ない。

-Linux