几秒钟后执行命令(不休眠)


15

X秒钟后如何不睡觉来运行命令。还是有睡眠但没有外壳,只是等待该命令的响应?

我用了这个但是没用

sleep 5 ; ls > a.txt

我需要在后台运行它。我尝试不必ls在5秒钟后尝试运行的脚本中运行它,而Shell不只是等待睡眠结束


为什么没有外壳就无法使用?你得到哪个错误?您是否通过了完整的路径?您知道哪一部分解析;吗?
Hennes

这样,shell将阻塞5秒钟,然后运行命令。要停止的shell我不需要。
马丁

然后,您需要在后台脚本或子Shell中启动它。
Hennes

Answers:


34

Hennes建议的一种更简洁的书写方式是

(sleep 5; echo foo) & 

另外,如果您需要几秒钟的时间,则可以使用at。可以通过以下三种方式来命令at

  1. 用管道输送:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. 将要运行的命令保存在文本文件中,然后将该文件传递给at

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. 您还可以at从STDIN 传递命令:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    然后,按CtrlD退出at外壳。该ls命令将在一分钟内运行。

您可以采用的格式给出非常精确的时间[[CC]YY]MMDDhhmm[.ss],例如

$ at -t 201412182134.12 < script.sh

该脚本将script.sh在2014年12月18日的21:34和12秒处运行该脚本。因此,从理论上讲,您可以at在未来的5秒内运行该脚本。但是,这有点像用坦克拍打苍蝇,海恩斯的建议更好。


我一直在混乱,$(sleep 5; echo foo) &我不确定为什么我以为我需要一个$,但是由于我的语法错误,我只是发布了更长的(并且更容易理解的)版本。(command_for_in_new_shell)较短。
Hennes 2013年

@Hennes和我公然剥夺了您的好主意(我赞成)。我所做的只是将其格式化为更短的内容,所有值得实际思考的东西都归您所有:)。
terdon

有什么方法可以at延迟几秒钟使用?
基金莫妮卡的诉讼

@NicHartley号 at 21:43如果需要的话,请使用特定的时间(例如),或者做一些简单的事情,例如在4秒钟后sleep 4 && command运行command

4

您可以通过在后台启动外壳程序或脚本来解决此问题。

例:

/ bin / sh -c“ sleep 5; echo foo”&
[1] 63791
>活动外壳提示在这里

foo 5秒后出现输出。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.