Прогресс-бар для скриптов: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
(Новая: Пример небольшого анимированного и цифрового прогресс-бара для скриптов. К примеру, у нас есть скрипт...)
 
 
(не показаны 3 промежуточные версии этого же участника)
Строка 8: Строка 8:
do
do
let current+=1
let current+=1
printf " \e[31m%s\e[32m%s\e[31m%s \e[0;36m%s%s \e[0;32m%s\e[0m\r" '[' "${pb}" ']' "$(echo "${1}" | awk "{print $current/$1*100}")" '%' 'complete.'
printf " \e[31m%s\e[32m%s\e[31m%s \e[0;36m%s%s \e[0;32m%s\e[0m\r" '[' "${pb}" ']' "$(
echo "${1}" | awk "{print $current/$1*100}"
)" '%' 'complete.   '
var=$(echo -n "${pb}" | sed  -e 's@|@/@g' -e 's@\\@|@g' -e 's@-@\\@g')
var=$(echo -n "${pb}" | sed  -e 's@|@/@g' -e 's@\\@|@g' -e 's@-@\\@g')
[ $var == $pb ] && pb='-' || pb=$var
[ $var == $pb ] && pb='-' || pb=$var
Строка 29: Строка 31:
----
----


[[Категория:Скрипт]]
==Ссылки==
 
[http://www.theiling.de/projects/bar.html ASCII-bar]
 
[[Категория:Скрипт]][[Категория:Shell-функция]]

Текущая версия на 17:19, 24 октября 2008

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


progress() {
current="0"
while read unit
do
	let current+=1
	printf " \e[31m%s\e[32m%s\e[31m%s \e[0;36m%s%s \e[0;32m%s\e[0m\r" '[' "${pb}" ']' "$(
	echo "${1}" | awk "{print $current/$1*100}"
	)" '%' 'complete.   '
	var=$(echo -n "${pb}" | sed  -e 's@|@/@g' -e 's@\\@|@g' -e 's@-@\\@g')
	[ $var == $pb ] && pb='-' || pb=$var
done
echo
}

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


for i in {0..99}
do
echo
sleep .1
done | progress 100

Ссылки

ASCII-bar