cshでxargsによる並列実行


疑似関数

コマンドxargsを使うと、並列実行ができる。
https://qiita.com/shungok/items/f852be01f08568991f18

このxargsに与えるコマンドが複雑な時、bashなら関数をつくってあげればよいと思う。
しかし、cshでは関数が使えない。

シェルスクリプトを生成して、そのコマンドをxargsに食わせるとうまくいった。

echo 'echo $argv[1]' > func.tmp
csh ./func.tmp hoge

とすると、

echo $argv[1]

というシェルスクリプトが生成される。これを早速次の行で使うことで、疑似関数が作れる。

xargsによる並列実行

たとえば、sleepコマンドを1~10秒を4並列実行する場合、

echo 'echo "sleep $argv[1]" ; sleep $argv[1]' > func.tmp
seq 1 10 | xargs -L1 -P4 csh ./func.tmp 
rm func.tmp

となる。
もちろん、func/tmpは使い終わったら消しておく。