TOP →
覚え書き →
シェル(Shell) → This Page
シェル(Shell)サンプル
findでマッチしたファイルを別シェルで並列処理(バックグラウンド実行)
前提
実施環境(以下の両方でテストしてます)
Red Hat 5.3+bash-3.2
Windows7+Cygwin1.7.9
サンプル構成
以下のような構成で作成します。
root
├findexec.sh
├sub.sh
└conf
├1_conf.sh
├2_conf.sh
├3_conf.sh
└dummy.sh
findexec.sh は conf ディレクトリから、ファイル名の末尾が _conf.sh のファイルを検索します。
マッチしたファイルがあれば、そのファイルを引数として sub.sh を非同期で実行します。
sub.sh は非同期で実行されていることが分かりやすいようにスリープ処理を入れます。
サンプル
findexec.sh
#!/bin/sh
# --------------------------------------------------
# findでマッチしたファイルを別シェルで並列処理
# --------------------------------------------------
echo "main - Start"
# ディレクトリ移動←ご自分の環境に合わせて下さい
cd /home/mitchy/shell/02/
# confディレクトリにある、ファイル名の末尾が _conf.sh のファイルごとにsub.shを実行
# sub.shはアンパサンドを後ろにつけて非同期実行
find ./conf -name *_conf.sh -type f -exec /bin/sh -c './sub.sh {} &' \;
echo "main - End"
# 処理を終了
exit 0
sub.sh
#!/bin/sh
# --------------------------------------------------
# 呼び出される側のシェルスクリプト
# --------------------------------------------------
echo "sub - Start"
echo $*
# 引数の内容読み込み
. $*
# 1秒スリープして出力
sleep 1
echo ${VALUE_A}
# 1秒スリープして出力
sleep 1
echo ${VALUE_B}
# 1秒スリープして出力
sleep 1
echo ${VALUE_C}
echo "sub - End"
exit 0
conf/1_conf.sh
#!/bin/sh
# --------------------------------------------------
# 設定ファイル
# --------------------------------------------------
VALUE_A=A1
VALUE_B=B1
VALUE_C=C1
conf/2_conf.sh
#!/bin/sh
# --------------------------------------------------
# 設定ファイル
# --------------------------------------------------
VALUE_A=A2
VALUE_B=B2
VALUE_C=C2
conf/3_conf.sh
#!/bin/sh
# --------------------------------------------------
# 設定ファイル
# --------------------------------------------------
VALUE_A=A3
VALUE_B=B3
VALUE_C=C3
conf/dummy.sh
#!/bin/sh
# --------------------------------------------------
# 設定ファイル
# --------------------------------------------------
VALUE_A=AX
VALUE_B=BX
VALUE_C=CX
実行結果
呼び出したそれぞれ呼び出したsub.shが並列処理されていることが分かります。
main - Start
sub - Start
./conf/1_conf.sh
sub - Start
./conf/2_conf.sh
main - End
sub - Start
./conf/3_conf.sh
A1
A2
A3
B1
B2
B3
C1
sub - End
C2
sub - End
C3
sub - End
サンプルのダウンロード
サンプル一式(zip)
文字コードUTF-8、改行コードLFです。
更新履歴
2011/08/06 本ページ新規追加
TOP →
覚え書き →
シェル(Shell) → This Page