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

分享于 

3分钟阅读

电脑

 

问题:

在文件下载过程中,我想在下载完成后关闭计算机,但在完成过程中,我需要在 bash exacly中运行命令?

我知道这很有用





wget http://example.com/file.rar; shutdown now



但如果我只键入:





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




回答 1:

你可以执行如下操作:

  • 停止使用 ctrl-z ( 它未停止,它被挂起) 停止运行
  • 将它的置于背景中( bg )
  • 运行:等待,关闭 -h
  • 等待将等待所有程序从当前 shell 运行到当前- 换句话说,这里 wget。

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


回答 2:

在另一个 shell 中,使用


ps -u <your username> | grep wget



若要查找要等待的命令的PID,请执行下列操作:


wait <PID>; shutdown -h now



因此,在进程终止之前,关闭不会运行。 请参见的depesz答案。


回答 3:

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

 
fg; echo"Done!"



 

如果你想根据命令的成功或者失败而不同地运行,请使用 && 和||作为短路操作程序。


fg && echo"Success!" || echo"Failure!"



编辑:这将不能用于 sudo,因为它会要求你的密码。 因此,我使用sudo删除了这些示例。 如果第二个任务需要 sudo,请使用这里发布的其他方法。

另一方面,我相信GNOME和KDE都可以通过发送一个相应的d 总线信号来触发关闭/重启。


回答 4:

是,只需键入第二个命令并按enter键。 如果你当前的程序是滚动文字,你不能正确地看到你正在打字,这样你就可以正确地。

更聪明的方法是到另一个TTY并同时运行命令,或者如果你使用类似屏幕的命令行程序,你可以在其中创建一个新的。


回答 5:

如果你想变得别致,检查一下wget的返回状态,只有当它成功时才关闭。


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


% if [ $? -eq 0 ]


> then


> shutdown now


> fi





COM  COMM  Comma  EXE  EXEC  BASH  
相关文章