与 xargs 一起导出环境变量时转义 cron 作业定义

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

我正在尝试编写一个脚本,需要通过从

.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 macos cron environment-variables xargs
1个回答
0
投票

假设文件只包含 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
    ,这样它就不会出现在输出中
© www.soinside.com 2019 - 2024. All rights reserved.