NQSでシンプルなコマンド列ファイルから実行する

NQSという並列ジョブ管理の仕組みがある。
ジョブを

#!/bin/bash

commandX

のようなファイルを作り(command.shとか)

# qsub command.sh

(qsubコマンドのオプションは省いてある)
のようにジョブを発行すると、"commandX"というコマンドのジョブを適当に割り振ってくれるものである。

今、commandX1, commandX2,....,commandXk というk個のコマンドを発行したいとする。
k個の"xxxxx.sh"ファイルを作るのは面倒くさいので、
シンプルな

commandX1
commandX2
...
commandXk

というファイル"commandlist.txt"を作ってやり、このファイルを受け取ると、
先の"xxxxx.sh"のファイルを作った上で、"qsub xxxx.sh"というコマンドを発行してくれるようなスクリプト("qsubexe.pl")を作ってみた。

# perl ./qsubexe.pl commandlist.txt

commandXi の末尾には、"&"を書いた方が(なぜかわからないけれども)無難なようだ。
まだ確認していないのは、perlスクリプトに書かせた "xxxxx.sh"ファイルは、どの時点で消してもよいかである。

#! /usr/bin/perl -w

=head1 header

 ###########################################################
 #	

 #

=cut

use strict;


&main(@ARGV);
exit;

=head1 main

 ###########################################################
 #
 #      #main関数
 #      #    \arg1        $input_file : format_fixed input file
 #      コマンドが1行1コマンドで書かれているファイルを読み込み、
 #      コマンド数のqsubに渡すファイルを作成
 #      その上でコマンド数のqsubコマンドを発行する
 #
 
=cut

sub main(@){
  my ($input_file)=@_;
 open (INPUT, "$input_file");
 my @twodim;
 my $linecount=0;
 my $columncount=0;
 my @files;
 my $chmodcommand;
 my $command;

 while(<INPUT>){
  $files[$linecount]="$input_file"."_"."$linecount"."\.sh";

  open (OUT, ">$files[$linecount]");

  print OUT "#!/bin/bash\n\n$_";

  close OUT;
  $command = "qsub $files[$linecount]";

  system($command);
  $linecount++;
 }
 close INPUT;

}