whiptail
vem pré-instalado no Ubuntu e em muitas outras distros, e mostrará tela cheia (mas ainda assim terminal- base) elementos de progresso.
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 interação do usuário, como seletores 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, talvez seja necessário ajustar a saída de acordo.
O Whiptail e o Dialog também permitem que você modifique o texto em tempo de execução por meio de uma sintaxe bastante críptica:
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
pv
mostra o progresso de um arquivo ou fluxo sendo canalizado através dele. No entanto, não pode ser (facilmente?) Usado para mostrar o progresso de uma operação personalizada, como um loop. Ele é 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 em que pv
é útil:
# 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 forneça barras de progresso de uma linha no estilo pv
ou wget
, mas há vários scripts simples de Bash / Perl / sed que adicionam essa funcionalidade, como os outros. compartilhei aqui.