Slurm
在 .sh 腳本中將參數傳遞給註釋
我是使用 .sh 腳本的初學者,所以請原諒我的無知。這是我的問題:
要將我的作業送出到我們的集群,相應的送出文件必須包含一個“slurm header”,並且看起來像這樣。
#!/bin/sh # ########## Begin Slurm header ########## # #SBATCH --job-name=blabla # ########### End Slurm header ########## # Load module module load math/matlab/R2020a # Start a Matlab program matlab -nodesktop -r "program $1 $2" exit
請注意,我將兩個參數傳遞給這個 .sh 文件,然後將它們傳遞給 matlab 程序。如何根據輸入參數使 Slurm 標頭中的作業名稱動態化?
簡單地按預期寫作
#SBATCH --job-name=blabla$1$2
是行不通的。
我不認為你可以。所有以開頭的行都
#
被 shell 忽略,$1
and$2
是 shell 的東西。許多作業管理器,包括 slurm,都有一些寫為 shell 註釋的命令,因此被 shell 忽略,但由作業管理器讀取。這就是你的SBATCH
線:#SBATCH --job-name=blabla
因此,無法在同一腳本中動態執行此操作。但是,您可以製作一個執行此操作的包裝腳本。例如:
#!/bin/sh cat <<EoF #!/bin/sh # ########## Begin Slurm header ########## # #SBATCH --job-name=blabla$1$2 # ########### End Slurm header ########## # Load module module load math/matlab/R2020a # Start a Matlab program matlab -nodesktop -r "program $1 $2" exit EoF
如果您現在使用兩個參數執行此腳本,它將列印出您真正想要的腳本:
$ foo.sh param1 param2 #!/bin/sh # ########## Begin Slurm header ########## # #SBATCH --job-name=blablaparam1param2 # ########### End Slurm header ########## # Load module module load math/matlab/R2020a # Start a Matlab program matlab -nodesktop -r "program param1 param2" exit
所以你可以這樣做:
foo.sh param1 param2 > slurm_script.sh