我想向我的大学的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_mode
是posix_compliant
,则忽略Shebang行,并且作业(如果未作为二进制:-b y
提交),则从shell
设置定义的外壳开始。- 为什么?从"人"页面中:" POSIX不考虑第一个脚本行评论,例如'#!/bin/csh'是重要的。因此,批处理排队系统的POSIX标准(P1003.2d)因此需要一个合规的排队系统来忽略此类行但是要使用用户指定或配置的默认命令解释器。"
- 如果
shell_start_mode
是unix_behavior
,则使用Shebang线来确定作业的外壳。
您可以要求管理员考虑更改队列设置。
您可以使用-s。
例如:qsub shell_sub -S /bin/bash
谢谢,但是对我有不同的订单:
qsub -s/bin/bash shell_sub