我正在寻找一个通用的命令行解决方案,它允许我在配置文件(类似 INI 的格式)内添加或修改配置选项。
大多数 Linux 配置文件使用类似 INI 的格式,带有
#
和 ;
作为注释,并带有 option=value
。
我主要是在寻找需要文件名、选项和值的东西,并且这将更改配置以匹配此。
我想用它来编写一些自动部署脚本。我对使用 Debian 或 Ubuntu 上默认未安装的工具没有问题,只要它们确实存在于默认发行版存储库中(因为如果需要,我可以做一个
apt-get install xxx
)。
示例:
change-config /etc/default/nginx ULIMIT '"-n 4096"'
预期的结果是在 nginx 文件中包含
ULIMIT="-n 4096"
。显然,如果它已经存在并且具有相同的值,则它不应该执行任何操作。如果存在,注释旧行并添加新行就可以了。
请注意,这些配置文件在参数之间可以有空格/制表符,因此如果您有
ULIMIT = "..."
仍然是相同的命令。这就是为什么我一直在寻找比 sed
更好的东西,因为有很多极端情况需要评估。
另外,我不想重新发明轮子,我怀疑我是第一个寻找此类问题解决方案的人。
git config
实际上是一个半通用的INI接口。
❱ git config --file=/etc/default/nginx somegroup.ULIMIT '-n 4096'
❱ cat /etc/default/nginx
[somegroup]
ULIMIT = -n 4096
❱ git config --file=/etc/default/nginx somegroup.ULIMIT
"-n 4096"
但它不支持添加顶级密钥。所有键都必须放置在 INI 样式组中,即“somegroup”。多于。这使得它不适合你的任务,但我想我应该在这里提到它,以便其他人在这里找到方法。
尝试克鲁迪尼。顺便说一句,我认为这个文件是一个 shell 文件而不是一个 ini 文件, 但crudini在这种情况下仍然可以工作:
crudini --set /etc/default/nginx '' ULIMIT '"-n 4096"'
您可以使用
python
执行该操作,如相关问题 使用 ConfigParser Python 更改 ini 文件中的值。
虽然
python
已经安装在几乎每个 Linux 发行版中,所以你不需要额外的工具:-)。