zenity 是一個小程式用來顯示簡單的 GTK+ 對話框,其中也有進度條的選項。
$ zenity --help-progress
用法:
zenity [選項…]
進度列選項
--progress 顯示進度指示窗
--text=文字 指定對話方塊中的文字
--percentage=百分比 指定開始時的百份比數值
--pulsate 令進度列內的方塊來回移動
--auto-close 當進度達到 100% 時關閉對話方塊
--auto-kill 若按下取消按鈕則中止父程序
--no-cancel 隱藏取消按鈕
--time-remaining 估計當進度到達 100% 的時間
使用上可將其它程式的標準輸入當成輸入,例如:
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress
如果想讓進度達到百分之百時自動結束可以加上 --auto-close
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close
或是加上 --no-cancel 讓確定跟取消的按鈕都不見。
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel
再加上 --time-remaining 剩餘時間的估計。
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel --time-remaining
當然還可以使用其它元件都有的 --title 跟 --text 來客製對話框的訊息。
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel --time-remaining --title "新建築正在倒塌中" --text "貓在鋼琴上昏倒了"
另外就是 --text 有支援一些簡單的 HTML 標籤,所以可以有一些變化。
$ for i in {0..100..20}; do echo $i; sleep 1; done | \
zenity --progress --auto-close --no-cancel --time-remaining --title "新建築正在倒塌中" --text "<b>貓</b>在<u>鋼琴</u>上<i>昏倒</i>了\n謠言真可怕"
最後就是要小心其它程式所產生的標準輸出,像是 apt-get upgrade --yes 的輸出有時候會有數字開頭的訊息,這樣的訊息在使用 zenity --progress --auto-close 時都會導致對話框突然結束,任何超過 100 的數字都會結束程式。