2015-04-05 128 views
0

我有以下脚本,它的工作原理,但我不知道它是如何工作的,如何百分比增加在计

那是什么表通过使用任何作为包含变量魔术百分比?

#!/bin/bash -x 
cnt="`rpm -qa | wc -l`" 
pct="`echo \"100/$cnt\" | bc -l`" 
whatever=0 
counter=0 


for file in `rpm -qa`; do 
    counter=$((counter+1)) 
    whatever=`echo $whatever+$pct | bc -l` 
    echo $whatever | cut -d"." -f1 
    sleep 0.1 
    echo "XXX" 
    echo Paquete $counter: 
    echo $file: $(rpm -V $file) 
    echo "XXX" 
done | dialog --backtitle "Verificando RPMs" --title "Progreso" --gauge "Procesando RPM's ..." 15 70 0 

回答

1

没有魔法。 for循环明确写入$whatever(在小数点截断)到dialog的标准输入,而dialog使用从标准输入读取的整数流设置标尺位置。

for loop还通过输出XXX标记之间的新文本来更改标尺的文本。

man dialog从引用(章节上--gauge):

甲计框显示沿着箱的底部的米。仪表显示百分比。从标准输入读取新的百分比,每行一个整数。仪表更新以反映每个新百分比。如果标准输入读取字符串“XXX”,则后面的第一行将被视为整数百分比,然后使用到达另一个“XXX”的后续行作为新提示。在标准输入上达到EOF时,量表退出。

+0

但是,对话框如何知道,无论是百分比,而不是例如计数器变量? – sebelk 2015-04-05 04:48:00

+1

@sebelk:因为整行是一个整数。根据手册页,第一个'XXX'后面的行应该是百分比,但该行以单词(Paquete)开始,因此量表小部件假定它是文本的一部分。在下一个'XXX'之前的其余行肯定是文本,不管它们是否是整数。 – rici 2015-04-05 04:54:30