我正在尝试编写一个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
答案 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。另请注意食谱第二行末尾的分号。