如何创建一个包含变量的配置文件 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
第一个问题是关于创建文件的权限,我通过在 /tmp 中创建文件并将其移动到 /etc 来避免这种情况。因为这行不通。
sudo cat << MONGOD_CONF
第二个也是更重要的是关于如何用值替换de变量
有什么办法可以做到这一点?
谢谢!
如果设置了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,不带参数),因为它可能会打开脚本以进行安全利用。
我正在学习 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变量
有什么办法可以做到这一点?
谢谢!
如果设置了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,不带参数),因为它可能会打开脚本以进行安全利用。