2015-02-06 68 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