【问题标题】:How to create a config file bash script with variables inside如何创建一个包含变量的配置文件bash脚本
【发布时间】:2020-05-05 06:10:30
【问题描述】:

我正在学习 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
  • 第一个问题是关于创建文件的权限,我通过在 /tmp 中创建文件并将其移动到 /etc 来避免。因为这行不通。

        sudo cat << MONGOD_CONF
    
  • 第二个也是更重要的是关于如何用值替换de变量

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

谢谢!

【问题讨论】:

    标签: bash variables config-files


    【解决方案1】:

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

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

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

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

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

    sudo --preserve-env=MONGO_PORT
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多