"diff: /dev/fd/1022: Too many open files"

Shellscriptを書いていて、
diff <(cmd1) <(cmd2)
みたいなdiff呼び出しをループの中でやっていたら、表題のエラーが出ました。
どうやら、diffでプロセス置換を使うと、diffコマンドを呼び出すたびにファイルディスクリプタを新規作成してしまうみたいで、1プロセスあたりのファイルディスクリプタ使用数の上限に達してしまったのではないかと推測されます。

解決方法

diffで比較するのをやめて、普通に文字列比較するようにしたら解決しました。
if [ $(cmd1) == $(cmd2) ]  ; then
    echo ok
else
    echo ng
fi
カテゴリ: