Bash sge获取脚本中的脚本位置

Bash sge获取脚本中的脚本位置,bash,cluster-computing,Bash,Cluster Computing,我正在写一个脚本,通过sge集群中的qsub运行 我有几个需要在脚本中调用的可执行文件,它们都位于同一位置(与脚本本身相同)。因此,我想知道如何获取我正在执行的脚本的位置。 我有一个自动生成系统,它只是不正确的硬代码这个位置。代码应该类似于 #!/bin/bash #$ -S /bin/bash #$ -V #$ -cwd #$ -N "Job" exec="/path/to/this/script/"execNameJob $exec 我尝试了一些东西,但它们不起作用,

我正在写一个脚本,通过sge集群中的qsub运行

我有几个需要在脚本中调用的可执行文件,它们都位于同一位置(与脚本本身相同)。因此,我想知道如何获取我正在执行的脚本的位置。 我有一个自动生成系统,它只是不正确的硬代码这个位置。代码应该类似于

#!/bin/bash  
#$ -S /bin/bash  
#$ -V  
#$ -cwd
#$ -N "Job"  

exec="/path/to/this/script/"execNameJob  
$exec
我尝试了一些东西,但它们不起作用,人们被标记为复制品。以前的解决方案都不起作用。我正在使用 qsub-o console.out/tmp/qsubScript/qsubScript.sh。我想要得到的是脚本中的/tmp/qsubScript/path

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

echo " Directory SOURCE: $DIR"
echo " BaseDir 0: " $0
echo " SGE_ROOT: $SGE_ROOT"
echo " SGE_JOB_SPOOL_DIR: $SGE_JOB_SPOOL_DIR"
输出为:

目录源:/opt/gridengine/default/spool/compute-2-8/job_脚本
BaseDir 0:/opt/gridengine/default/spool/compute-2-8/job_scripts/9534
SGE_ROOT:/opt/gridengine
SGE_作业_SPOOL_DIR:/opt/gridengine/default/SPOOL/compute-2-8/active_作业/9534.1


主要问题是sge实现将我的脚本复制到一个作业脚本中,因此我失去了对原始脚本的引用。

我猜
qsub
将提交存储在一个单独的目录中,然后从那里运行它。到那时,原始队列条目的路径将丢失。如果需要将其包含在作业的元数据中,只需将其作为参数传递即可

提交目录通常不保证对运行作业的节点可见,因此您尝试的内容可能无法直接实现


根据平台的不同,您可能必须创建某种类型的自包含包,或者以某种方式在计算节点上引入所需的依赖项,作为作业启动处理的一部分。

不完全优雅,但问题一步解决。我使用相同的脚本发送qsub工作,并为给定的路径设置一个变量

#!/bin/bash  
#  
#$ -S /bin/bash
#$ -V
#$ -cwd
#$ -N "Job"

if [ -z ${var+x} ]; then 
  sPath="`dirname $0`"
  qsub -o console.txt -e error.txt -v var=$sPath $0 >qsub.txt
else
  echo " Set variable: $var"
fi

这我以前尝试过这个,但看起来SGE正在通过另一个脚本执行我的脚本。假设我在/tmp/qsubDir/中找到了我的脚本,当运行这个解决方案时,我得到了:Directory SOURCE:/opt/gridengine/default/spool/compute-3-15/job_script。我添加了这个示例,但没有成功