2016-07-21 2 views
1

bashスクリプト内で整数変数を使用して、Sun Grid Engine(qsubを使用)に送信しようとしています。 誰かがこれがなぜ機能しないのかを明確にすることはできますか?Sun Grid Engineでbashスクリプティングを理解しようとしています

NUMCORES=32

#$ -pe mpi $NUMCORES

(「エラーのため、スクリプト・ファイルを読み取ることができません!:数値が無効 文字列の最初の部分を "エラーが発生します$ NUMCORES" 何進数を含まない)

しかし、これはそうです:

#$ -pe mpi 32 

私はいくつかの解決策を見ましたawkやbcが含まれていますが、それらを動作させるように見えません。明らかに、私はbashスクリプティングの新機能です - 何か助けてくれてありがとう!

+0

本当にbashスクリプトですか?最初の行は何ですか? * "$ NUMCORESの最初の部分には小数点が含まれていません" *とはどういう意味ですか?後続部分には小数点が含まれますか?あなたは正確に '32'を含んでいると表示するか、まったく誠実ではないのですか? –

+1

同じスクリプトか、 'NUMCORES = 32'をエクスポートしていませんか? –

答えて

1

bashスクリプトの文字#は、コメントに信号を送ります。したがって、行#$ -pe mpi $NUMCORESでは、environement変数NUMCORESの値はコメントであるため、使用されません。

ただし、これらのコメントは、qsubコマンドにパラメータを渡すのに便利です。例えば、the man pageおよびthese examplesを参照してください。これらのパラメータは、コマンドラインに渡すことができることに注意してください:

qsub -pe mpi 32 myjob.sh 

代替ジョブを生成するのqsub前にコマンドを使用することです。

#!/bin/bash 
#$ -N useless 
#$ -cwd 
#$ -pe mpi $NUMCORES 
#$ -l h_vmem=6G 

echo 42 

はのは、環境変数を代用して、新しいファイルjob.shを作成するsed commandを使用してみましょう::のは、ジョブスクリプトjobgeneric.shがあることを想像してみましょう

export NUMCORES=32 
sed 's/$NUMCORES/'$NUMCORES'/g' jobgeneric.sh > job.sh 
cat job.sh 

Environment variable substitution in sedを参照してください。結果は次のとおりです。

#!/bin/bash 
#$ -N useless 
#$ -cwd 
#$ -pe mpi 32 
#$ -l h_vmem=6G 

echo 42 

今の仕事はqsub job.shを使用して送信することができます!

+0

ありがとうフランシス。私は、スクリプトを生成する前に、コアと他のパラメータの指定を扱うために、Pythonを使って同様のアプローチを取ってしまいました。その後、スクリプトは自動的にキューに登録されます。 – notadoctorthathelpspeople

関連する問題