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

ino*_*emo 19 linux bash

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

我知道这有效:

wget http://example.com/file.rar; 现在关机

但是如果我只输入:

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

小智 32

你可以这样做:

  1. 用 ctrl-z 停止 wget 的执行(它没有停止,它被挂起)
  2. 把它放在背景中(bg)
  3. 运行:等待;现在关闭 -h

wait 将等待从当前 shell 在后台运行的所有程序 - 即这个 wget。

等待完成后 - 关闭将继续。

  • 除非您真的想查看进度条,否则不需要。 (4认同)

dmc*_*ten 11

在另一个外壳中,使用

ps -u <your username> | grep wget
Run Code Online (Sandbox Code Playgroud)

找到您要等待的命令的PID,然后

wait <PID>; shutdown -h now
Run Code Online (Sandbox Code Playgroud)

以便在进程终止之前关闭不会运行。另请参阅depesz 的回答


Rya*_*son 5

我的解决方案是:使用 Control+Z 暂停您长时间运行的任务,然后键入以下内容:

fg; echo "Done!"
Run Code Online (Sandbox Code Playgroud)

如果您想根据命令的成功或失败运行不同的反应,请使用 && 和 || 作为短路运算符。

fg && echo "Success!" || echo "Failure!"
Run Code Online (Sandbox Code Playgroud)

编辑:这不适用于 sudo,因为它会询问您的密码。因此,我使用 sudo 删除了示例。如果第二个任务需要 sudo,请使用此处发布的另一种方法。

另一方面,我相信 GNOME 和 KDE 都提供了在不使用 sudo 的情况下通过发送适当的 D-Bus 信号或其他东西来触发关闭/重启的方法。