Se você usa o estilo de saída de progresso "ponto", que é algo assim:
500K .......... .......... .......... .......... .......... 2% 496K 91s
então você pode canalizar isso (que está no stderr) para awk
ou similar e apenas imprimir o campo "2%" mostrado na última coluna.
wget ... --progress=dot -q --show-progress 2>&1 |
awk 'NF>2 && $(NF-2) ~ /%/{printf "\r %s",$(NF-2)} END{print "\r "}'
Isso mostra a alteração do valor percentual em uma linha, que é apagada no final.
Para preservar o código de retorno de wget
para um if..else
, você pode solicitar ao bash que os pipelines retornem o código de erro de qualquer comando que falhou (em vez de apenas o comando mais à direita) definindo o script:
set -o pipefail
Alternativamente, você poderia colocar todo o código if..else..fi
inalterado dentro de um bloco e canalizar o stderr no final em um único awk mais informativo como sugerido por cas nos comentários:
( if wget ...
fi
if wget ...
fi
if wget ...
fi
) 2>&1 | awk '
/^Saving to:/ { fn = gensub(/^Saving to: /,"",1) }
NF>2 && $(NF-2) ~ /%/ { printf "\r%s %s",fn,$(NF-2) }
END { gsub(/./," ",fn); print "\r " fn }'
ou para evitar a perda de mensagens de erro importantes no stderr, apenas redirecione o stderr em cada comando do wget para um terceiro descritor de arquivo:
( if wget ... 2>&3
then ... else ... fi
if wget ... 2>&3
then ... else ... fi
if wget ... 2>&3
then ... else ... fi
) 3>&1 | awk ...