Bash 如何在Makefile规则中将env变量传递给shell脚本

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

我在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 --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,是否有更好的替代方案?