whiptail
est préinstallé sur Ubuntu et de nombreuses autres distributions, et affichera des éléments de progression en plein écran (mais toujours basés sur les terminaux).
dialog
est un surensemble de whiptail
, donc cet exemple fonctionnera aussi bien avec les deux. Il fournit des éléments d'interface utilisateur plus avancés, il peut donc être utile si vous recherchez une interaction utilisateur telle que des sélecteurs de fichiers et des formulaires, mais il a l'inconvénient de ne pas être préinstallé sur de nombreux systèmes.
for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
Notez que la sortie du script est interprétée comme un pourcentage, vous devrez donc peut-être ajuster votre sortie en conséquence.
Whiptail et Dialog vous permettent également de modifier le texte au moment de l'exécution via une syntaxe plutôt cryptique:
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
affiche la progression d'un fichier ou d'un flux en cours d'acheminement. Il ne peut cependant pas (facilement?) Être utilisé pour montrer la progression d'une opération personnalisée telle qu'une boucle. Il est spécialement conçu pour les flux.
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
Quelques exemples concrets où cela pv
est utile:
# 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
Je ne connais aucune commande qui donne des barres de progression d'une ligne dans le style de pv
ou wget
, mais il existe de nombreux scripts Bash / Perl / sed simples qui ajouteront cette fonctionnalité, comme d'autres l'ont partagé ici.