異なる複数のシェルスクリプトを並列化(バックグラウンド実行せず)
バックグラウンド並列が使えない状態で、異なる複数のシェルを実行する方法を紹介する。
以下の内容をシェルに記述して実行。
JOB_N=5
#############################
cat <<'EOF' > branch.sh
#!/bin/bash
if [ $1 -eq 1 ]; then
sh job1.sh
elif [ $1 -eq 2 ]; then
sh job2.sh
elif [ $1 -eq 3 ]; then
sh job3.sh
elif [ $1 -eq 4 ]; then
sh job4.sh
elif [ $1 -eq 5 ]; then
sh job5.sh
fi
EOF
#############################
seq $JOB_N| xargs -P $JOB_N -I{} sh ./branch.sh {}
rm branch.sh
複数ファイルが必要でごちゃごちゃするが、これで2つのシェルを並列化できる。
追記
#!/bin/bash
function test_t(){
echo $1 > $1.txt
}
export -f test_t
seq 3| xargs -t -P 3 -I{} bash -c 'test_t {}'