【问题标题】:Simple Linux command line command to modify an option in a INI-like config file用于修改类似 INI 的配置文件中的选项的简单 Linux 命令行命令
【发布时间】:2014-05-15 02:34:36
【问题描述】:

我正在寻找一个通用的命令行解决方案,它允许我在配置文件(类似 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 更好的东西,因为有很多极端情况需要评估。

另外,我不想重新发明轮子,我怀疑我是第一个为这类问题寻找解决方案的人。

【问题讨论】:

  • @fedorqui 谢谢,我改进了问题,添加了更多信息。
  • 我不知道是否有可用于 ini 文件解析的实用程序,但您可以在 c++ 中制作自己的实用程序 参考stackoverflow.com/questions/15647299/… 此链接向您展示如何使用 boost 库读取写入 init 文件C++。
  • .ini 文件通常具有非 unix-util-friendly 的布局。但是您所描述的听起来像是典型的 unix env.rc 文件。没有特定的工具可以完全满足您的要求,但它是一个小型 shell 脚本。阅读bashsed 和/或awk。也不打算使用 configure 作为脚本名称,因为该名称是众所周知的脚本,它是 unix 标准安装模式的一部分,即 configure; make; make install 。祝你好运。
  • 如果您想坚持使用 shell,this question 可能会帮助您入门。

标签: linux shell automation configuration-files


【解决方案1】:

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”。更多。这使得它不适合您的任务,但我想我会在这里提及它,以便其他人在这里找到他们的方式。

【讨论】:

  • 此外,git config 似乎不允许在选项名称中使用下划线。
  • 哇!这样可行。进行此类编辑的奇怪工具,但在我的情况下,git 总是安装在目标机器上,所以它非常完美。
【解决方案2】:

试试克鲁迪尼。顺便说一句,我认为这个文件是一个 shell 文件而不是一个 ini 文件, 但是 crudini 在这种情况下仍然可以工作:

crudini --set /etc/default/nginx '' ULIMIT '"-n 4096"'

【讨论】:

  • python 3 支持刚刚合并github.com/pixelb/crudini/pull/57
  • 另一个陷阱:crudini 保留了现有行中等号周围的间距,但在创建新条目时坚持用空格包围 =。其他一些程序无法解析由此产生的 INI 文件。
  • 你需要公开你是这个包的作者。
【解决方案3】:

Augeas / augtool 旨在做到这一点,尽管您需要适合您所追求的文件类型的正确镜头(您也可以编写自己的文件),例如 Nginx lens

如果需要,它也有一个 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2023-03-22
    • 2013-07-24
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多