顺序执行Shell脚本命令

顺序执行Shell脚本命令

我的脚本(.ksh):

cmd1 & cmd2

我想cmd1在后台执行并仅在启动cmd2后才开始执行。cmd1但是,当我运行脚本时,cmd2是在 之前开始cmd1,从而给我带来了问题。

我该如何解决这个问题?

答案1

通过使用条件运算符,&&您可以在另一次执行开始之前强制“完成”一次执行。 (我将“完成”放在引号中,因为实际上“完成”是将进程置于后台。)

尽管

$ (echo "foo" &) ; echo "bar"

可能会输出

bar
foo

下列

$ (echo "foo" &) && echo "bar"

将输出

foo
bar

因为 shell 需要先确定第一个命令的退出状态,然后才能执行第二个命令。

答案2

最简单的解决方案是添加一个微小的sleep

cmd1 & sleep 1 && cmd2

更可靠的是使用包装器来cmd2确保cmd1实际运行然后继续。

就像是:

while ! pgrep cmd1; do
    sleep 1
done
cmd2

while !可以用 BTW 替换until

相关内容