Saída do comando Pipe para Yad e também registra a saída em um logfile

3

Precisa ter o processo de comando normalmente uma atualização a ser exibida usando yad e, ao mesmo tempo, registre todos a saída para um determinado arquivo de log configurado. Isso é o que eu tenho

apt-get update | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

O comando acima cria um indicador pulsante para o processo e fecha no final, mas eu preciso que ele registre toda a saída que ele forneceu Eu tentei

apt-get update >>${logfile} 2>&1 | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

mas isso me causa um erro e trava de lá sem diálogo e sem registro apenas congelando. Aqui está o erro

 GLib-CRITICAL **: g_source_remove: assertion 'tag > 0' failed

Ajuda apreciada

    
por Gideon Maina 05.03.2015 / 15:48

1 resposta

4

O erro é porque você está redirecionando toda a saída para $logfile , portanto não há saída para yad processar. A ferramenta que você está procurando é tee :

NAME
       tee - read from standard input and write to standard output and files

SYNOPSIS
       tee [OPTION]... [FILE]...

DESCRIPTION
       Copy standard input to each FILE, and also to standard output.

Então, você poderia fazer:

apt-get update 2>&1 | tee -a ${logfile} |
  yad --width=400 --height=300 \
    --title="Updating debian package list ..." --progress \
    --pulsate --text="Updating debian package list ..." \
    --auto-kill --auto-close \
    --percentage=10 
    
por 05.03.2015 / 16:02