如何创建一个包含变量的配置文件 bash 脚本

How to create a config file bash script with variables inside

我正在学习 BASH 并尝试创建一个脚本来生成我想在其中使用变量的配置文件。 但是当然,就像这是一个文本文件,变量 ${MONGO_PORT} 并没有被我需要的值替换。

(
cat << MONGOD_CONF
# /etc/mongod.conf

systemLog:
    destination: file
    path: /datos/log/mongod.log
    logAppend: true

storage:
    dbPath: /datos/db
    engine: wiredTiger

net:
    port: ${MONGO_PORT}

security:
    authorization: enabled    
MONGOD_CONF
) > /etc/mongod.conf

有什么办法可以做到这一点?

谢谢!

如果设置了MONGO_PART,here-document将进行参数扩展,您将在文件中获得参数值。

使用tee代替cat,可以自己打开输出文件:

sudo tee /etc/mongod.conf > /dev/null << MONGOD_CONF
    ...
MONGOD_CONF

当您使用 sudo ... 执行脚本时,脚本将在新环境中执行。这样做是为了安全 - 防止注入可能改变脚本行为的环境变量。

解决问题的两个选项:以普通用户身份展开配置文件,并以sudu执行保存,或者使用其中一个选项允许将环境变量传递给sudo 通话

第一种选择是更改脚本以作为当前用户(可以访问所有参数)扩展配置文件,并使用 sudo 仅将文件放入 /etc

(sudo cat > /etc/mongod.conf) <<MONGOD_CONF
...
MONGOD_CONF

替代选项是使用 --preserve-env 选项(可以将多个变量指定为逗号分隔列表)。

sudo --preserve-env=MONGO_PORT

强烈建议避免 -E(--preserve-env,不带参数),因为它可能会打开脚本以进行安全利用。