Makeファイルのコマンド行で “

投稿者: Anonymous

以下のようなコマンドを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 の実行結果を、何もしないコマンド(:) でもって捨て去る。
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *