As barras de progresso são inestimáveis para fornecer feedback visual durante processos demorados, oferecendo aos usuários uma indicação clara do progresso da tarefa. Embora o Bash não tenha suporte nativo para barra de progresso, várias ferramentas e bibliotecas externas oferecem soluções robustas. Este guia explora três métodos distintos: aproveitando o comando pv
, utilizando o comando dialog
e empregando a biblioteca ncurses
.
Sumário
- Usando
pv
para Barras de Progresso - Empregando
dialog
para Barras de Progresso - Aproveitando
ncurses
para Barras de Progresso Avançadas
Usando pv
para Barras de Progresso
O comando pv
(pipe viewer) se destaca no monitoramento de fluxos de dados, tornando-o ideal para visualizar o progresso em transferências de arquivos ou operações semelhantes com uso intensivo de dados. Sua simplicidade e eficácia são vantagens significativas.
Instalação:
pv
está prontamente disponível por meio da maioria dos gerenciadores de pacotes de distribuição Linux. Instale usando o comando específico da sua distribuição (por exemplo, sudo apt-get install pv
no Debian/Ubuntu, sudo yum install pv
no CentOS/RHEL, sudo pacman -S pv
no Arch Linux).
Uso:
A sintaxe fundamental é simples:
pv arquivo_entrada > arquivo_saída
Substitua arquivo_entrada
pelo seu arquivo de origem e arquivo_saída
pelo destino desejado. pv
exibirá dinamicamente uma barra de progresso indicando a taxa de transferência e o tempo estimado de conclusão.
Exemplo:
Para copiar um arquivo grande (large_file.zip
) com uma barra de progresso:
pv large_file.zip > copied_large_file.zip
A flexibilidade do pv
se estende além da cópia de arquivos. Ele se integra perfeitamente a comandos que geram fluxos de dados. Por exemplo, para monitorar uma extração de arquivo tar:
tar -xvf large_archive.tar | pv > /dev/null
Aqui, /dev/null
descarta os arquivos extraídos, focando apenas no monitoramento do progresso.
Empregando dialog
para Barras de Progresso
O comando dialog
oferece uma gama mais ampla de caixas de diálogo interativas, incluindo uma barra de progresso versátil. Ele fornece mais controle sobre a aparência da barra em comparação com o pv
e não se limita a fluxos de dados.
Instalação:
Assim como o pv
, o dialog
geralmente está disponível por meio do gerenciador de pacotes da sua distribuição (por exemplo, sudo apt-get install dialog
, sudo yum install dialog
, sudo pacman -S dialog
).
Uso:
A barra de progresso do dialog
usa a opção --gauge
. Você especifica o título, o valor máximo (100%) e o valor atual. O script atualiza iterativamente o valor atual.
Exemplo:
Este script simula um processo e exibe uma barra de progresso:
#!/bin/bash
for i in $(seq 1 100); do
dialog --gauge "Processando..." 10 60 $i
sleep 0.1
done
dialog --infobox "Processo concluído!" 10 30
O script executa um loop 100 vezes, incrementando a barra de progresso. sleep 0.1
adiciona um atraso para demonstração. Torne o script executável usando chmod +x seu_script.sh
.
Aproveitando ncurses
para Barras de Progresso Avançadas
Para personalização e controle máximos, a biblioteca ncurses
fornece flexibilidade incomparável. ncurses
manipula diretamente a saída do terminal, permitindo barras de progresso altamente personalizadas. No entanto, essa abordagem exige um conhecimento mais profundo de programação e das funções ncurses
.
Instalação:
ncurses
geralmente já está pré-instalado. Se não estiver, instale usando o gerenciador de pacotes da sua distribuição (por exemplo, sudo apt-get install libncurses5-dev
, sudo yum install ncurses-devel
, sudo pacman -S ncurses
).
Uso:
Um exemplo completo de ncurses
está além do escopo deste guia devido à sua complexidade. O processo envolve inicializar ncurses
, desenhar a barra usando funções como mvprintw
, atualizá-la iterativamente e, finalmente, limpar ncurses
. Você gerencia manualmente a posição do cursor. Inúmeros recursos online oferecem tutoriais detalhados de ncurses
em C ou outras linguagens; adaptá-los para Bash requer atenção cuidadosa.
Este artigo apresentou três abordagens para criar barras de progresso em Bash. Escolha o método mais adequado às suas necessidades e habilidades. pv
é ideal para tarefas simples; dialog
oferece mais controle; e ncurses
fornece personalização máxima.