我想在后台运行我的节点应用程序并使用 && 同时卷曲。我尝试遵循但不起作用
node app.js &;curl localhost
我尝试了另一个
node app.js & && curl localhost
但两者都不起作用
答案1
你可能想要
echo first && echo second && echo third & wait
这给你输出(类似于)
[1] 4242
first
second
third
[1]+ Done
最后一个&
将整个前一个命令放入管道/作业中。该作业由使用 shell 布尔表达式链接在一起的三个命令组成。如果其中之一返回 false,则应该终止该链。但它们都会在后台运行。
在后台运行第一个程序但在前台运行第二个程序的问题是第二个命令不知道第一个命令是否成功完成。当你把一个程序放在后台时,它的状态将为0除非程序无法执行。因此,下面的代码实际上才不是合理:
( start_webservice & ) && curl localhost
这也没有意义:
start_webservice & test "$?" = 0 && curl localhost
只需启动后台服务并无条件测试即可。您很可能需要等待一段时间才能进行测试:
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
答案2
正确的关键字是&
.不需要;
.
例子:first_script.sh & second_script.sh
在你的情况下:
node app.js & curl localhost
答案3
使用括号对命令进行分组,然后使用&
:
句法:
( command1 && command2 )&
例子:
( find $HOME > ~/find.log && date >> find.log )&