シェルスクリプトで2つのコマンドを同時に実行することは可能ですか?


10

コマンドラインで&コマンドをバックグラウンドで実行できることを知っています。しかし、スクリプトでそれを実行できるかどうか疑問に思っています。

次のようなスクリプトがあります。

date_stamp=$(date +"%Y-%m-%d" --date='yesterday')
shopt -s extglob

cd /my/working/directory/

sh ./stay/get_it_ios.sh
sh ./stay/get_it_mix.sh

cd stay
zip  ../stay_$date_stamp.zip  ./*201*

rm ./stay/!(*py|*sh)

そして、私が実行したいsh ./stay/get_it_ios.shsh ./stay/get_it_mix.sh一緒に、より正確なデータを取得します。シェルスクリプトのスコープでこれを行うことは可能ですか?

回答:


16

はい、そうです。2つのことを同時に行い、両方が完了するのを待つ場合は、次のようなことができます。

sh ./stay/get_it_ios.sh &  PIDIOS=$!
sh ./stay/get_it_mix.sh &  PIDMIX=$!
wait $PIDIOS
wait $PIDMIX

スクリプトは両方のスクリプトを並行して実行し、両方のスクリプトが完了するのを待ってから続行します。


4
wait引数なしで1つだけ実行して、両方のプロセスを待つことができます。
ステファンChazelas

2
スクリプトの最初の方を除いて、後の時点まで実行されるはずの3番目のプロセスのバックグラウンドを設定していました。wait私の意見では、あなたが何のためにいるのかを積極的に宣言する方が良いです。
DopeGhoti

あなたが言う場合には、並列に両方のスクリプトを実行して、あなたは彼らが同時に開始されることを意味するのですか?つまり、非常に大きな精度で(たとえば、原子時計を使用して)時間を記録できたとしましょう。両方一緒に始めるべきですか?スクリプトが1行ずつ読み取るためです。
Sigur 2017

1
ご想像のとおり、スクリプトはクロックサイクルまで同時に実行を開始しません。シェルスクリプトは、それらが与えられた順序でコマンドを実行し、その場合にのみ、最初のバックグラウンドにコマンドが(ほぼすべての場合に)第二の前に実行されます非常にわずか。「並列に実行する」と私が言ったとき、正確に言うと、両方が同時に実行されます(ジョブ管理、シグナル処理、および/またはカーネルの優先順位付けに従います)。
DopeGhoti 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.