shell最簡單的辦法實現進度條


一直很好奇shell命令行安裝腳本的時候怎么實現自動增長進度條而且不增加新輸出的問題。以前一直覺得是不斷print出來東西,但是已經輸出到命令行終端的為什么也能被覆蓋呢,於是看到別人寫的進度條,不斷嘗試,發現核心功能非常簡單,就是不斷的printf "\r"

代碼如下

#!/bin/bash

processBar()
{
    process=$1
    whole=$2
    printf "[%03d/%03d]\r" $process $whole
}

whole=100
process=0
while [ $process -lt $whole ] 
do
    let process++
    processBar $process $whole
    sleep 0.1
done
printf "\n"

然后我做了非常簡單版本的核心代碼

#!/bin/bash
printf "1\r"
sleep 1
printf "2\r"
sleep 1
printf "3\r"
sleep 1
printf "4\r"
sleep 1
printf "5\r"
sleep 1

我發現這樣也能從 1 一直變到 5 。很讓人費解這里面的原理是什么。

我看了一下 shell printf 解釋參數中 \r 是回車的意思,至今還沒搞懂是為什么。有網友明白的可以給我留言答疑解惑,不甚感激!

 后續更新(2020-05-22)

五分鍾后 我好像有點眉目了

這個打印換行把剛剛輸出的東西覆蓋了,如果調換\r和數字順序 發現后面的覆蓋前面的最后留下來5,就是用回車進行覆蓋,實現動態變化輸出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM