我目前正試圖弄清楚如何讓bash在整個屏幕上繪製一系列點(類似進度指示器),直到命令執行完畢。例如,假設我想爲wget下載畫點:回聲「。」直到命令完成執行
wget -s http://url.tar.gz
until "above command has finished executing"; do
echo -n "."
sleep 0.05s
done
我可以使用「$!」嗎?或「$?」幫助解決這個問題?
謝謝你的幫助!
我目前正試圖弄清楚如何讓bash在整個屏幕上繪製一系列點(類似進度指示器),直到命令執行完畢。例如,假設我想爲wget下載畫點:回聲「。」直到命令完成執行
wget -s http://url.tar.gz
until "above command has finished executing"; do
echo -n "."
sleep 0.05s
done
我可以使用「$!」嗎?或「$?」幫助解決這個問題?
謝謝你的幫助!
這將打印點,直到wget
完成:
while sleep 0.1; do printf "."; done &
wget -q http://url.tar.gz
kill $!
echo ""
wget
都有自己的進度指示器。以上使用-q
將其關閉。
感謝松鼠,我能夠解決這個問題。他指出我有一個線索,我重複了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
作爲編碼,'while'循環直到'wget'完成纔會進入。爲了讓'while'循環被輸入爲'wget'來檢索文件,你需要在'wget'命令後附加&符號,例如:'wget -q http://url.example.com .tar.bz2&' – user3439894 2015-02-06 02:53:24
我一定忘記添加「&。」感謝您指出了這一點。 – 2015-02-12 21:51:08
@Squirrel他不希望得到的退出代碼,他要檢測後臺進程是否仍在運行或不。 – Barmar 2015-02-06 02:09:43
爲什麼不使用'wget'的內置進度指示器? – Barmar 2015-02-06 02:10:26
我標記了它,因爲問題主體(而不是標題)實際上詢問了這個確切的事情,最好的答案實際上有代碼,顯示瞭如何去做。 – Squirrel 2015-02-06 02:10:47