質問: 以下のようなコマンドをMakeファイルで使用したいと思います。 括弧をどのようにエスケープすれば良いですか? ``` target: a.txt b.txt diff <(head a.txt) <(head b.txt) > target ```
回答: @metropolis さんも書かれていますが、`<()` がうまく動いていないのは make から起動されるシェルが `/bin/sh` になっていて、 bash の機能であるプロセス置換を認識できないからです。また、 diff は差分を検出すると、異常終了する仕組みになっているので、そのまま recipe に記載すると、 diff があった時点で make が abort してしまいます。 ``` SHELL = /bin/bash target: a.txt b.txt diff <(head a.txt) <(head b.txt) > target || : ``` ですで、上記のようにすると、期待する動作になると思います。 1. shell に `/bin/bash` を明示的に指定 2. diff の実行結果を、何もしないコマンド(`:`) でもって捨て去る。