Makefile:通过命令设置环境变量输出

时间:2017-11-10 22:34:57

标签: shell makefile

我正在尝试编写一个make目标,它设置了env。 shell命令获得的变量。

gcloud beta emulators datastore env-init命令在终端上输出少量导出语句(不设置,但只是回显/打印)。

get root_url(subdomain: "sub")

通常,我必须将这些行复制并粘贴到终端中以设置变量。

是否可以使这些打印的export语句执行,以便在shell上设置它们。我试过了,但没有用。

export DATASTORE_EMULATOR_HOST=localhost:8432
export DATASTORE_PROJECT_ID=my-project-id

如果我愿意,它会打印出脚本输出,

target:
    @export JAVA_HOME=$(JAVA_HOME); \
    $(shell gcloud beta emulators datastore env-init); \
    go run src/main.go

target: export JAVA_HOME=$(JAVA_HOME); \ gcloud beta emulators datastore env-init \ go run src/main.go 类似,我如何获取JAVA_HOME命令的输出(这是4行导出命令),以便在环境中设置它们。

所以我想要一些类似的,实际上,

gcloud beta emulators datastore env-init

感谢。 BSR

1 个答案:

答案 0 :(得分:1)

make打印的输出实际上不会影响子进程的环境内容。

如果变量赋值似乎没有任何效果,那是因为make在一个单独的子shell中运行每一行,每个子行都有新的环境。您需要像这样一起加入命令:

target:
    export JAVA_HOME=$(JAVA_HOME); \
    eval "$$(gcloud beta emulators datastore env-init)"; \
    go run src/main.go

eval是必需的,以便在当前shell中评估gcloud命令的输出,而不是子shell。另请注意食谱第二行末尾的分号。