]> git.donarmstrong.com Git - uiuc_igb_scripts.git/blobdiff - dqsub
only escape if the command contains a space
[uiuc_igb_scripts.git] / dqsub
diff --git a/dqsub b/dqsub
index 27b8b39c5b43e97a0da442b65e241fd9aa247438..1682d058c4871516720932a1a80f29ef2cd447ad 100755 (executable)
--- a/dqsub
+++ b/dqsub
@@ -31,6 +31,8 @@ dqsub [options]
    --ppn processors per node to use
    --mem memory to request
    --dir Directory to run the script in (default current directory)
+   --account, -A Account name to use
+   --join, -J join error and output streams (default)
    --name, -N Name of the job
    --debug, -d debugging level (Default 0)
    --help, -h display this help
@@ -60,6 +62,15 @@ command run in the current directory.
 File to read array arguments from. If not provided, and B<--array> is
 given, arguments will be read from STDIN.
 
+=item B<--account, -A>
+
+Account name to use
+
+=item B<--join, J>
+
+Whether to join STDOUT and STDERR. On by default; disable with
+C<--nojoin>.
+
 =item B<--debug, -d>
 
 Debug verbosity. (Default 0)
@@ -94,6 +105,7 @@ my %options = (nodes           => 1,
                man             => 0,
                interactive     => 0,
                array_per_job   => 1,
+               join            => 1,
               );
 
 GetOptions(\%options,
@@ -106,6 +118,8 @@ GetOptions(\%options,
            'array_slot_limit|array-slot-limit=i',
            'array_all_in_one_job|array-all-in-one-job!',
            'ppn|processors-per-node=i',
+           'account|A=s',
+           'join|J!',
            'mem|memory=s',
            'time|walltime=s','cputime|cput=s','host=s',
            'pmem|process_mem|process-mem=s',
@@ -136,7 +150,10 @@ if ($options{interactive} and @ARGV) {
 }
 
 # pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS;
-print STDERR join("\n",@USAGE_ERRORS) and exit 1 if @USAGE_ERRORS;
+if (@USAGE_ERRORS) {
+    print STDERR map {"$_\n"} @USAGE_ERRORS;
+    exit 1;
+}
 
 # OK. Generate the options to qsub which we'll be using
 my @qsub_options = generate_qsub_options(\%options,\@ARGV);
@@ -178,6 +195,9 @@ sub generate_qsub_options{
     if (defined $options->{ppn}) {
         $l[$#l] .= ':ppn='.$options->{ppn};
     }
+    if (defined $options->{account}) {
+        push @qo,'-A',$options->{account};
+    }
     my %l_options =
         (mem => 'vmem',
          time => 'walltime',
@@ -199,7 +219,13 @@ sub generate_qsub_options{
     if ($options->{name}) {
         push @qo,'-N',$options->{name};
     } else {
-        push @qo,'-N',join('_',@{$args}[0..min($#{$args},2)]);
+        push @qo,'-N',join('_',
+                           map {my $a = $_; $a =~ s/[^a-zA-Z0-9]*//g; $a;}
+                          @{$args}[0..min($#{$args},2)]);
+    }
+    # join error and output streams
+    if ($options->{join}) {
+        push @qo,'-j','oe';
     }
     return @qo;
 }
@@ -234,7 +260,7 @@ sub write_qsub_script {
     my ($opt,$arg,$array) = @_;
 
     my $script = "#!/bin/bash\n";
-    my $command = join(' ',map {qq('$_')} @{$arg});
+    my $command = join(' ',map {$_ =~ /\s/?qq('$_'):$_} @{$arg});
         $script .= <<EOF;
 # this script was written by dqsub
 EOF