尽管 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_mode
是 posix_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_mode
是 unix_behavior
,则 shebang 行用于确定作业的 shell。
您可以要求您的管理员考虑更改队列设置。
我想提交一个 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_mode
是posix_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_mode
是unix_behavior
,则 shebang 行用于确定作业的 shell。
您可以要求您的管理员考虑更改队列设置。