Bash 如何在Makefile规则中将env变量传递给shell脚本
我在Makefile中有一条规则,它试图用env变量呈现一些文本,每当我将该变量传递给$(shell)命令时,我总是将其设为空 下面是我试图传递env变量的Makefile 我正在使用sqoop从运行where语句中定义日期的查询的SQLServer获取数据Bash 如何在Makefile规则中将env变量传递给shell脚本,bash,shell,makefile,sqoop,Bash,Shell,Makefile,Sqoop,我在Makefile中有一条规则,它试图用env变量呈现一些文本,每当我将该变量传递给$(shell)命令时,我总是将其设为空 下面是我试图传递env变量的Makefile 我正在使用sqoop从运行where语句中定义日期的查询的SQLServer获取数据 SHELL := /bin/bash ifndef DATE override DATE=$(shell date --date="1 day ago" +%Y%m%d) endif test: sqoop --targ
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)'
我运行命令,如maketestdate=20190728
当我传递env参数,如
|env DATE=20190728 python-m mypackage.render
时,我可以看到带有where convert(varchar,created_at,112)='20190728'
的查询,但是当我使用env var时,我总是得到一个带有env变量的空字符串,如where convert(varchar,created_at,112)=''
问题在于make
$(shell…)调用。您可能需要命令替换(shell功能)。杀死一只无用的猫
test:
$(MAKE) do_test VAR=test
do_test:
VAR=$(VAR) python -m mypackage.render < file.txt
测试:
$(MAKE)do_test VAR=test
进行以下测试:
VAR=$(VAR)python-m mypackage.render
请注意,不建议在Makefile中设置
SHELL
。问题在于make
$(SHELL…)调用。您可能需要命令替换(shell功能)。杀死一只无用的猫
test:
$(MAKE) do_test VAR=test
do_test:
VAR=$(VAR) python -m mypackage.render < file.txt
测试:
$(MAKE)do_test VAR=test
进行以下测试:
VAR=$(VAR)python-m mypackage.render
请注意,不建议在Makefile中设置
SHELL
。请提供您运行的实际命令,以及您“看到”的输出。@Jens我编辑了这个问题,以获得有关我的方法以及为什么在SHELL中使用cat的更多详细信息,是否有更好的替代方法?请提供您运行的实际命令,还有您“看到”的输出。@Jens我编辑了这个问题,以获得更多关于我的方法的详细信息,以及我为什么在shell中使用cat,是否有更好的替代方案?