我正在尝试通过
spawnSync
执行shell脚本,我需要在后台运行命令之一,但“&”似乎被忽略了。
我的代码:
spawnSync(`echo "*** Begin" && npm run startServer & echo "*** End"`, {
stdio: ["ignore", "pipe", "inherit"],
encoding: "utf-8",
shell: true,
});
由于某种原因,命令
startServer
没有在后台执行,因此第二个 echo 命令永远不会执行。
注意:当我直接从 bash 运行上面的脚本时,它会按预期运行。
我不确定nodeJS和spawnSync的细节,但是你本质上是想将你的服务器命令与当前的shell进程解除关联。
您可以通过在 npm 命令前面添加
nohup
来实现此目的
echo "*** Begin" && nohup npm run startServer & echo "*** End"
由于您尝试与 npm 命令并行运行 echo End 命令,因此它将在 Begin 之后立即执行 end 命令。此外,即使终端被终止,它也会保持命令运行。