Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: frank_w em 29 de Junho de 2008, 21:47
-
Boa Noite,
Eu estou com um problema em meu programa, onde tento instalar programas por meio de cache local. Até ai tudo bem, o problema acontece quando eu direciono a saida de erros para um arquivo de log, para poder analizar depois. Exemplo:
apt-get install -y force-yes audacious audacious-plugins 2>> /tmp/log_de_erro.log | zenity --progress --text="Instalando player Audacious" --pulsate
ao final da instalação, quando o programa analisa o conteudo do possivel log, ele sempre encontra o mesmo erro: "dpkg-preconfigure: Impossivel reabrir stdin:". O estranho é que quando eu tiro a parte de redirecionar o erro ele nao da erro nenhum, ou pelo menos eu nao vejo erro nenhum, e o programa esta la no menu funcionando.
Ja tentei rodar o comando em terminal sem o zenity:
apt-get install -y force-yes audacious audacious-plugins 2>> /tmp/log_de_erro.log
E aparentemente ele instala normal e mostra "Now deferred place sei-lah oque...", porem quando digito:
cat /tmp/log_de_erro.log
ele mostra que teve problemas:
dpkg-preconfigure: Impossivel reabrir stdin:
Se alguem souber oque pode estar acontecendo, por favor post aqui. Ficarei Grato.
-
Olá frank_w,
Estive olhando o fonte do dpkg-preconfigure, que é um script perl. Ao que eu vi ele suporta vários frontend's para receber as informações de entrada, e quando você roda via um script ele tenta abrir o STDIN para receber entradas via console, mas não consegue (talvezpor que no script ele esteja rodando em modo batch e não modo interativo, não posso afirmar ao certo). Não sei se você tentou executar o comando sem o redirecionamento da saída, mas acredito que mesmo que o dpkg-preconfigure não lhe faça nenhuma pergunta, ele tentará abrir um frontend.
Vou dar uma pesquisada quando eu estiver no Linux (estou no Window$ agora) e qualquer novidade eu te informo.
Até...
-
Obrigado pela ajuda!
Pelo jeito vou ter que achar outra maneira de verificar se os pacotes foram instalados corretamente. Ou criar uma espécie de filtro que ignore a linha do "stdin" do arquivo de log.
a proposito voce saberia me dizer se há uma meneira de checar a instalação dos pacotes? Será que há como usar a lista de pacotes do apt?
Valeu
-
Frank_w,
Você pode saber se um pacote está instalado através do comando:
dpkg -s nome_do_pacote
Quando o pacote não existe, o comando acima não escreve nada na saída padrão (mas deixa uma mensagem de erro na saída padrão de erros). Sendo assim, você pode escrever um script contendo o seguinte fragmento de código
ESTADO=`dpkg -s nome_do_pacote 2> /dev/null`
if [ ! -z "$ESTADO" ]; then
echo "O pacote está instalado!"
fi
Nota: o redirecionamento 2> permite-nos desviar a saída padrão de erro para o dispositivo null.
-
Muito Obrigado!
Acho que agora vou conseguir terminar o meu script. Se ficar bom eu disponibilizo aqui no forum.
Mais uma vez obrigado pela atenção.
-
Tenha cuidado com as dependencias, alguns arquivos depende de outros antes de instala.