I have the following script to submit job with slurm:
#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
The first argument ($1) is my input, the second ($2) my output and I would lik the third ($3) do be my jobname. If I do like this, the job name is '$3'. How can I proceed to give the jobname as an argument of the script?
Thanks
The SBATCH directives are seen as comments by the shell and it does not perform variable substitution on $3
. There are several courses of action:
Option 1: pass the -J
argument on the command line:
sbatch -J thejobname submission_script.sh input.data output.res
Option 2: pass the script through stdin
replacing the position arguments ($1
, $2
, etc. by named ones)
IN=input.data OUT=output.res NAME=thejobname <submission_script.sh sbatch
Option 3: write a wrapper
#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
EOT
and use it like this:
submit.sh input.data output.red thejobname
Also note that the second shebang (#!/bin/bash
) is useless and ignored by the (parent) shell.