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