Я хочу, чтобы терминал показал некоторую панель процесса на основе времени, как 1% каждые 60 секунд, например.
Создайте индикатор выполнения в подходах списков удара для получения индикатора выполнения, таким образом, я сконцентрируюсь на, Как фальсифицировать часть здесь. Я буду использовать 2 секунды вместо Ваших 60 здесь только для тестирования, корректироваться sleep
оцените своим точным потребностям.
dialog
, whiptail
или zenity
(GUI)for i in {1..100}; do sleep 2; echo $i; done | dialog --gauge 'Running...' 6 60 0
Это for
цикл loops1 по числам одна - сотня и echo
s их каждый 2
секунды, вывод затем передается по каналу к dialog
, который показывает число достижениями по индикатору выполнения. Этот подход работает на whiptail
и zenity --progress
(GUI) также. dialog
вывод похож на это с цветным индикатором выполнения с помощью 'проклятия в текстовом режиме:
pv
for i in {1..100}; do sleep 2; echo; done | pv -pWs100 >/dev/null
Этот цикл очень похож, просто что он печатает только новую строку (=1 байт данных) каждый 2
секунды, pv
затем сказан ожидать точно 100
байты данных и шоу a p
панель rogress. В окне терминала с шириной 80 символов вывод похож на это:
[===============> ] 22%
С простым циклом можно также создать собственный индикатор выполнения. Вот некоторые примеры, которые это просто печатает 100 #
в одной строке, один в 2 секунды:
# number signs only
$ for i in {1..100}; do sleep 2; echo -n \#; done; echo
####################################################################################################
# with progress in % on the right
$ for i in {1..100}; do sleep 2; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "%3d%%\r" "$i"; done; echo
###################################################### 54%
# with progress in % on the left
$ for i in {1..100}; do sleep 2; printf "%3d%% " "$i"; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "\r"; done; echo
39% #######################################
1 взгляд, полиптотон!
Этот индикатор выполнения использует реальные данные в /bin
каталог, который все имеют. Сценарий может быть "dumbed вниз" для удовлетворения поддельным потребностям. Или это может быть расширено для реального применения:
Это использует yad
который является перегруженной версией zenity
GUI по умолчанию используется в терминале. Устанавливать yad
использование:
sudo apt install yad
Вот код:
#!/bin/bash
# NAME: yad-progress-bar
# PATH: /mnt/e/bin
# DESC: Display yad progress bar % with names.
# DATE: Apr 23, 2018. Modified Oct 18, 2019.
Source="/bin"
Title="Processing files for: $Source"
Count=0
AllFiles=$(ls $Source/* | wc -l)
for f in "$Source"/* ; do
echo "#$f" # Display file name in progress bar.
Count=$(( $Count + 1 ))
Percent=$(( Count * 100 / AllFiles ))
echo $Percent # Display percent complete in progress bar.
sleep .025
done | yad --progress --auto-close \
--width=500 --height=300 \
--title="$Title" --enable-log "Current filename" \
--log-expanded --log-height=250 \
--log-on-top --percentage=0 \
--no-cancel --center