如何从shell脚本修改INI文件?
我正在构建一个vnc的定制包,并希望确保在包安装后脚本中启用GDM的xdcmp设置。如何从shell脚本修改INI文件?,shell,debian,packaging,ini,Shell,Debian,Packaging,Ini,我正在构建一个vnc的定制包,并希望确保在包安装后脚本中启用GDM的xdcmp设置。gdm.conf文件是ini样式的文件,即: [section] var=name 我要设置的值在整个配置文件的不同部分有名称冲突 是否有任何方法或工具允许从shell脚本轻松操纵ini样式的配置文件 我想在.debpostinst脚本中对此进行分类。如果您想编写一些Perl,可以使用配置::ini文件(packagelibconfig ini文件Perl)。看看crudini包。它设计用于使用Ex编辑器从sh
gdm.conf
文件是ini样式的文件,即:
[section]
var=name
我要设置的值在整个配置文件的不同部分有名称冲突
是否有任何方法或工具允许从shell脚本轻松操纵ini样式的配置文件
我想在
.deb
postinst脚本中对此进行分类。如果您想编写一些Perl,可以使用配置::ini文件
(packagelibconfig ini文件Perl
)。看看crudini包。它设计用于使用Ex编辑器从shell命令操作ini文件(更改var
键的值):
要支持INI部分,请使用以下语法:
ex +':/\[section\]/,$s/var=\zs.*/new_name/' -scwq config.ini
有关从INI文件读取值的信息,请参见:
以下是有助于编辑INI值(不支持部分)的shell函数: 以下是用于读取INI值的shell函数(不支持部分):
例如,
ini\u get var
我得出结论,perl是最简单的解决方案。Debian打包指南似乎并不禁止perl用于配置脚本,尽管我怀疑仅仅为了安装软件包而添加对perl的依赖将意味着这将永远不会向上游发展。@stsquad:perl本身不是问题,它被正式批准用于Debian软件包脚本(例如,您可以看到,perl base
是必不可少的,而debconf
提供了perl模块)。必须预先依赖libconfig文件perl
可能是一个更大的障碍。
ex +':/\[section\]/,$s/var=\zs.*/new_name/' -scwq config.ini
# 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
}
# 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
}