我想在后台运行我的节点应用程序并同时使用 && 卷曲。我尝试了以下但不起作用
node app.js &;curl localhost
我尝试了另一个
node app.js & && curl localhost
但两者都不起作用
你可能想要
echo first && echo second && echo third & wait
Run Code Online (Sandbox Code Playgroud)
它为您提供输出(类似于)
[1] 4242
first
second
third
[1]+ Done
Run Code Online (Sandbox Code Playgroud)
最后一个&将整个前一个命令放入管道/作业中。该作业由使用 shell 布尔表达式链接在一起的三个命令组成。如果其中之一返回 false,则应终止链。但它们都将在后台运行。
在后台运行第一个程序但在前台运行第二个程序的问题是第二个命令不知道第一个命令是否成功完成。当您将程序置于后台时,除非程序无法开始执行,否则其状态将为 0 。所以以下真的没有意义:
( start_webservice & ) && curl localhost
Run Code Online (Sandbox Code Playgroud)
这也没有意义:
start_webservice & test "$?" = 0 && curl localhost
Run Code Online (Sandbox Code Playgroud)
只需启动后台服务,无条件测试即可。在进行测试之前,您很有可能需要等待一段时间:
start_webservice &
success=0
tries=5
pause=1
while [ $success = 0 -a $tries -gt 0 ]; do
sleep $pause
let tries=tries-1
curl localhost && success=1
done
if [ $success = 0 ]; then
echo "Launch failed"
fi
Run Code Online (Sandbox Code Playgroud)
正确的关键字是&. 不需要;.
例子:first_script.sh & second_script.sh
在你的情况下:
node app.js & curl localhost
Run Code Online (Sandbox Code Playgroud)