Com pv
, posso mostrar uma barra de progresso para qualquer coisa que eu passar por ela, por exemplo
echo 1234567890 | pv --size 10 >/dev/null
Ele imprime uma boa barra de progresso que é atualizada sempre que mais dados chegam (o que deve ser muito rápido neste exemplo, é claro, e não muito útil, pois os dados só chegam a /dev/null
).
Posso de alguma forma recuar a saída de pv
? Imagine algo como um script que passa por uma lista de todos os convidados da minha festa, liga para eles no telefone, fala com eles e escreve para o console, se eles querem vir à festa ou não:
echo "The next person on the list is Berta." ;\
echo " Calling Berta..."; \
echo " Berta answered the phone. Talking..."; \
printf " "; \
for word in TALK TALK TALK TALK TALK; do
printf $word; sleep 1;
done | pv --size 20 --width 100 >/dev/null; \
echo " Berta said she would come to the party."
Se você tentar isso, verá que a primeira saída da barra de progresso pv começará após os quatro espaços impressos por printf, mas já a primeira atualização voltará para o início da linha (com CR, provavelmente), resultando no seguinte saída depois:
The next person on the list is Berta.
Calling Berta...
Berta answered the phone. Talking...
20.0 B 0:00:05 [3.53 B/s] [======================================================>] 100% 0:01
Berta said she would come to the party.
Existe alguma maneira de evitar que o pv (ou qualquer outro comando emita um CR) volte para o início da linha? A saída de comandos de longa duração, como o exemplo, seria muito mais legível com recuo.
Uma solução específica para
pv
: use-F
/--format
e inclua quatro espaços em branco à esquerda na string de formato.(fonte:
man 1 pv
)Não vou citar aqui a seção FORMATAÇÃO. Veja
man 1 pv
.Exemplo: