このスクリプトがあります。
cd foo && git pull && node server.js & && pid=$! && echo "$pid"
しかし、bashはこの部分が好きではないようです。& &&
...それで、私は次のように変更しました。
set -e
cd foo
git pull
node server.js &
pid=$!
echo "$pid"
&&
しかし、二重アンパサンドを代わりに使用する方法はありますか?
おそらく質問の目的は、これら2つが同じかどうかです。
cd foo && git pull && node server.js & && pid=$! && echo "$pid"
cd foo && git pull && ( node server.js & ) && pid=$! && echo "$pid"
私の推測では、いいえ同じ..
ベストアンサー1
cmd1 && cmd2
cmd1
「実行、成功すれば実行」を意味しますcmd2
。実行が完了するまでコマンドが成功したかどうかはわかりません。したがって、1つのコマンドをバックグラウンドに置き、次のコマンドの実行が最初のコマンドの成功に依存するようにすることは意味がありません。
あなたが本当に欲しいのは「cmd1
バックグラウンドで起動してから実行」しcmd2
ているようです。これだけですcmd1 & cmd2
。
したがって、必要なコマンドは次のようになります。cd foo && git pull && node server.js & pid=$! && echo "$pid"