postinst
我的 debian 包中有一个脚本:
#!/bin/bash
oqm-config -g system.hostname
RESULT="$?"
if [ "$RESULT" -eq 1 ]; then
oqm-config -s system.hostname $(hostname).local "."
fi
这是为了填充配置变量(如果它不存在)。这些命令在安装过程之外起作用:
$ sudo ./test.sh
+ oqm-config -g system.hostname
ERROR: Config key not found: system.hostname
+ RESULT=1
+ [ 1 -eq 1 ]
+ hostname
+ oqm-config -s system.hostname oqm-demo.local .
{
"system": {
"hostname": "oqm-demo.local"
},
"captain": {},
"snapshots": {
"location": "/data/oqm-snapshots/",
"numToKeep": 5,
"frequency": "weekly"
}
}
但是,在安装期间执行时,初始的返回代码oqm-config -g system.hostname
始终是0
(或更准确地说是空字符串?不确定为什么空字符串中的这个特定错误应该是0
?):
Setting up open+quarter+master-manager-station+captain (1.0.18) ...
+ oqm-config -g system.hostname
ERROR: Config key not found: system.hostname
+ RESULT=0
+ '[' '' -eq 1 ']'
/var/lib/dpkg/info/open+quarter+master-manager-station+captain.postinst: line 5: [: : integer exp
ression expected
我错过了什么吗?
在 Ubuntu 20.04 上构建 debian 文件,尝试安装22.04
制作 debian 的文件(我知道它很乱,但通常有效):https://github.com/Epic-Breakfast-Productions/OpenQuarterMaster/blob/dev.388-fr-finish-keycloak-infra-component/软件/Station-Captain/makeInstallers.sh#L107-L117
问题是这样的:
Bash 在此处文档中执行参数扩展等操作:
(在本例中,这里
word
是定界符的分隔符EOT
。)这意味着 和$?
被$RESULT
扩展,并且定界符将扩展的结果写入最终输入。您将依赖于脚本中的这种行为。您可以在最终
postinst
文件中看到这一点:引用分隔符以防止这种情况发生: