2017-03-06 3 views
2

大学のSungridコンピューティングクラスタにbashスクリプトを送信して、実行可能ファイルをループで実行します。qsubはshebangにもかかわらずcshでmy bashスクリプトを実行しています

$ echo $SHELL 
/bin/bash 

そして私は、私はqsubのに渡すスクリプトの先頭に、bashのシェバング、次のとおりです:私は、サーバーにログインすると、私はbashでよ

$ 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 

qshにcshの代わりにbashを強制的に実行させるにはどうすればいいですか?

+0

クラスタにはどのようなシェルタイプがありますか? (echo $ SHELL) –

+0

@Finch_Powersそれは 'csh'と言う...私の投稿全体はXYの問題です。私は実際の問題に焦点を合わせて編集します。 – ApproachingDarknessFish

+0

明示的にbashを実行してみてください:bash -c "echo $ SHELL" – Steve

答えて

1

サブミットしたジョブのシェルを(少なくともTorqueで)-Sを使用して設定できます。例えば

qsub shell_sub -S /bin/bash

3

ほとんどの場合、あなたのキューがposix_compliantとしてshell_start_modeで構成されており、定義された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 yshell設定によって定義されたシェルで開始されます。
    • なぜですか? man pageから: "POSIXでは、重要なものとして '#!/ bin/csh'のような最初のスクリプト行コメントは考慮されていません。したがって、バッチキューイングシステム(P1003.2d)のPOSIX標準では、代わりにユーザーが指定または設定したデフォルトのコマンドインタープリタを使用します。
  • shell_start_modeunix_behaviorの場合、ジョブのシェルを決定するためにシバンラインが使用されます。

キューの設定を変更することを管理者に依頼することができます。

+1

出力は 'shell/bin/csh shell_start_mode posix_compliant'なので、*なぜ*これが起こったのかの謎を解いてきました。ありがとう! – ApproachingDarknessFish

関連する問題