我目前正试图弄清楚如何让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