尽管Shebang,QSUB仍在CSH执行我的bash脚本



我想向我的大学的SunGrid计算集群提交Bash脚本,以在循环中运行可执行文件。当我登录服务器时,我正在bash中:

$ echo $SHELL
/bin/bash

,我在我传递给QSUB的脚本顶部包括一个bash shebang:

$ 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执行我的脚本?

很可能您的队列用shell_start_mode配置为posix_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,则忽略Shebang行,并且作业(如果未作为二进制:-b y提交),则从shell设置定义的外壳开始。
    • 为什么?从"人"页面中:" POSIX不考虑第一个脚本行评论,例如'#!/bin/csh'是重要的。因此,批处理排队系统的POSIX标准(P1003.2d)因此需要一个合规的排队系统来忽略此类行但是要使用用户指定或配置的默认命令解释器。"
  • 如果shell_start_modeunix_behavior,则使用Shebang线来确定作业的外壳。

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

您可以使用-s。

例如:qsub shell_sub -S /bin/bash

谢谢,但是对我有不同的订单:

qsub -s/bin/bash shell_sub

最新更新