shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problema com redirecionamento stderr dpkg-query


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]