whiptail поставляється з попередньо встановленою програмою Ubuntu та багатьма іншими дистрибутивами та показуватиме елементи прогресу на весь екран (але все ще на терміналі).
dialogє супернабір whiptail, тому цей приклад буде однаково добре працювати з обома. Він надає більш вдосконалені елементи інтерфейсу, тому може стати в нагоді, якщо ви шукаєте взаємодію з користувачами, такими як інструменти для вибору файлів та форм, але це недолік, якщо він не встановлюється заздалегідь у багатьох системах.


for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
Зверніть увагу, що вихід сценарію інтерпретується у відсотках, тому вам, можливо, доведеться відповідним чином відрегулювати результат.
Whiptail і діалог також дозволяють змінювати текст під час виконання за допомогою досить криптованого синтаксису:
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показує хід файлу або потоку, який проходить через нього. Однак його не можна (легко?) Використовувати для показу прогресу користувацької операції, такої як цикл. Він створений спеціально для потоків.
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
Деякі приклади реального світу, де це pvстане в нагоді:
# 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
Я не знаю жодної команди, яка дає однорядкові смуги прогресу в стилі pvабо wget, але є безліч простих сценаріїв Bash / Perl / sed, які додадуть цю функціональність, як тут поділилися інші.