秒后执行命令(不休眠)

Mar*_*tin 20 sleep shell command-line

如何在 X 秒后没有睡眠的情况下运行命令。或者有睡眠但没有外壳只是等待该命令的响应?

我用过这个,但没有用

sleep 5 ; ls > a.txt
Run Code Online (Sandbox Code Playgroud)

我需要在后台运行它。我尽量不必在脚本中运行它我尝试ls在 5 秒后运行,并且 shell 不只是等待睡眠结束

ter*_*don 39

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

(sleep 5; echo foo) & 
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要超过几秒钟的时间,则可以使用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
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您还可以at从 STDIN传递命令:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    
    Run Code Online (Sandbox Code Playgroud)

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

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

$ at -t 201412182134.12 < script.sh
Run Code Online (Sandbox Code Playgroud)

这将script.sh在 2014 年 12 月 18 日的 21:34 和 12 秒运行脚本。因此,理论上,您可以at在未来运行 5 秒。不过,这有点像用坦克打苍蝇,Hennes的建议更好。


Hen*_*nes 5

您可以通过在后台启动 shell 或脚本来解决它。

例子:

/bin/sh -c "sleep 5 ; echo foo" &
[1] 63791
> 此处为活动 shell 提示

foo 5 秒后输出出现。