シェルスクリプト内でコマンドの同時インスタンスを実行する

シェルスクリプト内でコマンドの同時インスタンスを実行する

私はまだbashスクリプトを学んでいることがわからないことが多いということから申し上げ始めます。私が何かを逃した場合は、私を叱ってください。

次に、2つの異なるホストにpingを実行してファイルに出力する単純なbashスクリプトを作成します。この問題を解決し、動作しています。好奇心が強いため、ping出力の前後の日付をスクリプトに追加してpingを実行するのにかかる時間がわかりました。 pingを1秒間隔、ping 10個、ホスト2個に設定しました。私の最初のデートのタイムスタンプ(昔…)は14:36:20でした。 2番目の日付(ping以降)のタイムスタンプは14:36:40です。

したがって、日付は両方のpingが完了するのを待ちます。これは、pingが順次実行されることを意味します。

同時に実行して、スクリプトを実行するのに20秒ではなく10秒かかりますか?

私のスクリプトの一部は次のとおりです。

date >> teste.txt
cat hosts.txt |  while read output
do   ping -c 10 -i 1 "$output" >> teste.txt
done
date >> teste.txt

このスクリプトを使用してやりたいことがいくつかありますが、Barsaで満足のいく答えが見つからない場合にのみ質問します。

PS:host.txtはpingのためにホストを保存する場所です。

ベストアンサー1

あなたの質問フレーズは少し難しいですが、次のようなものを探していると思います。

command & 
command &
wait

スクリプトはバックグラウンドで両方のコマンドを実行し、応答を待ちます。

しかし、あなたの場合は、競争条件に注意する必要があります。個々のコマンドの出力を一時ファイルに送信し、それをデフォルトファイルに入れることができるので、次のことができます。

command > "${tmp1}" & 
command > "${tmp2}" & 
wait
cat "${tmp1}" "${tmp2}" >> "${main}"
rm -f "${tmp1}" "${tmp2}"

アップデート:xargsを試すことができます(例:https://stackoverflow.com/questions/15755422/linux-bash-script-to-ping-multiple-hosts-simultaneously)

おすすめ記事