Как я создаю поддельную панель процесса?

Я хочу, чтобы терминал показал некоторую панель процесса на основе времени, как 1% каждые 60 секунд, например.

4
задан 24 April 2018 в 09:10

2 ответа

Создайте индикатор выполнения в подходах списков удара для получения индикатора выполнения, таким образом, я сконцентрируюсь на, Как фальсифицировать часть здесь. Я буду использовать 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 по числам одна - сотня и echos их каждый 2 секунды, вывод затем передается по каналу к dialog, который показывает число достижениями по индикатору выполнения. Этот подход работает на whiptail и zenity --progress (GUI) также. dialogвывод похож на это с цветным индикатором выполнения с помощью 'проклятия в текстовом режиме:

dialog progress bar

Используя 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 взгляд, полиптотон!

6
ответ дан 1 December 2019 в 09:02

Поддельный индикатор выполнения

Этот индикатор выполнения использует реальные данные в /bin каталог, который все имеют. Сценарий может быть "dumbed вниз" для удовлетворения поддельным потребностям. Или это может быть расширено для реального применения:

yad-progress-bar.gif

Это использует 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
3
ответ дан 1 December 2019 в 09:02

Другие вопросы по тегам:

Похожие вопросы: