2

我正在构建一个自定义的 vnc 包,并希望确保在包安装后脚本中启用了 GDM 的 xdcmp 设置。该gdm.conf文件是一个ini风格的,即:

[section]
var=name

而且我要设置的值在整个配置文件的不同部分中存在名称冲突。

是否有任何方法或工具可以轻松地从 shell 脚本操作 ini 样式的配置文件?

我想在.debpostinst 脚本中解决这个问题。

4

3 回答 3

2

看看 crudini 包。它是为从 shell 操作 ini 文件而设计的

于 2015-01-12T12:06:35.643 回答
1

如果你愿意写一些 Perl,有Config::IniFiles(package libconfig-inifiles-perl)。

于 2010-08-12T10:08:24.073 回答
0

使用 Ex 编辑器的 Shell 命令(更改var键的值):

ex +"%s/^var=\zs.*/new_name/" -scwq config.ini

要支持 INI 部分,请使用以下语法:

ex +':/\[section\]/,$s/var=\zs.*/new_name/' -scwq config.ini

要从 INI 文件中读取值,请参阅:如何在 shell 脚本中获取 INI 值?


这是有助于编辑 INI 值的 shell 函数(不支持部分):

# Set value in the INI file.
# Usage: ini_set [key] [value] [file]
ini_set()
{
  local key="$1"
  local value="$2"
  local file="$3"
  [ -f "$file" ]
  if [ -n "$value" ]; then
    if grep -q "$key" "$file"; then
      echo "INFO: Setting '$key' to '$value' in $(basename "$file")"
      ex +'%s#'"$key"'=\zs.*$#'"$value"'#' -scwq! "$file"
    else
      echo "$key=$value" >> "$file"
    fi
  else
    echo "WARN: Value for '$key' is empty, ignoring."
  fi
}

这是读取 INI 值的 shell 函数(不支持部分):

# Get value from the INI file.
# Usage: ini_get [key] (file)
ini_get()
{
  local key="$1"
  local file="$2"
  [ ! -s "$file" ] && return
  local value="$(grep -om1 "^$key=\S\+" "$file" | head -1 | cut -d= -f2-)"
  echo "Getting '$key' from $(basename "$file"): $value" >&2
  echo $value
}

例如ini_get var

于 2020-07-11T20:48:22.517 回答