bash—如何将env变量传递给makefile规则中的shell脚本

kqhtkvqz  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(377)

我在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)'

我运行命令,比如 make test DATE=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) = ''

5lhxktic

5lhxktic1#

问题在于 make $(shell…)调用。您可能需要命令替换(shell特性)。杀一只没用的猫。

test:
    $(MAKE) do_test VAR=test

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

注意,不建议设置 SHELL 在生成文件中。

相关问题