|
From: | vitalino . victor |
Subject: | Problema com redirecionamento stderr dpkg-query |
Date: | 02 Jan 2015 17:12:13 -0800 |
Olá pessoal!
Fucei na man page do dpkg-query, pesquisei na web alguma solução existente e não encontrei.
Enfim, então aqui vai meu pequeno problema:
Escrevi um script para instalar automaticamente alguns pacotes .deb. A inteligência da coisa
seria o ato do script verificar se os pacotes já estão instalados antes de dar um dpkg -i pacote.deb.
Esta verificação se dá por meio do comando: dpkg-query -l nome_do_pacote
Vejam um fragmento do script:
DPKG="/usr/bin/dpkg-query"
function VerificaSafenet {
$DPKG -l safenetauthenticationclient | grep ^ii > /dev/null 2>&1
echo "$?"
}
Acontece que a mensagem de erro retornada pelo dpkg-query caso o pacote pesquisado
não exista é escrita na tela por um processo filho do dpkg-query.
Ex:
vitalino@PC:~$ dpkg-query -l pacote_inexistente
dpkg-query: não foram encontrados pacotes coincidindo com pacote_inexistente
vitalino@PC:~$
vitalino@PC:~$ dpkg-query -l pacote_inexistente 2> /dev/null
dpkg-query: não foram encontrados pacotes coincidindo com pacote_inexistente
vitalino@PC:~$
vitalino@PC:~$ dpkg-query -l pacote_inexistente > /dev/null 2>&1
dpkg-query: não foram encontrados pacotes coincidindo com pacote_inexistente
vitalino@PC:~$
Alguém pode me dar uma dica sobre como poderia controlar o stderr gerado por processos
filhos? Algo como a syscall dup2() para bash ou algo assim que inibisse o stderr
temporiamente... Pensei em fazer alguma gambiarrinha com tput para inibir a mensagem de erro.
Em último caso, minha solução seria criar "meu próprio dpkg-query":
function VerificaSafenet {
VAR=$(grep -A1 "Package: $1" /var/lib/dpkg/status; if [ $? -ne 0 ]; then echo '-1'; fi)
if [ "$VAR" -ne '-1' ]; then
echo $VAR | grep ' install' > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo 0
else
echo 1
fi
fi
}
[]'s
Vitalino Victor
[Prev in Thread] | Current Thread | [Next in Thread] |