タイトル
 メニューにないコーナーはTopからいけます
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
Valid CSS!