異なる複数のシェルスクリプトを並列化(バックグラウンド実行せず)

バックグラウンド並列が使えない状態で、異なる複数のシェルを実行する方法を紹介する。

以下の内容をシェルに記述して実行。

 

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 {}'