我的脚本(.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
。