尽管 shebang,qsub 仍在 csh 中执行我的 bash 脚本

qsub is executing my bash script in csh despite shebang

我想提交一个 bash 脚本到我大学的 Sungrid 计算集群到 运行 循环中的可执行文件。当我登录到服务器时,我在 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 来执行我的脚本?

您可以使用 -S 为提交的作业(至少在 Torque 中)设置 shell。

例如:qsub shell_sub -S /bin/bash

您的队列很可能配置为 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 开始由 shell 设置定义。
    • 为什么?来自 man page:"POSIX does not consider first script line comments such a ‘#!/bin/csh’ as being significant. The POSIX standard for batch queuing systems (P1003.2d) therefore requires a compliant queuing system to ignore such lines but to use user specified or configured default command interpreters instead."
  • 如果 shell_start_modeunix_behavior,则 shebang 行用于确定作业的 shell。

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