Makefile中echo/printf输出AIRFLOW_UID至.env文件失败问题
解决Makefile生成Airflow .env文件的问题
问题原因
- echo -e失效:Makefile默认用
/bin/sh执行命令,而POSIX标准的echo不支持-e参数,所以-e会被当成普通文本输出到文件里。 - printf无输出:Makefile里
$是特殊符号,用来引用变量,你写的$(id -u)会被Makefile当成变量名解析(这个变量不存在),所以实际传给shell的是空值,自然得不到正确UID。
解决办法
方法1:修正printf命令(最推荐)
把$(id -u)里的$转成$$,让Makefile把整个$$(id -u)传给shell执行:
generate-env: printf "AIRFLOW_UID=%s\n" $$(id -u) > .env
方法2:用bash执行echo
如果非要用echo,就指定bash来跑,因为bash的echo支持-e:
generate-env: bash -c 'echo -e "AIRFLOW_UID=$(id -u)" > .env'
或者也可以转义$,不用bash也行:
generate-env: echo -e "AIRFLOW_UID=$$(id -u)" > .env
方法3:用Makefile的shell函数提前获取UID
直接在Makefile里用shell函数拿到用户UID,再写入文件,兼容性更好:
AIRFLOW_UID := $(shell id -u) generate-env: echo "AIRFLOW_UID=$(AIRFLOW_UID)" > .env
验证
执行make generate-env后打开.env,应该能看到AIRFLOW_UID=你的用户ID(比如1001)。
内容的提问来源于stack exchange,提问作者Hud
相关产品推荐
相关产品推荐

