我想在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
有人可以告诉我如何正确地逃避括号,以便我可以执行上面的
答案 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