2016-03-29 9 views
5

ich das folgende Skript mit slurm einreichen Job:Sbatch: pass Jobnamen als Eingabeargument

#!/bin/sh 
#!/bin/bash 
#SBATCH -J $3 #job_name 
#SBATCH -n 1 #Number of processors 
#SBATCH -p CA 

nwchem $1 > $2 

Das erste Argument ($ 1) ist mein Eingang, der zweite ($ 2) meine Ausgabe und ich würde lik der dritte ($ 3) ist mein Jobname. Wenn mir das gefällt, lautet der Jobname '$ 3'. Wie kann ich fortfahren, den Jobnamen als Argument des Skripts anzugeben?

Dank

Antwort

5

Die SBATCH Richtlinien werden als Kommentare von der Shell gesehen und es Variablensubstitution nicht auf $3 zuführen. Es gibt mehrere Vorgehensweisen:

Option 1: passieren die -J Argument auf der Befehlszeile:

sbatch -J thejobname submission_script.sh input.data output.res 

Option 2: pass das Skript durch stdin die Positions Argumente ersetzt ($1, $2 usw. durch genannt diejenigen)

IN=input.data OUT=output.res NAME=thejobname <submission_script.sh sbatch 

Option 3: schreiben einen 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 

und verwenden Sie es wie folgt aus:

submit.sh input.data output.red thejobname 

Beachten Sie auch, dass die zweite shebang (#!/bin/bash) ist nutzlos und von der (übergeordneten) Shell ignoriert.