Variables 在Oracle/Sun GridEngine中执行bash脚本

Variables 在Oracle/Sun GridEngine中执行bash脚本,variables,sungridengine,Variables,Sungridengine,我有一个脚本,它首先定义一系列变量,然后用这些变量运行程序。但是,该脚本被网格引擎拒绝(它在工作站上工作,但作为阵列作业的一个组件,它需要通过SGE运行),因为变量被读取为命令,导致“未找到命令”响应 使用以下方法完全再现错误: #!/bin/bash #$ -M not.real@email.address #$ -m be #$ -o /scratch/MScGWAS/Output #$ -e /scratch/MScGWAS/Errors #$ -q long.q #$ -cwd CHR=

我有一个脚本,它首先定义一系列变量,然后用这些变量运行程序。但是,该脚本被网格引擎拒绝(它在工作站上工作,但作为阵列作业的一个组件,它需要通过SGE运行),因为变量被读取为命令,导致“未找到命令”响应

使用以下方法完全再现错误:

#!/bin/bash
#$ -M not.real@email.address
#$ -m be
#$ -o /scratch/MScGWAS/Output
#$ -e /scratch/MScGWAS/Errors
#$ -q long.q
#$ -cwd
CHR=$1
CHUNK_START=`printf "%.0f" $2`
CHUNK_END=`printf "%.0f" $3`
输出示例:

CHR=1: Command not found.
CHUNK_START=1: Command not found.
CHUNK_END=5000000: Command not found.

如何让GridEngine使用bash作为此脚本的解释器?

您不是使用
bash
执行脚本,而是使用不同的shell(例如
tcsh
)。

您不是使用
bash
执行脚本,而是使用不同的shell(例如
tcsh
).

听起来您的网格引擎集群配置了posix_兼容模式下的队列,并将/bin/csh作为默认shell。在posix#兼容模式下,初始#!忽略,您需要通过命令行开关或使用合适的#$指令指定shell。 将以下行添加到脚本中应该可以工作:


#$-S/bin/bash

听起来您的网格引擎集群配置了posix_兼容模式下的队列,并将/bin/csh作为默认shell。在posix#兼容模式下,初始#!忽略,您需要通过命令行开关或使用合适的#$指令指定shell。 将以下行添加到脚本中应该可以工作:


#$-S/bin/bash

如果脚本中没有定义它们,它将如何知道它们代表什么?您实际如何运行此脚本?下面是一个实验:将您在此处发布的行(从网页中,而不是从原始文件中)复制并粘贴到新脚本中。在工作站上本地运行该脚本。看看它是否重现了问题。我打赌不会的。@user2518990这不是重点。关键是它已经是一个正确的bash脚本,您的问题是GridEngine如何执行它,而不是bash,所以您不应该问“bash”问题,而应该问“GridEngine”问题。您知道您的SGE服务器在
/bin/bash
上有一个bash shell吗?Solaris当然没有保存它的历史。如果脚本中没有定义它们,它将如何知道它们代表什么?您实际上是如何运行此脚本的?下面是一个实验:将您在此处发布的行(从网页中,而不是从原始文件中)复制并粘贴到新脚本中。在工作站上本地运行该脚本。看看它是否重现了问题。我打赌不会的。@user2518990这不是重点。关键是它已经是一个正确的bash脚本,您的问题是GridEngine如何执行它,而不是bash,所以您不应该问“bash”问题,而应该问“GridEngine”问题。您知道您的SGE服务器在
/bin/bash
上有一个bash shell吗?Solaris当然没有将其保存在那里的历史。