2016-07-12 3 views
0

Возможно, я плохо настроен на выполнение индикаторов выполнения, упомянутых здесь: How to add a progress bar to a shell script?. Но мне очень понравился индикатор выполнения сценария установки оболочки, который я создаю. Это может (с точки зрения внешнего вида) быть похоже на это,Выполнение простого индикатора хода оболочки

'[       (00%)]/' 
'[#####      (33%)]\' 
'[##################   (66%)]-' 
'[##########################(100%)]|' 

, где у нас есть прогресс бар, процентный счетчик и вращающееся устройство. Я бы очень хотел, чтобы он был модульным, чтобы я мог использовать и в других проектах, но, возможно, я тогда прошу что-то слишком сложное. Я не знаю, как и что он должен учитывать, но я подумал, что было бы разумно просто подсчитать количество строк, выполняемых в моем скрипте, и сравнить это число с общим количеством строк, но я, конечно, открыт для других предложения.

+0

Строки принимают изменяющееся количество времени для выполнения. Он должен основываться на ожидаемом времени. – Tim

+0

Я знаю. Но сейчас мне просто нужен сценарий. Если вы знаете, как сделать оценку того, сколько времени осталось, мне очень понравилось бы видеть такое решение! :-) Моя проблема заключается, однако, в том, что скрипт, который я делаю правильно, делает много apt-получения, загрузки из GitHub и установки различных файлов .deb, поэтому я не знаю, как я должен сам это понять. – Birdie

ответ

1

Ниже приведен пример индикатора выполнения,% счетчик & вертушки:

#!/bin/bash 

spin() { 
    sp='/-\|' 
    printf ' ' 
    while true; do 
     printf '\b%.1s' "$sp" 
     sp=${sp#?}${sp%???} 
     sleep 0.05 
    done 
} 

progressbar() 
{ 
    bar="##################################################" 
    barlength=${#bar} 
    n=$(($1*barlength/100)) 
    printf "\r[%-${barlength}s (%d%%)] " "${bar:0:n}" "$1" 
} 

spin & 
pid=$! 

#your task here 

for i in `seq 1 100`; 
do 
    progressbar $i 
    sleep 0.1 
done 

# kill the spinner task 
kill $pid > /dev/null 2>&1 

Вертушка запускается в начале и остановилась в конце, функция индикатора прогресса вызывается каждый раз, изменения в%.

Вы можете настроить стиль прогресс бар обновления формата "\r[%-${barlength}s (%d%%)] "

+0

Большое вам спасибо за помощь! К сожалению, я не могу заставить его работать. Я пытаюсь сделать следующий файл install.sh имеет индикатор выполнения. : -/ https://github.com/mstaal/i3buntu – Birdie

+0

Цикл for является примером. Вызовите функцию индикатора выполнения вызова с заданным значением% каждый раз, когда вы хотите изменить%. Момент, когда вы хотите изменить%, зависит от ваших действий, которые будут обрабатываться в вашем скрипте. –

+0

Теперь я думаю, что понимаю вашу точку зрения. Но при загрузке скрипта я получаю синтаксическую ошибку. В нем говорится, что (по какой-то причине) при загрузке функции спина не должно быть левой скобки. – Birdie