如何修复 bash 中 .env 中用引号引起来的导出变量

问题描述 投票:0回答:1

这是我的 .env.测试

S3_READY_MESSAGE="s3 is ready"
NGINX_READY_MESSAGE="nginx is ready"

Bash 输出变量

$ echo $(cat ../../../.env.test | grep -o -E '^[^#]+')

输出: S3_READY_MESSAGE =“s3已准备好”NGINX_READY_MESSAGE =“nginx已准备好”

Bash 导出变量

export $(cat ../../../.env.test | grep -o -E '^[^#]+')

错误> bash:导出:

ready"': not a valid identifier bash: export: 
ready"':不是有效的标识符

bash dotenv
1个回答
0
投票

我最初有一个解决方案,可以正常导出,但它不适用于带有空格的引用内容。

解决方案 1 - CON:仅适用于值中没有空格的情况

.env

var=somethingwasok
var="something with spaces was not ok"
export $(cat ./.env | grep -o -E '^[^#]+' | xargs)

解决方案 2 CON:使用 eval,因此可能被认为不安全。

(只要我手动执行此操作,那么我就知道要导出的文件,因此在这种情况下不介意使用 eval。)

#  output .env   | replace each valid line with export | remove comments
#  || export all          ||    val=something               ||
#  \/                     \/    export val=something        \/
eval $(cat ./.env | sed -E 's/^(\w)/export \1/g'         | grep -o -E '^[^#]+')
© www.soinside.com 2019 - 2024. All rights reserved.