Linux
進度條“對話框”根據函式的命令執行顯示進度
從函式執行每個回顯命令時,如何使“對話框”進度條增加計數器?
我以下面的程式碼為例,但是在執行來自函式的命令時遇到問題。我可以計算函式中“迴聲”的數量並設置為“項目”,但是如何知道迴聲何時完成以及如何增加條形?
#!/bin/bash function two() { echo "test2-1"; sleep 1; echo "test2-2"; sleep 1; echo "test2-3"; sleep 1; echo "test2-4"; sleep 1; echo "test2-5"; sleep 1; } ( items=5 processed=0 while [ $processed -le $items ]; do pct=$(( $processed * 100 / $items )) echo "XXX" echo "Processing item $processed" # Here I wish instead $processed # to be value (test2-1, test2-2 etc.) # of processed echo echo "XXX" echo "$pct" processed=$((processed+1)) sleep 3 # Instead of this it should be when echo is finished printing done ) | dialog --title "Gauge" --gauge "Wait please..." 10 60 0
一般語法
dialog --gauge
這個展示腳本展示瞭如何讓對話框顯示進度。
#!/bin/bash ( echo 10;sleep 1;echo 50;sleep 1; echo 90;sleep 1;echo 100;sleep 1 ) | dialog --gauge 'text' 10 60 0 echo '##########' i=0; while [ $i -le 100 ];do echo "$i";echo "#comment $i";i=$((i+10));sleep 1;done echo '##########' i=0; while [ $i -le 100 ];do echo "$i";echo "#comment $i";i=$((i+10));sleep 1;done| dialog --gauge 'text' 10 60 0
- 使用數字 0-100 的輸出。
- 其他輸出可以用#前綴作為註釋,不會混淆
dialog
。它甚至可能適用於不帶# 前綴的非數字(文本行),但可能會有意外。如果您有其他輸出,您應該擷取它、處理它並僅將相關值 0-100 傳遞到
dialog
.編輯:已知輸出行數
以下腳本在完成之前假定已知數量的輸出行(在此範例中為 5),並使用函式
actor
來提供dialog
:#!/bin/bash expected_outputs=5 ii=0 function two() { echo "test2-1"; sleep 1; echo "test2-2"; sleep 1; echo "test2-3"; sleep 1; echo "test2-4"; sleep 1; echo "test2-5"; sleep 1; } function actor () { while read ans do echo "# $ans" ii=$((ii+1)) echo $((ii*100/expected_outputs)) done } # main two | actor two | actor | dialog --title "Gauge" --gauge "Wait please..." 10 60 0
編輯2:
zenity --progress
在圖形桌面環境中,您可以使用以下匹配的命令行
zenity
:two | actor | zenity --progress --title "Gauge" --text="string" --percentage=0 --auto-close --width=300