2017-01-13 3 views
1

Типичная мощность записывается в ЧК файл из команды:Баш - получение номера из потока

wget -O - http://website/file > /dev/null 2>chk & 

что-то вроде:

0K .......... .......... .......... .......... .......... 0% 143K 62s 

    50K .......... .......... .......... .......... .......... 1% 433K 41s 

100K .......... .......... .......... .......... .......... 1% 1.20M 30s 

150K .......... .......... .......... .......... .......... 2% 259K 31s 

200K .......... .......... .......... .......... .......... 2% 83.2M 24s 

... 

8800K .......... .......... .......... .......... .......... 98% 260K 1s 

8850K .......... .......... .......... .......... .......... 98% 329K 0s 

8900K .......... .......... .......... .......... .......... 99% 433K 0s 

8950K .......... .......... .......... .......... ......... 100% 331K=31s 

2017-01-13 13:16:59 (288 KB/s) - written to stdout [9215609/9215609] 

Файл обновляется, строка за строкой , в течение всего процесса загрузки. Ну, мне нужно получить только процент: 0, 1, 2 ... 99 и ничего больше.

Следующий сценарий делает работу, даже если не идеально:

tail -n 5 chk | tail -n 1 | colrm 1 63 | cut -d '%' -f 1 

Проблема возникает тогда, когда мне нужно сделать то же самое в Баш скрипт, как в следующем примере:

#!/bin/bash 
# Test script for getting the percentage number from 'wget' output 
i=0 
wget -O - http://website/file > /dev/null 2>chk & 
sleep 1 

while (($i < 90)) 
do 
i=`tail -n 5 chk | tail -n 1 | colrm 1 63 | cut -d '%' -f 1` 
echo $i 
done 

Сценарий начинает получать желаемый файл, он записывает файл chk, но останавливается с сообщением об ошибке:

line 9: ((: < 90 : syntax error: operand expected (error token is "< 90 ") 

Я попытался использовать [[]], цитаты ... но не работает.

Любая идея здесь для лучшей работы?

ответ

1

Прогресс бар с Wget, Хлыстохвост и GNU СЭД:

wget --progress=dot 'URL' 2>&1 | sed -un 's/.* \([0-9]\+\)% .*/\1/p' | whiptail --gauge "Download" 7 50 0 
+0

Спасибо. Дело в том, что число, которое я искал, должно обрабатываться скриптом диалога whiptail -gauge, и ему нужно число, чтобы сделать индикатор выполнения. – MAXIM

+0

Я обновил свой ответ. Теперь на выходе отображается только номер без конечного%. – Cyrus

+0

Отлично! большое спасибо за ваш ответ! Можете ли вы объяснить шаг за шагом, как работает скрипт? Чтобы его можно было реализовать в whiptail --gauge – MAXIM