为什么大括号不会将远程 ssh 执行置于后台



我想使用复合命令在后台远程执行一些非常短的命令,但我注意到ssh要等到所有命令都执行完。我尝试了几种选择,结果是:

time ssh $IP 'sleep 20 >/dev/null 2>&1 &'
real    0m1,776s
user    0m0,003s
sys 0m0,003s
time ssh $IP 'sh -c " sleep 20; " >/dev/null 2>&1 &'
real    0m1,850s
user    0m0,007s
sys 0m0,000s
time ssh $IP '( sleep 20; ) >/dev/null 2>&1 &'
real    0m1,742s
user    0m0,000s
sys 0m0,007s
time ssh $IP '{ sleep 20; } >/dev/null 2>&1 &'
real    0m21,876s # <--- ssh waits until sleep is over
user    0m0,003s
sys 0m0,003s

为什么{}阻止ssh在启动后台进程后退出?

PS目标机器运行带有sh shell的QNX 7。不要抨击。

手册中的报价:

将命令列表放在大括号之间会导致该列表在当前shell上下文中执行。没有创建子shell

如果没有子shell,我想它就不能在后台运行。

最新更新