在Oracle/Sun GridEngine中执行bash脚本



我有一个脚本,它首先定义一系列变量,然后用这些变量运行程序。然而,该脚本被网格引擎拒绝(它在工作站上工作,但作为阵列作业的一个组件,它需要通过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)执行脚本。

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

#$-S/bin/bash

最新更新