代码之家  ›  专栏  ›  技术社区  ›  gerdemb

延迟后生成进程的shell脚本

  •  19
  • gerdemb  · 技术社区  · 15 年前

    在shell脚本中延迟之后,如何生成进程?我想要一个命令在脚本启动60秒后启动,但我希望不等待60秒就继续运行脚本的其余部分。我的想法是:

    #!/bin/sh
    # Echo A 60 seconds later, but without blocking the rest of the script
    sleep 60 && echo "A"
    
    echo "B"
    echo "C"
    

    输出应该是

    B
    C
    ... 60 seconds later
    A
    

    我需要能够在一个脚本中完成这一切。也就是说,不创建从第一个shell脚本调用的第二个脚本。

    4 回复  |  直到 6 年前
        1
  •  35
  •   nos    15 年前

    &开始一个后台工作,所以

    sleep 60 && echo "A" &
    
        2
  •  7
  •   davrieb    15 年前

    其他答案的一个小扩展是等待脚本末尾的后台命令。

    #!/bin/sh
    # Echo A 60 seconds later, but without blocking the rest of the script
    
    set -e
    
    sleep 60 && echo "A" &
    pid=$!
    
    echo "B"
    echo "C"
    
    wait $pid
    
        3
  •  5
  •   lorenzog    15 年前

    现在不能试试但是

    (sleep 60 && echo "A")&

    应该做这个工作

        4
  •  0
  •   Jeroen Vermeulen    6 年前

    替代方案:

    echo 'echo "A"' | at now + 1 min
    

    如果操作系统不在指定的时间运行,命令将在可用时立即执行。