2016-09-19 55 views
0

我有一个脚本,我试图提交到SGE集群(在Redhat Linux上)。脚本的第一个部分定义了从完全CWD路径当前文件夹,作为一个变量来在下游使用: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 

在bash,这按预期工作:

CWD:

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

运行脚本:

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

当我将作业提交到集群:

-bash-4.1$ qsub -V test.sh 

和检查日志文件:

This is a test. 
Missing }. 

有谁知道为什么提交作业是在说“缺少}”,当它在命令行的作品吗?我不确定我在这里错过了什么。

谢谢。

+1

我无法复制它。我建议尝试的是运行命令'qrsh'通过SGE登录到一个节点。然后从那里运行你的脚本。它并不完全一样,但我可以帮你找到问题。 –

回答

1

批处理调度程序的posix标准要求它们忽略#!而是使用配置到集群中的shell或由qsub的-S选项选择的shell。默认通常是csh。因此,在脚本中添加诸如#$ -S /usr/bin/bash之类的内容会导致它被bash解释。

或者,您可以说服群集管理员将队列从posix_compliant更改为unix_behavior。