我正在尝试编写一个脚本,需要通过从
.env
文件中读取值和名称来导出一些环境变量。
这是
.env
文件的示例:
INSTANCE_PROFILE_ARN=arn:aws:iam::1234567890:instance-profile/development-west
SERVICE_NAME=reports
PIPELINE_CRON='0 0 0/6 * * ?'
在
script.sh
文件中,我使用以下代码导出变量:
if [ -f "./.env" ]; then
echo "** Using data from .env file **"
export $(cat .env | xargs)
fi;
但我收到此错误:
➜ ./script.sh
./script.sh: line 5: export: `0': not a valid identifier
./script.sh: line 5: export: `0/6': not a valid identifier
./script.sh: line 5: export: `README.md': not a valid identifier
./script.sh: line 5: export: `demo.py': not a valid identifier
./script.sh: line 5: export: `script.sh': not a valid identifier
./script.sh: line 5: export: `?': not a valid identifier
PIPELINE_CRON=0
我一直在测试在其他帖子中找到的一些解决方案,但不起作用。
使用
-d '\n'
选项将不起作用,因为我在 macOS 上工作:
➜ xargs -d
xargs: illegal option -- d
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]]
[-J replstr] [-L number] [-n number [-x]] [-P maxprocs]
[-s size] [utility [argument ...]]
假设文件只包含 bash 变量赋值:
envfile=.env
if [ -f "$envfile" ]; then
. "$envfile"
export $(
env -i bash -c ':; compgen -v; . "$envfile"; compgen -v' |
sort | uniq -u
)
fi
env -i
在空环境下调用命令(bash)compgen -v
列出获取文件之前和之后的所有已定义变量sort | uniq u
给出了差异 - 即。新变量:
空命令是让bash设置PIPESTATUS
,这样它就不会出现在输出中