37888


以下のようなコマンドをMakeファイルで使用したいと思います。  
括弧をどのようにエスケープすれば良いですか？

[code]

    target: a.txt b.txt
        diff <(head a.txt) <(head b.txt) > target
    
[/code]


CC BY-SA 3.0
2017-09-12T04:45:41.457
37886
2017-09-12T09:43:40.450
2017-09-12T09:43:40.450
3054
7566
question
makefile
Makeファイルのコマンド行で "<( )" によるプロセス置換を使いたい


@metropolis さんも書かれていますが、`<()` がうまく動いていないのは make から起動されるシェルが `/bin/sh` になっていて、
bash の機能であるプロセス置換を認識できないからです。また、 diff は差分を検出すると、異常終了する仕組みになっているので、そのまま recipe
に記載すると、 diff があった時点で make が abort してしまいます。

[code]

    SHELL = /bin/bash    
    
    target: a.txt b.txt
        diff <(head a.txt) <(head b.txt) > target || :
    
[/code]

ですで、上記のようにすると、期待する動作になると思います。

  1. shell に `/bin/bash` を明示的に指定
  2. diff の実行結果を、何もしないコマンド(`:`) でもって捨て去る。


CC BY-SA 3.0
2017-09-12T07:27:03.220
37888
2017-09-12T07:27:03.220
754
37886
answer