Страница 1 из 1

progressbar для tar

Добавлено: 2009-08-11 9:10:54
mazzay
не могу понять один нюанс для конвейеров.

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

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

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

Re: progressbar для tar

Добавлено: 2009-08-11 15:45:22
ProFTP

Re: progressbar для tar

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