Как мне создать фальшивую панель процессов?
Я хочу, чтобы терминал отображал какую-то панель процессов в зависимости от времени, например, 1% каждые 60 секунд.
3 ответа
Создать индикатор прогресса в подходах bash списков, чтобы получить индикатор выполнения, поэтому я сконцентрируюсь на том, как подделать часть здесь. Я буду использовать 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
петли петли 1 над числами от одного до ста echo
с ними каждый 2
секунд, выход затем передается по dialog
, который показывает число как прогресс на индикаторе выполнения. Этот подход работает для whiptail
а также zenity --progress
(GUI), а также. dialog
вывод выглядит так с цветной прогресс-бар с использованием 'curses' в текстовом режиме:
С помощью pv
for i in {1..100}; do sleep 2; echo; done | pv -pWs100 >/dev/null
Этот цикл очень похож, просто он печатает только новую строку (=1 байт данных) каждый 2
секунды, pv
Затем говорят ожидать точно 100
байты данных и показывают p
Рогресс-бар. В окне терминала шириной 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 Смотри, Полиптотон!
Fake Progress Bar
Вот мой фальшивый индикатор выполнения:
Оно использует yad
которая является суперзаряженной версией zenity
графический интерфейс по умолчанию, используемый в терминале. Установить yad
использовать:
sudo apt install yad
Вот код, который вы можете скопировать и вставить, потому что у всех есть /usr/bin
каталог:
#!/bin/bash
# NAME: yad-progress-bar
# PATH: $HOME/bin
# DESC: Display yad progress bar % with names.
# DATE: Apr 23, 2018.
title="AU question: https://Ask-ubuntu.ru/q/1027543/307523"
Percent=0
for f in /usr/bin/* ; do # 1000+ files so this is fake loop
echo "#$f" # Display file name in progress bar.
echo $Percent # Percent complete
Percent=$(( $Percent + 1 ))
[[ $Percent -gt 100 ]] && break
sleep .05 # Change to 2 seconds for OP's fake.
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
exit 0
Процент увеличивается на 1 в каждой итерации for
петля. Он должен рассчитывать проценты для 1000+ файлов, но останавливается после 100 файлов.
Взяв комментарий от @wjandream и просто используя for i в {1..100}, третий вариант сводится к:
для ((я=0; я<=100; я++)); { эхо "$i"; echo "# Загрузка $i%";sleep 0.2; } | yad --progress --title="Загрузка..." --height=90 --width=400 --center --text="Подождите..." --auto-close --no-buttons -- нет выхода