2017-03-06 137 views
2

我想向我的大學的Sungrid計算集羣提交一個bash腳本來在循環中運行可執行文件。當我登錄到服務器,我在bash:qsub正在csh中執行我的bash腳本儘管shebang

$ echo $SHELL 
/bin/bash 

我包括在腳本的頂部,一個bash家當,我傳遞給的qsub:

$ 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來執行腳本?

+0

您在羣集上獲得的shell類型是什麼? (echo $ SHELL) –

+0

@Finch_Powers它說'csh' ...所以我的整個職位是一個XY問題。我將編輯以關注實際問題。 – ApproachingDarknessFish

+0

嘗試明確執行bash:bash -c「echo $ SHELL」 – Steve

回答

1

您可以使用-S來設置提交作業的外殼(至少在扭矩中)。

例如:qsub shell_sub -S /bin/bash

3

最有可能你的隊列被配置有作爲shell_start_modeposix_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,那麼家當行被忽略並且作業(如果它不是二進制提交:-b y)開始由shell設置所定義的殼。
    • 爲什麼?從man page:「POSIX不認爲第一個腳本行註釋如'#!/ bin/csh'是重要的。因此批量排隊系統(P1003.2d)的POSIX標準需要一個兼容的排隊系統來忽略這些行,但改爲使用用戶指定或配置的默認命令解釋器。「
  • 如果shell_start_modeunix_behavior,那麼家當線被用來確定作業的shell。

您可以要求您的管理員考慮更改隊列設置。

+1

輸出是'shell/bin/csh shell_start_mode posix_compliant',所以你已經解決了爲什麼這種情況正在發生的奧祕。謝謝! – ApproachingDarknessFish