バックグラウンドでプログラムを実行し、&&を使用して他のコマンドを実行する方法[閉じる]

バックグラウンドでプログラムを実行し、&&を使用して他のコマンドを実行する方法[閉じる]

バックグラウンドでノードアプリを実行してカーリングしている間に&&を使いたいです。フォローしてみましたが、できません。

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

最後のコマンドは、前の&コマンド全体をパイプライン/タスクに入れます。アクションは、シェルブール式を使用して一緒にリンクされた3つのコマンドで構成されます。そのうちの1つがfalseを返した場合、チェーンは終了する必要があります。しかし、すべてがバックグラウンドで実行されます。

最初のプログラムはバックグラウンドで実行し、2番目のプログラムはフォアグラウンドで実行するときの問題は、2番目のコマンドが最初のコマンドが正常に完了したかどうかを知ることができないことです。プログラムをバックグラウンドに配置すると、ステータスは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

正しいキーワードは&.not必須です;

例:first_script.sh & second_script.sh

あなたの場合:

node app.js & curl localhost

答え3

括弧を使用してコマンドをグループ化し、次を使用します&

通事論:

( command1 && command2 )&

例:

( find $HOME > ~/find.log && date >> find.log )&

関連情報