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

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

Re: [shell-script] Problema com redirecionamento stderr dpkg-query


From: Sidney Souza
Subject: Re: [shell-script] Problema com redirecionamento stderr dpkg-query
Date: Sat, 3 Jan 2015 12:00:47 -0200

Isso não resolve seu problema?

dpkg -l | grep -q <pacote> && echo instalado || echo não instalado

------------------------------------------------------
http://www.politicos.org.br

2015-01-02 23:12 GMT-02:00 address@hidden [shell-script] <address@hidden>:
 

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]