2016-09-19 3 views
0

SGEクラスタ(Redhat Linux上)に送信しようとしているスクリプトがあります。変数下流使用するように、スクリプトの最初の部分は、完全CWDパスから現在のフォルダを定義:bashでSGEクラスタ - 送信後にスクリプトが失敗する - 端末で動作する

#!/usr/bin/bash 
# 
#$ -cwd 
#$ -A username 
#$ -M [email protected] 
#$ -j y 
#$ -m aes 
#$ -N test 
#$ -o test.log.txt 

echo 'This is a test.' 
result="${PWD##*/}" 
echo $result 

、これは期待どおりに動作:

CWD:

-bash-4.1$ pwd 
/home/user/test 

runスクリプト:

-bash-4.1$ bash test.sh 
This is a test. 
test 

私はクラスタにジョブを送信:

-bash-4.1$ qsub -V test.sh 

とログファイルを調べる:それは右、コマンドラインから働くとき、ジョブの投入は、「}見つからない」と言っている理由誰もが

This is a test. 
Missing }. 

を知っていますか?私はここで何が欠けているのか分からない。

ありがとうございました。

+1

私はそれを再現できません。 SGEを介してノードにログインするために 'qrsh'コマンドを実行することをお勧めします。そこからスクリプトを実行します。それはまったく同じことをしませんが、あなたが問題を見つけるのを助けるかもしれません。 –

答えて

1

バッチスケジューラのposix標準では、#!を無視する必要があります。代わりにクラスタに構成されたシェルか、qsubの-Sオプションで選択されたシェルを使用してください。デフォルトは通常cshです。したがって、#$ -S /usr/bin/bashのようなものをスクリプトに追加すると、bashによって解釈されます。

また、クラスタの管理者がqueueをunix_behaviorにposix_compliantから変更するように設定することもできます。

関連する問題