为了解释,我使用了 Firefox,但它也会发生在其他应用程序中,下面是脚本:
$ cat ff.sh
#!/bin/sh
firefox http://superuser.com/
echo "$?"
假设 Firefox 已关闭,当我运行
$ ./ff.sh
脚本被阻止,直到我关闭 Firefox。只有关闭后我才能获得退出代码。
0
$
现在假设 Firefox 已在运行,当我运行脚本时,它会打开一个新的 Firefox 选项卡并运行到最后。 (并且 Firefox 继续运行。)
$ ./ff.sh
0
$
如何才能实现无论启动条件如何,行为都与第一个示例相同?基本上,我想实现相反的效果
$ cmd &
答案1
它看起来好像是异步运行的,但实际上并非如此。
Firefox 启动时会检查是否存在现有实例,如果找到,它会将控制权委托给现有实例并自行结束。因此造成混淆。