Когда требуется подождать фиксированное количество времени во время выполнения скрипта, лучше создать индикатор выполнения, чтобы информировать пользователя о том, что нужно подождать некоторое время. Индикатор выполнения можно создать с помощью простого сценария Bash или некоторых встроенных команд Linux, таких как «cv», «dialog» и т. д. В этой статье показаны методы создания индикаторов выполнения с использованием сценария Bash.
В этой части стать показаны различные способы реализации индикатора выполнения в Bash.
Создайте файл Bash со следующим сценарием, который отображает индикатор выполнения с использованием символа «#» и команды sleep. Команда printf используется здесь для отображения индикатора выполнения. Индикатор выполнения разделен на четыре части. 25% отображаются через 1 секунду. 50% отображается через 3 секунды. 75% отображается через 2 секунды. 100% отображается через 1 секунду.
#!/bin/bash printf "\nWait to complete the task...\n\n" #Подождать 1 секунду sleep 1 #Распечатать первую часть индикатора выполнения printf "[##### ] 25%% completed.\r" #Wait for 3 seconds sleep 3 #Распечатать вторую часть индикатора выполнения printf "[########## ] 50%% completed.\r" #Подождать 2 секунды sleep 2 #Распечатать третью часть индикатора выполнения printf "[############### ] 75%% completed.\r" #Подождать 1 секунду sleep 1 #Распечатать последнюю часть индикатора выполнения printf "[####################] 100%% completed.\r" printf "\n\nTask completed.\n\n"
Следующий вывод появляется после 1 секунды выполнения скрипта:
Следующий вывод появляется после 7 секунд выполнения скрипта:
Полная форма команды pv — pipe viewer «просмотр каналов». Он используется для отслеживания хода данных, которые передаются через канал, и отображения индикатора выполнения в зависимости от размера данных. Эта команда по умолчанию не установлена в системе. Запустите следующую команду, чтобы установить команду «pv», прежде чем практиковаться в сценарии этого примера:
$ sudo apt install pv
Вы должны выбрать файл большого размера, который копируется из одного места в другое. Создайте файл Bash со следующим скриптом, который копирует файл «test.txt» из текущего местоположения в местоположение «/home/andreyex/temp/». Команда «pv» используется здесь для отображения индикатора выполнения. Индикатор выполнения отображается в зависимости от размера файла «test.txt».
#!/bin/bash echo "Copying file from one location to another location." #Подождать 2 секунды sleep 2 #Скопировать файл в папку назначения cat test.txt | pv -s $(stat -c%s test.txt) > /home/andreyex/temp/test.txt echo "File has been copied."
После завершения выполнения скрипта отображается следующий вывод:
Другой способ реализации индикатора выполнения в Bash — использование команды dialog. Эту команду можно использовать для отображения хорошо выглядящего индикатора выполнения в терминале. С помощью этого индикатора выполнения можно отображать многие типы виджетов. Задачей индикатора выполнения, отображаемой этой командой, можно управлять с помощью сценария Bash. Этот индикатор выполнения не установлен в системе по умолчанию. Выполните следующую команду, чтобы установить этот индикатор выполнения в системе:
$ sudo apt install dialog
Создайте файл Bash со следующим сценарием, который отображает индикатор выполнения с помощью команды «dialog». Задача копирования файла «/etc/passwd» в папку «/home/andreyex/tempdir» отображается с помощью индикатора выполнения. Индикатор выполнения разделен на пять частей; каждая часть отображается через 2 секунды. Параметр –title используется в команде «dialog» для отображения заголовка индикатора выполнения. Параметр –gauge используется в команде «диалог» для отображения индикатора выполнения высотой 10 строк и шириной 100 символов. Над индикатором выполнения отображается сообщение «Waiting to complete the task».
#!/bin/bash #Инициализировать счетчик current_pos=0 ( #Определить бесконечный цикл for((;;)) do cat <<EOF delimiter $current_pos #Показать текущее значение счетчика cp /etc/passwd to /home/andreyex/tempdir ( $current_pos%): delimiter EOF #Увеличить счетчик на 20 (( current_pos+=20 )) #Завершить цикл, когда значение счетчика больше 100 [ $current_pos -gt 100 ] && break # Подождите 2 секунды после каждого шага приращения sleep 2 done ) | dialog --title "Copying file..." --gauge "Waiting to complete the task" 10 100 0
Следующий вывод появляется после 6 секунд выполнения скрипта:
В этой стать показаны различные способы разработки индикатора выполнения с использованием сценария Bash, чтобы помочь пользователям Bash использовать индикатор выполнения в своей программе.