好吧,因此在bash
或其他我可以知道的shell中沒有本地工具,但是您可以使用下面的這個printf
&這個自定義函數來實現你所需要的。這個小片段將打印安裝進度條,您可以通過正常功能調用printProgressBar
在您想要顯示的腳本的各個位置進行打印。
function printProgressBar() {
local progressBar="."
printf "%s" "${progressBar}"
}
假設你在你的函數調用n
步驟,在插入之間的地方調用這個函數。是否有錯誤消息的實際打印,填寫可變installOf
安裝頭從您的示例假設可採取任一"Installing OpenCv "
(或)"Installing Qt "
,步驟之前用它在該變量作爲
installOf="Installing OpenCv "
printf "%s" "${installOf}"
和最終狀態,因爲你沒有讓我們知道你如何讓安裝的整體狀態,假設你找到它,這取決於成功或失敗,還更新了它另一個變量
installStatus="Success"
printf " [%s]\n" "${installStatus}"
所以把他們放在一起,我有這個運行20個調用函數的簡單while循環,可以使用a類似的方式來採取您的腳本中的各個位置的函數調用。
installOf="Installing OpenCv "
function printProgressBar() {
local progressBar="."
printf "%s" "${progressBar}"
}
printf "%s" "${installOf}"
while ((cnt < 20))
do
((cnt++))
printProgressBar
sleep 1
done
# You can determine the status of your installation as your script demands
installStatus="Success"
printf " [%s]\n" "${installStatus}"
運行腳本產生類似於您的要求的結果的東西,
$ bash script.sh
Installing OpenCv .................... [Success]
觀察到,每個.
代表一個函數調用的每個實例。
更新: -
看你的代碼邏輯,你缺少的後臺作業是如何工作的一個點。您的後臺功能InstEssent
正在安裝某個模塊。要有效地使用進度欄,您需要不斷輪詢後臺作業以查看它是否仍在使用kill -0 "$pid"
命令運行,如果它正在運行,請按照下面的代碼所示打印安裝欄。
function InstEssent()
{
sudo apt-get -y install build-essential
sleep 5
}
printf "%s" "${installOf}"
InstEssent &
pid_InstEssent="$!"
while kill -0 "$pid" 2> /dev/null
do
printProgressBar
sleep 1
done
我相信你在其他地方看到過這個,所以你爲什麼不認爲這可能? –
你的代碼在哪裏? –
@Inian:對不起,我生病了,沒有時間研究它。現在這樣做,很快就會更新,對不起。 – Idanis