我正在使用 wget 下载文件,我想在下载完成后关闭计算机,但是我现在需要去某个地方:) 是否可以在下载过程完成时准确地在 bash 中执行命令?
我知道这是可行的:
wget http://example.com/file.rar;立即关闭
但如果我只输入:
wget http://example.com/file.rar
答案1
你可以做这样的事情:
- 暂停 wget 的执行
ctrl-z
(它不是停止,而是暂停) - 将其置于背景中
bg
- 跑步:
wait; shutdown -h now
wait
将等待当前 shell 中后台运行的所有程序(即此 wget)完成。之后等待完成 -关闭会跑。
答案2
在另一个 shell 中,使用
ps -u <your username> | grep wget
找到要等待的命令的 PID,然后
wait <PID>; shutdown -h now
因此,在进程终止之前,shutdown 不会运行。另请参阅depesz 的回答。
答案3
我的解决方案是:使用 Control+Z 暂停长时间运行的任务,然后输入如下内容:
fg; echo "Done!"
如果您想根据命令的成功或失败以不同的方式运行反应,请使用 && 和 || 作为短路运算符。
fg && echo "Success!" || echo "Failure!"
编辑:这不适用于 sudo,因为它会要求您输入密码。因此,我删除了使用 sudo 的示例。如果您需要 sudo 来完成第二项任务,请使用此处发布的另一种方法。
另一方面,我相信 GNOME 和 KDE 都提供了无需使用 sudo 来触发关机/重启的方法,通过发送适当的 D-Bus 信号或其他方式。
答案4
如果您想要更进一步,请检查 wget 的返回状态,如果成功则仅关闭。
% wget http://example.com/file.rar
% if [ $? -eq 0 ]
> then
> shutdown now
> fi