progressbar для tar

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mazzay
проходил мимо

progressbar для tar

Непрочитанное сообщение mazzay » 2009-08-11 9:10:54

не могу понять один нюанс для конвейеров.

делаю примерно так

Код: Выделить всё

S=`tar -tf /mnt/flash/scripts/arch.tar | wc -l`
tar -v -zxf /mnt/flash/scripts/arch.tar | awk '{if ((100*a/C) > G-1) {print G; G++} a++}' C=$S 
На выходе получаю процент выполнения разархивирования архива примерно так

Код: Выделить всё

1
2
3
....
Теперь пытаюсь добавить к этому dialog --gauge

Код: Выделить всё

tar -v -zxf /mnt/flash/scripts/arch.tar | awk '{if ((100*a/C) > G-1) {print G; G++} a++}' C=$S | dialog --gauge  " " 10 70 0
и тут затык. Передача по конвейеру до dialog почему-то доходит уже в конце выполнения tar всех результатов от 0 до 100 сразу. То есть прогрессбар стоит в положении 0 и уже в конце выполнения tar перескакивает на 100
Также работает и эта конструкция

Код: Выделить всё

for S in `tar -v -zxf /mnt/flash/scripts/arch.tar ` do
echo $S
done
Весь результат выдается уже в самом конце, а не в реал тайм.

Что я не учел или не допонял?
#!/bin/sh

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


mazzay
проходил мимо

Re: progressbar для tar

Непрочитанное сообщение mazzay » 2009-08-16 8:56:33

Оказывается, если AWK получает входные данные по конвейеру, а результаты выполнения также передает по конвейеру, то делает он это лишь после полного принятия всех входных данных. То есть это такая фишка.
Первый скрипт работает в real-time, а второй нет и никогда не будет с использованием awk. Поэтому для арифметических вычислений в этом случае нужно использовать что-то другое, например bc