代码之家  ›  专栏  ›  技术社区  ›  Bastian Venthur

用bash转义Makefile规则中的括号<(curl…)

  •  2
  • Bastian Venthur  · 技术社区  · 8 年前

    我想管理臭名昭著的 bash <(curl SOME_URL) combo在Makefile中,我正在努力转义括号。Makefile中的相关摘录如下所示:

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

    通过运行上述 make foo 仅产量: /bin/sh: 1: Syntax error: "(" unexpected

    有人能告诉我如何正确地转义括号,这样我就可以执行上面的操作了吗

    1 回复  |  直到 8 年前
        1
  •  5
  •   Inian    8 年前

    原因是,您没有使用 bash 壳你的 makefile 不再使用bourne shell( 猛击 )其中支持流程替换( <() ),因此系统使用 /bin/sh .默认值 /垃圾箱/sh bourne shell设计为仅使用标准功能运行。

    使用 SHELL := /bin/bash 在您的 Makefile 使 猛击 默认情况下,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 。如果在 生成文件 ,程序 /垃圾箱/sh 用作外壳