Eu tenho um postinst
script no meu pacote debian:
#!/bin/bash
oqm-config -g system.hostname
RESULT="$?"
if [ "$RESULT" -eq 1 ]; then
oqm-config -s system.hostname $(hostname).local "."
fi
O objetivo é preencher uma variável de configuração (se ela não existir). Estes comandos funcionam fora do processo de instalação:
$ 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"
}
}
No entanto, quando executado durante a instalação, o código de retorno da inicial oqm-config -g system.hostname
é sempre 0
(ou, mais precisamente, uma string vazia? Não tenho certeza por que esse erro específico de uma string vazia deveria ser 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
Estou esquecendo de algo?
Construindo o arquivo debian no Ubuntu 20.04, tentando instalar em22.04
Arquivo Debian: https://github.com/Epic-Breakfast-Productions/OpenQuarterMaster/releases/tag/manager-station%2Bcaptain-1.0.18
Arquivo que faz o debian (eu sei que é bagunçado, mas funciona [normalmente]): https://github.com/Epic-Breakfast-Productions/OpenQuarterMaster/blob/dev.388-fr-finish-keycloak-infra-component/ software/Capitão da estação/makeInstallers.sh#L107-L117
O problema é este:
Bash realiza expansão de parâmetros, entre outras coisas, em heredocs :
(Aqui
word
está o delimitador para o heredoc,EOT
neste caso.) Isso significa que$?
e$RESULT
são expandidos, e o heredoc grava o resultado da expansão na entrada final. Você está confiando nesse comportamento mais adiante no script .Você pode ver isso no
postinst
arquivo final:Cite o delimitador para evitar que isso aconteça: