如何在 bash 中在当前运行命令后执行命令?

如何在 bash 中在当前运行命令后执行命令?

我正在使用 wget 下载文件,我想在下载完成后关闭计算机,但是我现在需要去某个地方:) 是否可以在下载过程完成时准确地在 bash 中执行命令?

我知道这是可行的:

wget http://example.com/file.rar;立即关闭

但如果我只输入:

wget http://example.com/file.rar

答案1

你可以做这样的事情:

  1. 暂停 wget 的执行ctrl-z(它不是停止,而是暂停)
  2. 将其置于背景中bg
  3. 跑步: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

相关内容