如何将ENV变量传递到Makefile规则中的Shell脚本



我在makefile中有一个规则,该规则试图用env变量渲染一些文本,每当我将其传递给$(shell(命令

时,我总是会空虚。

以下是我试图通过ENV变量的makefile而且我正在使用SQOOP从SQL Server获取数据,该查询运行具有定义日期的查询

SHELL := /bin/bash
ifndef DATE
override DATE=$(shell date --date="1 day ago" +%Y%m%d)
endif
test:
        sqoop --target-dir /tmp/output/ --fields-terminated-by 't' --split-by id --query '$(shell cat query.sql | env DATE=$(DATE) python -m mypackage.render)'

我运行命令,例如 make test DATE=20190728

当我像| env DATE=20190728 python -m mypackage.render这样的ENV参数时,我可以看到where convert(varchar,created_at,112) = '20190728'的查询,但是当我使用env var时,我总是会使用一个带有env变量的空字符串,例如 where convert(varchar,created_at,112) = ''

问题是 make $(shell ...(调用。您可能需要命令替换(外壳功能(。杀死一只无用的猫。

test:
    $(MAKE) do_test VAR=test
do_test:
    VAR=$(VAR) python -m mypackage.render < file.txt

请注意,不建议将SHELL设置为makefile。

最新更新