使用bash<(curl ...)在Makefile规则中转义括号

时间:2018-04-25 08:00:35

标签: bash curl makefile

我想在Makefile中运行臭名昭着的bash <(curl SOME_URL)组合,我正在努力逃避括号。 Makefile的相关摘录如下所示:

foo:
    docker run $(IMAGE_NAME) bash <(curl SOME_URL) \
        --some-param1 \
        --some-param2

通过make foo运行上述内容只会产生:/bin/sh: 1: Syntax error: "(" unexpected

有人可以告诉我如何正确地逃避括号,以便我可以执行上面的

1 个答案:

答案 0 :(得分:4)

原因是因为您没有使用bash shell。您的makefile不使用支持进程替换(bash)的bourne again shell(<()),因此系统会使用/bin/sh执行它。默认的/bin/sh bourne shell旨在仅使用标准功能运行。

使用SHELL := /bin/bash中的Makefile默认为所有食谱制作bash shell,或者您可以根据食谱定义它。

foo: SHELL := /bin/bash
foo:
    docker run $(IMAGE_NAME) bash <(curl SOME_URL) \
        --some-param1 \
        --some-param2

来自GNU make documentation: Choosing the Shell。引用它来显示实际的行

  

用作shell的程序取自变量SHELL。如果未在makefile中设置此变量,则程序/bin/sh将用作shell