並列実行というと xargs や GNU parallel を思い出しますが、「エラーのあった実行のログを最後にまとめて出力する」ということを考えるとどちらも不十分でした。(できるのであれば教えてほしい) しかし、シェルには wait などの素敵な並列実行の仕組みが用意されているので、頑張って自分で実装してみました。 #!/bin/bash # # parallel.sh # usage: echo 1 2 3 4 5 | parallel.sh my_script.sh # 標準入力から受け取ったリストを引数として、引数で与えられたコマンドを実行する # 成功したコマンドの結果を先に出力してから失敗したコマンドの結果を最後にまとめて出力する list=$(cat) tmpdir=$(mktemp -d) for i in $list do ($@ $i > $tmpdir/$i.log