我在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。