我正在寻找一个通用的命令行解决方案,它允许我在配置文件中添加或修改配置选项(像ini一样的格式)。
大多数linux配置文件使用类似INI的格式,#和;作为评论和选项=值。
主要是我正在寻找带有文件名,选项和值的东西,这会改变配置以匹配它。
我想用它来编写一些自动部署脚本。我没有使用默认安装在Debian或Ubuntu上的工具,只要它们存在于默认的分发存储库中(因为我可以执行apt-get install xxx,如果需要的话)。
示例:change-config /etc/default/nginx ULIMIT '"-n 4096"'
预期的结果是在nginx文件中有ULIMIT="-n 4096"
。显然,如果它已经存在且具有相同的值,它就什么都不做。如果它存在,则评论旧行可以正常并添加新行。
注意,这些配置文件可以在参数之间包含空格/制表符,因此如果ULIMIT = "..."
仍然是相同的命令。这就是为什么我正在寻找比sed更好的东西,因为有很多角落要评估。
另外,我不想重新发明轮子,我怀疑我是第一个寻找解决这类问题的人。
答案 0 :(得分:11)
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。"以上。这使得它不适合你的任务,但我想我在这里提到它,以便其他人在这里找到他们的方式。
答案 1 :(得分:5)
尝试crudini。 BTW我认为这个文件是shell文件而不是ini文件, 但在这种情况下,crudini仍然可以工作:
crudini --set /etc/default/nginx '' ULIMIT '"-n 4096"'
答案 2 :(得分:2)
Augeas / augtool
的目的是做到这一点,尽管您需要使用正确的镜头来处理您所追求的文件类型(您也可以编写自己的文件),例如Nginx lens。< / p>
如果需要,它还有一个API。