whiptail
ist auf Ubuntu und vielen anderen Distributionen vorinstalliert und zeigt Fortschrittselemente im Vollbildmodus (aber immer noch terminalbasiert) an.
dialog
ist eine Obermenge von whiptail
, daher funktioniert dieses Beispiel mit beiden gleich gut. Es bietet fortgeschrittenere UI-Elemente, so dass es nützlich sein kann, wenn Sie nach Benutzerinteraktionen wie Dateiauswahl und Formularen suchen, aber es hat den Nachteil, dass es auf vielen Systemen nicht vorinstalliert ist.
for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
Beachten Sie, dass die Skriptausgabe als Prozentsatz interpretiert wird, sodass Sie möglicherweise Ihre Ausgabe entsprechend anpassen müssen.
Mit Whiptail und Dialog können Sie den Text auch zur Laufzeit über eine eher kryptische Syntax ändern:
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
Zeigt den Fortschritt einer Datei oder eines Streams an, der durch die Datei geleitet wird. Es kann jedoch nicht (einfach?) Verwendet werden, um den Fortschritt einer benutzerdefinierten Operation wie einer Schleife anzuzeigen. Es wurde speziell für Streams entwickelt.
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
Einige Beispiele aus der pv
Praxis, die sich als nützlich erweisen:
# 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
Ich kenne keine Befehle, die einzeilige Fortschrittsbalken im Stil von pv
oder enthalten wget
, aber es gibt viele einfache Bash / Perl / sed-Skripte, die diese Funktionalität hinzufügen, wie andere hier geteilt haben.