Bashスクリプトでは、「cmd1 [newline] cmd2」は「cmd1&cmd2」と同時に使用されますか?

Bashスクリプトでは、「cmd1 [newline] cmd2」は「cmd1&cmd2」と同時に使用されますか?

次のスクリプトを実行してください。

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

同じことをする

#!/usr/bin/bash

while true
do
  ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post 
  ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog
done

私の経験によれば、最初のスクリプトはnalog2番目のスクリプト(10分以上後)よりも速く(数秒以内)ファイルを生成し、後者がab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog完了するのを待つ必要があることを示しています。このようなことはあってはいけません。なぜなら私が今まで研究したことは2番目のスクリプトは完了をab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog待たずに起動するように設計されていますab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post。これら2つのabコマンドを同時に実行したいのですが、Bashでこれを達成できますか?

PSはい&、いいえ&&。私は&&それが何であるかを知っており、ここに適用したくありません。

答え1

いいえ、cmd1 [newline] cmd2前者のように同時ではありませんcmd1 & cmd2。前者はcmd1始める前に完了するのを待ちますcmd2

最初のコマンドの実行中に実行を続行する&には、コマンドを2行に分割してもそれを維持する必要があります。

ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post & ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

~になる

ab -c 700 -n 100000000000 -r http://crimea-post.ru/ >>crimea-post &
ab -c 700 -n 100000000000 -r http://nalog.gov.ru/ >>nalog

もう一度繰り返す前に両方のコマンドが完了したことを確認するには、を使用できますwait

他のシェル構成も並行性を提供します。特に、パイプ(または2つの出力ストリームをリダイレクトするために使用される一部のa | bシェルのバリエーション)は、続行する前に両方が完了するまで実行して待ちます。一部のシェルは補助プロセスもサポートしています(参照:a |& babさまざまなシェルでcoprocコマンドを使用する方法は?)とプロセスの置き換え(参照:さまざまなシェルでcoprocコマンドを使用する方法は?) を使用してコマンドを同時に実行できます。

バラよりシェルの制御およびリダイレクト演算子は何ですか?リスト終了者(含む&)とパイプ演算子の詳細。


a¹セカンダリプロセスとして実行されているkshは除外されます。

関連情報