假设我有.env文件包含如下行:
USERNAME=ABC
PASSWORD=PASS
Run Code Online (Sandbox Code Playgroud)
与普通的export
前缀不同,所以我无法直接获取文件.
创建从.env文件加载内容并将其设置为环境变量的shell脚本的最简单方法是什么?
Cha*_*ffy 17
export
命令这需要适当的shell引用.因此,如果你有一条像这样的线foo='bar baz'
,那就合适了,但是如果要写同一条线则不行foo=bar baz
set -a # automatically export all variables
source .env
set +a
Run Code Online (Sandbox Code Playgroud)
下面读取键/值对,并不期望或尊重shell引用.
while IFS== read -r key value; do
printf -v "$key" %s "$value" && export "$key"
done
Run Code Online (Sandbox Code Playgroud)
这个脚本非常适合我(2023 年 6 月)。
#!/bin/sh
# Load environment variables from .env file
[ ! -f .env ] || export $(grep -v '^#' .env | xargs)
Run Code Online (Sandbox Code Playgroud)
.env 文件示例:
# Database settings
DB_HOST=localhost
DB_PORT=5432
DB_NAME=mydatabase
DB_USER=myuser
DB_PASSWORD=mypassword
# API keys
API_KEY=abc123
SECRET_KEY=def456
# Other settings
DEBUG_MODE=true
LOG_LEVEL=info
Run Code Online (Sandbox Code Playgroud)
这将导出.env中的所有内容:
export $(xargs <.env)
Run Code Online (Sandbox Code Playgroud)
这就是我使用的:
load_dotenv(){
# https://stackoverflow.com/a/66118031/134904
# Note: you might need to replace "\s" with "[[:space:]]"
source <("$1" | sed -e '/^#/d;/^\s*$/d' -e "s/'/'\\\''/g" -e "s/=\(.*\)/='\1'/g")
}
set -a
[ -f "test.env" ] && load_dotenv "test.env"
set +a
Run Code Online (Sandbox Code Playgroud)
如果您正在使用direnv
,请知道它已经支持.env
开箱即用的文件:)
将其添加到您的.envrc
:
[ -f "test.env" ] && dotenv "test.env"
Run Code Online (Sandbox Code Playgroud)
direnv 的 stdlib 文档:https://direnv.net/man/direnv-stdlib.1.html
归档时间: |
|
查看次数: |
6954 次 |
最近记录: |