我需要透過 SSH 將進度列整合到遠端伺服器上的操作。
在我的情況下,有幾個循環透過 SSH 觸發少數遠端伺服器上的進程。這些過程的觸發certainFunction
需要 10 到 60 分鐘(取決於許多不可預測的事情)。就進程是從主伺服器控制的而言,我想根據時間顯示一些進度條,例如百分比或條形(不是點或旋轉器),這將指示總體進度。
這可能嗎?
尋找一些我發現的奢侈解決方案愛德華·洛佩茲的progress-bar.sh
項目適合我的需要。
這是代碼progress-bar.sh
:
progress-bar() {
local duration=${1}
already_done() { for ((done=0; done<$elapsed; done++)); do printf "▇"; done }
remaining() { for ((remain=$elapsed; remain<$duration; remain++)); do printf " "; done }
percentage() { printf "| %s%%" $(( (($elapsed)*100)/($duration)*100/100 )); }
clean_line() { printf "\r"; }
for (( elapsed=1; elapsed<=$duration; elapsed++ )); do
already_done; remaining; percentage
sleep 1
clean_line
done
clean_line
}
可以用於我的情況嗎?我正在尋找一個純 Bash 解決方案,無需安裝額外的軟體包。
答案1
寫進度條很容易;那不是你的問題。你可以使用
declare -i progress
progress=1
declare -i width
width=$(tput cols)-10
declare -i pbarlength
prt_bar(){
pbarlength=$((width*progress/100))
echo -en "\r"
for i in `seq $pbarlength` ; do
echo -n '='
done
echo -en " $progress "
}
或類似的東西
主要問題是確定您的進度。如果你確實嘗試按時間來做,你肯定會得到錯誤的進展感,因為這個過程(我引用):需要 10 到 60 分鐘(取決於許多不可預測的事情)。
如果只是基於時間,您可以使用:
while [ $progress -lt 100 ] ; do
progress=$((progress+1))
prt_bar
sleep 10
done
echo
echo done
但是,如果您無法衡量流程的進展情況,並且無法提供實際進度的現實估計,那麼提供進度條是沒有用的。您最喜歡的視窗管理器的時鐘小工具將提供盡可能多的相關資訊。