2015-02-06 100 views
2

我目前正試圖弄清楚如何讓bash在整個屏幕上繪製一系列點(類似進度指示器),直到命令執行完畢。例如,假設我想爲wget下載畫點:回聲「。」直到命令完成執行

wget -s http://url.tar.gz 
until "above command has finished executing"; do 
    echo -n "." 
    sleep 0.05s 
done 

我可以使用「$!」嗎?或「$?」幫助解決這個問題?

謝謝你的幫助!

+0

@Squirrel他不希望得到的退出代碼,他要檢測後臺進程是否仍在運行或不。 – Barmar 2015-02-06 02:09:43

+0

爲什麼不使用'wget'的內置進度指示器? – Barmar 2015-02-06 02:10:26

+0

我標記了它,因爲問題主體(而不是標題)實際上詢問了這個確切的事情,最好的答案實際上有代碼,顯示瞭如何去做。 – Squirrel 2015-02-06 02:10:47

回答

3

這將打印點,直到wget完成:

while sleep 0.1; do printf "."; done & 
wget -q http://url.tar.gz 
kill $! 
echo "" 

wget都有自己的進度指示器。以上使用-q將其關閉。

2

感謝松鼠,我能夠解決這個問題。他指出我有一個線索,我重複了shell - get exit code of background process。通過添加以下到我的劇本,我能得到它的工作我是如何希望:

wget -q http://url.example.com.tar.bz2 & 
wget_pid=$! 

while [ -d /proc/$wget_pid ]; do 
    echo -n "." 
    sleep 0.01s 
done 
+0

作爲編碼,'while'循環直到'wget'完成纔會進入。爲了讓'while'循環被輸入爲'wget'來檢索文件,你需要在'wget'命令後附加&符號,例如:'wget -q http://url.example.com .tar.bz2&' – user3439894 2015-02-06 02:53:24

+0

我一定忘記添加「&。」感謝您指出了這一點。 – 2015-02-12 21:51:08

相關問題