如何在后台运行程序并使用 && 执行另一个命令

如何在后台运行程序并使用 && 执行另一个命令

我想在后台运行我的节点应用程序并使用 && 同时卷曲。我尝试遵循但不起作用

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 )&

相关内容