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

App*_*ish 3 bash csh shebang qsub sungridengine

我想向我大学的 Sungrid 计算集群提交一个 bash 脚本,以循环运行可执行文件。当我登录服务器时,我处于 ​​bash 中:

$ echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

我在传递给 qsub 的脚本顶部添加了一个 bash shebang:

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

echo $SHELL > shell.txt
Run Code Online (Sandbox Code Playgroud)

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

qsub shell_sub
Run Code Online (Sandbox Code Playgroud)

它而是在 csh 中执行:

$ cat shell.txt
/bin/csh
Run Code Online (Sandbox Code Playgroud)

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

kgu*_*win 5

您的队列很可能配置为shell_start_mode并且posix_compliant定义shell列出为/bin/csh(这是默认值)。要检查这一点:

\n\n
$ qconf -sq <name-of-queue> | grep shell\nshell                 /bin/bash\nshell_start_mode      unix_behavior\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
    \n
  • 如果shell_start_modeposix_compliant,那么 shebang 行将被忽略,并且作业(如果它不是以二进制形式提交:)-b y将使用由shell ) 。\n\n
      \n
    • 为什么?从手册页:“POSIX 不认为第一个脚本行注释,例如 \xe2\x80\x98#!/bin/csh\xe2\x80\x99 是重要的。批量排队系统的 POSIX 标准 (P1003.2d)因此需要一个兼容的排队系统来忽略这些行,而是使用用户指定或配置的默认命令解释器。”
    • \n
  • \n
  • 如果shell_start_modeunix_behavior,则使用 shebang 行来确定作业的 shell。
  • \n
\n\n

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

\n