假设我的.env文件包含如下所示的行:
USERNAME=ABC
PASSWORD=PASS
与正常版本不同,前缀为export
,因此我无法直接获取文件。
创建从.env文件加载内容并将其设置为环境变量的shell脚本的最简单方法是什么?
答案 0 :(得分:8)
export
命令这需要适当的shell引用。如果您有foo='bar baz'
之类的行,那么它是合适的,但是如果写出同一行则不行foo=bar baz
set -a # automatically export all variables
source .env
set +a
以下内容读取键/值对,而不期望或尊重shell引用。
while IFS== read -r key value; do
printf -v "$key" %s "$value" && export "$key"
done
答案 1 :(得分:7)
这将导出.env中的所有内容:
export $(xargs <.env)
答案 2 :(得分:1)
发现这个:
while read line; do export $line; done < <(cat input)
更新所以我的工作方式如下:
#!/bin/sh
while read line; do export $line; done < .env
答案 3 :(得分:0)
类似于@voutasaurus 的回答,你也可以使用
$(egrep -v '^#' "$env_path" | xargs)
这里的好处是它会忽略以 # 开头的行,用于注释)
我也在我的 .bashrc
中创建了这个函数。它要么在本地目录中获取 .env 文件,要么移动到 git 根目录(如果在 git repo 中)并尝试在该目录中获取 .env 文件。然后,我可以在 shell 中运行 setenv
来导入环境
setenv() {
local env_path
if { [ -f .env ] && env_path='.env'; } || { env_path=$(git rev-parse --show-toplevel 2>/dev/null)/.env && [ -f "$env_path" ]; }; then
echo "sourcing $env_path"
export $(egrep -v '^#' "$env_path" | xargs)
else
echo "No env file found"
fi
}