Linux + como criar uma barra de progresso simples em bash [duplicar]

Esta pergunta já tem respostas aqui :

Comentários

Resposta

Isso é bastante simples de fazer apenas no Bash:

#!/bin/bash # progress bar function prog() { local w=80 p=$1; shift # create a string of spaces, then change them to dots printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.}; # print those dots on a fixed-width space plus the percentage etc. printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; } # test loop for x in {1..100} ; do prog "$x" still working... sleep .1 # do some work here done ; echo 

O primeiro argumento para prog é a porcentagem, quaisquer outros são impressos após a barra de progresso. A variável w na função controla a largura da barra. Imprima uma nova linha após terminar, a função não imprime nenhuma.


Outra possibilidade seria usar a ferramenta pv. É destinado a medir a taxa de transferência de um pipeline, mas podemos criar um para ele:

for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null 

Aqui, -pt ativa a barra de progresso e o cronômetro, -s 100 define o tamanho total da saída e tudo o que imprimimos dentro da função conta contra esse tamanho.

Resposta

Em geral, você pode implementar isso substituindo uma linha. Use \r para voltar ao início de a linha sem escrever \n no terminal.

Escreva \n quando terminar de avançar a linha.

Use echo -ne para:

  • não imprimir \n e
  • para reconhecer sequências de escape como \r.

Aqui “uma demonstração:

echo -ne "... (33%)\r" sleep 1 echo -ne "...... (66%)\r" sleep 1 echo -ne ".......... (100%)\r" echo -ne "\n" 

EDITAR: Agora, cURL vem com uma barra de progresso: --progress-bar, não é isso que você quer?

tirado da resposta t o https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script

Descobri que com o Google, primeira resposta, com os seguintes termos de pesquisa: “bash progress bar”

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *