2017-03-06 130 views
2

我想向我的大学的Sungrid计算集群提交一个bash脚本来在循环中运行可执行文件。当我登录到服务器,我在bash:qsub正在csh中执行我的bash脚本尽管shebang

$ echo $SHELL 
/bin/bash 

我包括在脚本的顶部,一个bash家当,我传递给的qsub:

$ cat shell_sub 
#!/bin/bash 
#$ -N bSS_s13 
#$ -o logs/bSS_s13.log 
#$ -j y 
#$ -cwd 

echo $SHELL > shell.txt 

但是,当我提交上面的脚本:

qsub shell_sub 

相反,它执行CSH:

$ cat shell.txt 
/bin/csh 

如何强制qsub使用bash而不是csh来执行脚本?

+0

您在群集上获得的shell类型是什么? (echo $ SHELL) –

+0

@Finch_Powers它说'csh' ...所以我的整个职位是一个XY问题。我将编辑以关注实际问题。 – ApproachingDarknessFish

+0

尝试明确执行bash:bash -c“echo $ SHELL” – Steve

回答

1

您可以使用-S来设置提交作业的外壳(至少在扭矩中)。

例如:qsub shell_sub -S /bin/bash

3

最有可能你的队列被配置有作为shell_start_modeposix_compliant和所定义的shell被列为/bin/csh(这是默认值)。检查此:

$ qconf -sq <name-of-queue> | grep shell 
shell     /bin/bash 
shell_start_mode  unix_behavior 

如果你不知道你的队列的名称,它可能是all.q

  • 如果shell_start_modeposix_compliant,那么家当行被忽略并且作业(如果它不是二进制提交:-b y)开始由shell设置所定义的壳。
    • 为什么?从man page:“POSIX不认为第一个脚本行注释如'#!/ bin/csh'是重要的。因此批量排队系统(P1003.2d)的POSIX标准需要一个兼容的排队系统来忽略这些行,但改为使用用户指定或配置的默认命令解释器。“
  • 如果shell_start_modeunix_behavior,那么家当线被用来确定作业的shell。

您可以要求您的管理员考虑更改队列设置。

+1

输出是'shell/bin/csh shell_start_mode posix_compliant',所以你已经解决了为什么这种情况正在发生的奥秘。谢谢! – ApproachingDarknessFish