我正在构建vnc的自定义程序包,并希望确保在程序包安装后脚本中启用GDM的xdcmp设置。 gdm.conf文件是一个ini样式文件,即:
[section]
var=name
我想要设置的值在整个配置文件的不同部分都有名称冲突。是否有任何工具可以轻松地从shell脚本中操作ini样式配置文件?我想在.deb postinst脚本中对此进行排序。
答案 0 :(得分:1)
如果你愿意写一些Perl,那就是Config::IniFiles
(包libconfig-inifiles-perl
)。
答案 1 :(得分:1)
看一下crudini包。它专为从shell
操作ini文件而设计答案 2 :(得分: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文件中读取值的信息,请参见:How do I grab an INI value within a shell script?
以下是shell函数,可用于编辑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
}
这里是shell函数,用于读取INI值(不支持部分):
# 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
。