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 и Dialog также позволяют вам изменять текст во время выполнения с помощью довольно загадочного синтаксиса:
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, которые добавят эту функциональность, как и другие здесь поделились.