私はqsubスクリプトを持っています
#####----submit_job.sh---#####
#!/bin/sh
#$ -N job1
#$ -t 1-100
#$ -cwd
SEEDFILE=/home/user1/data1
SEED=$(sed -n -e "$SGE_TASK_ID p" $SEEDFILE)
/home/user1/run.sh $SEED
問題は-すべてのエラーファイルと出力ファイル(job1.eJOBID&job1.oJOBID)を、qsub submit_job.shを実行している場所から同じディレクトリに配置しますが、これらのファイル(出力とエラーログファイルを同じ別の場所に保存します)場所($ SEED_outputとして指定)。次のように行を変更しようとしました
/home/user1/run.sh $SEED -o $SEED_output
しかし、それはうまくいきませんでした。なにか提案を ??デフォルトの出力とエラーログファイルのパスと名前を指定するにはどうすればよいですか?
通常、エラーファイルと出力ファイルは、qsubスクリプトのpbsディレクティブとして、または次のようにqsubスクリプトのコマンドラインオプションとして指定されます。
#! /bin/bash
#PBS -q queue_name
#PBS -A account_name
#PBS -l nodes=12:ppn=12
#PBS -l walltime=18:00:00
#PBS -e /mypath/error.txt
#PBS -o /mypath/output.txt
または、qsubのコマンドラインオプションとして次のようにします。
qsub -o /mypath/output.txt -e /mypath/error.txt submit_job.sh
最初のオプションでは、シェルはコメント化された行を見ないので、変数を使用できないと思います。さらに、PBSはシェルよりも前にコメント行を処理すると思います。 qsubを呼び出すときにパスがわかっている場合は、2番目のオプションを試すことができます。または、スクリプト自体の出力とエラーをリダイレクトすることもできます。
/home/user1/run.sh $SEED > ${SEED}/output.txt 2> ${SEED}/error.txt
3番目のオプションがおそらく最も簡単です。出力ファイルとエラーファイルは空の可能性がありますが、実行ディレクトリに作成される可能性があります。
一見すると、-o宣言で変数を括弧で囲む必要があります。
/home/user1/run.sh $SEED -o ${SEED}_output
それ以外の場合、bashは$ {SEED_output}と呼ばれる、存在しない変数を探しています。