whiptail vem pré-instalado no Ubuntu e em muitas outras distribuições e mostra elementos de progresso em tela cheia (mas ainda com base em terminal).
dialogé um superconjunto de whiptail, portanto, este exemplo funcionará igualmente bem com ambos. Ele fornece elementos de interface do usuário mais avançados, por isso pode ser útil se você estiver procurando por interação do usuário, como selecionadores de arquivos e formulários, mas tem a desvantagem de não vir pré-instalado em muitos sistemas.


for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
Observe que a saída do script é interpretada como uma porcentagem; portanto, você pode precisar ajustar sua saída de acordo.
Whiptail e Dialog também permitem modificar o texto em tempo de execução por meio de uma sintaxe bastante enigmática:
phases=(
'Locating Jebediah Kerman...'
'Motivating Kerbals...'
'Treating Kessler Syndrome...'
'Recruiting Kerbals...'
)
for i in $(seq 1 100); do
sleep 0.1
if [ $i -eq 100 ]; then
echo -e "XXX\n100\nDone!\nXXX"
elif [ $(($i % 25)) -eq 0 ]; then
let "phase = $i / 25"
echo -e "XXX\n$i\n${phases[phase]}\nXXX"
else
echo $i
fi
done | whiptail --title 'Kerbal Space Program' --gauge "${phases[0]}" 6 60 0
pvmostra o progresso de um arquivo ou fluxo sendo canalizado por ele. No entanto, não pode ser (facilmente?) Usado para mostrar o progresso de uma operação personalizada, como um loop. Ele foi projetado especificamente para fluxos.
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
Alguns exemplos do mundo real são pvúteis:
# progress while importing a DB dump
pv mybigfile.sql | mysql -uroot -p dbname
# importing straight from a remote server
ssh user@server 'cat mybigfile.sql.gz' | pv | gzip -cd | mysql -uroot -p dbname
# taking a snapshot of a btrfs partition
btrfs send /snapshots/$date | pv | btrfs receive /mnt/backup/root
Não conheço nenhum comando que ofereça barras de progresso de uma linha no estilo de pvou wget, mas existem muitos scripts Bash / Perl / sed simples que adicionarão essa funcionalidade, como outros compartilhados aqui.