延迟后生成进程的Shell脚本

33

在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脚本调用它。


它很简单易懂,简短而精炼。 - user1276046
4个回答

49

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

sleep 60 && echo "A" &

我很惊讶地看到那段代码没有使用分组(括号或大括号)也能正常工作。谢谢 :-) - Tanktalus
它需要括号,就像 https://dev59.com/53I-5IYBdhLWcg3wVWli#1915082 上所示。至少在 zsh 上是这样的。 - pvinis

14

现在无法尝试,但

(sleep 60 && echo "A")&

应该能够完成工作。


9
稍微补充一下其他回答,就是等待脚本最后的后台命令。
#!/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

1
替代方案:
echo 'echo "A"' | at now + 1 min

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接