Как создать фальшивую панель процессов?

Soundconverter, легкое простое приложение для преобразования аудиофайлов и может также принимать видео в качестве входных данных. [F1]

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

6 ответов

Создайте индикатор выполнения в подходах bash, чтобы получить индикатор выполнения, поэтому я сосредоточусь на том, как здесь подделать часть.

Используя dialog, whiptail или zenity (GUI) [!],

, я использую 2 секунды вместо ваших 60 здесь для тестирования. d3]
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» в текстовом режиме:

Создает индикатор выполнения в bash

Использование 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

6
ответ дан 22 May 2018 в 11:17

Создайте индикатор выполнения в подходах bash, чтобы получить индикатор выполнения, поэтому я сосредоточусь на том, как здесь подделать часть.

Используя dialog, whiptail или zenity (GUI) [!],

, я использую 2 секунды вместо ваших 60 здесь для тестирования. d3] 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» в текстовом режиме:

Создает индикатор выполнения в bash

Использование 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

6
ответ дан 17 July 2018 в 16:18

Создайте индикатор выполнения в подходах bash, чтобы получить индикатор выполнения, поэтому я сосредоточусь на том, как здесь подделать часть.

Используя dialog, whiptail или zenity (GUI) [!],

, я использую 2 секунды вместо ваших 60 здесь для тестирования. d3] 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» в текстовом режиме:

Создает индикатор выполнения в bash

Использование 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

6
ответ дан 23 July 2018 в 17:12

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://askubuntu.com/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 файлов.

3
ответ дан 22 May 2018 в 11:17
  • 1
    Почему вы перебираете / usr / bin? Почему бы просто не использовать for i in {1..100} или i=100; while ((--i))? – wjandrea 24 April 2018 в 03:30
  • 2
    Две заметки: 1) Вместо синтаксиса подстановки команд $() вместо backticks, которые устарели. 2) Было бы проще поместить опции yad в массив. – wjandrea 24 April 2018 в 03:34
  • 3
    @wjandrea I зациклился на /usr/bin, чтобы отобразить некоторый текст на индикаторе прогресса. Я знаю, что backticks нахмурились в эти дни, но это был старый код, который я лежал, вокруг которого я копировал, не выполняя много работы. Я удалил их. Параметры yad в массиве очищают строку done, но я думаю, что этот метод иллюстрирует новичкам, что происходит с трубой, yad со всеми деталями в одном месте. – WinEunuuchs2Unix 24 April 2018 в 03:42
  • 4
    +1 для ... приятного ответа. ; D OP попросил терминал показать какую-то панель процесса, поэтому я сосредоточился на решениях, отличных от GUI, но это совсем не вредит полезности вашего подхода. Спасибо, что поделились знаниями! – dessert 24 April 2018 в 09:50

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://askubuntu.com/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 файлов.

3
ответ дан 17 July 2018 в 16:18

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://askubuntu.com/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 файлов.

3
ответ дан 23 July 2018 в 17:12
  • 1
    Почему вы перебираете / usr / bin? Почему бы просто не использовать for i in {1..100} или i=100; while ((--i))? – wjandrea 24 April 2018 в 03:30
  • 2
    Две заметки: 1) Вместо синтаксиса подстановки команд $() вместо backticks, которые устарели. 2) Было бы проще поместить опции yad в массив. – wjandrea 24 April 2018 в 03:34
  • 3
    @wjandrea I зациклился на /usr/bin, чтобы отобразить некоторый текст на индикаторе прогресса. Я знаю, что backticks нахмурились в эти дни, но это был старый код, который я лежал, вокруг которого я копировал, не выполняя много работы. Я удалил их. Параметры yad в массиве очищают строку done, но я думаю, что этот метод иллюстрирует новичкам, что происходит с трубой, yad со всеми деталями в одном месте. – WinEunuuchs2Unix 24 April 2018 в 03:42
  • 4
    +1 для ... приятного ответа. ; D OP попросил терминал показать какую-то панель процесса, поэтому я сосредоточился на решениях, отличных от GUI, но это совсем не вредит полезности вашего подхода. Спасибо, что поделились знаниями! – dessert 24 April 2018 в 09:50

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

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