whiptail
viene preinstallato su Ubuntu e su molte altre distribuzioni e mostrerà elementi di progresso a schermo intero (ma ancora basati su terminali).
dialog
è un superset di whiptail
, quindi questo esempio funzionerà ugualmente bene con entrambi. Fornisce elementi dell'interfaccia utente più avanzati, quindi può tornare utile se stai cercando l'interazione dell'utente come selettori di file e moduli, ma ha lo svantaggio di non essere preinstallato su molti sistemi.
for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
Si noti che l'output dello script viene interpretato come percentuale, quindi potrebbe essere necessario modificare l'output di conseguenza.
Whiptail e Dialog consentono anche di modificare il testo in fase di esecuzione tramite una sintassi piuttosto criptica:
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 l'avanzamento di un file o flusso che viene reindirizzato attraverso di esso. Non può tuttavia essere (facilmente?) Utilizzato per mostrare l'avanzamento di un'operazione personalizzata come un loop. È progettato specificamente per i flussi.
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
Alcuni esempi del mondo reale in cui pv
è 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
Non conosco alcun comando che fornisca barre di avanzamento di una riga nello stile di pv
o wget
, ma ci sono molti semplici script Bash / Perl / sed che aggiungeranno tale funzionalità, come altri hanno condiviso qui.