2

/ usr / bin/envで奇妙な問題が発生しました...問題を表示するための簡単なスクリプトを設計しました。スクリプトはRubyですが、Pythonの同様のスクリプトでも同じことが起こります。スクリプトは次のとおりです。

#!/usr/bin/env ruby

p ARGV

そして/usr/ bin / envのない別のもの:

#!/data/software/ruby-1.9.2-p180/bin/ruby

p ARGV

ご覧のとおり、スクリプト引数を出力するだけです。ヘッドノードで問題なく動作します。

[gusev@scyld test]$ which ruby
/data/software/ruby-1.9.2-p180/bin/ruby
[gusev@scyld test]$ ./script.no_usr_bin_env.rb 1 2 3
["1", "2", "3"]
[gusev@scyld test]$ ./script.usr_bin_env.rb 1 2 3
["1", "2", "3"]

しかし、コンピューティングノードで実行すると、スタックします。

[gusev@scyld test]$ qsub -d $(pwd) -I
qsub: waiting for job 176427.scyld.localdomain to start
qsub: job 176427.scyld.localdomain ready

-bash-3.2$ ./script.no_usr_bin_env.rb 1 2 3
["1", "2", "3"]
-bash-3.2$ ./script.usr_bin_env.rb 1 2 3
<stuck>

/ usr / bin / envは、両方のマシンでまったく同じです。

[gusev@scyld test]$ md5sum /usr/bin/env
7ada476000967f2e4cca2bc669045479  /usr/bin/env
[gusev@scyld test]$ qsub -I -d $(pwd)
qsub: waiting for job 176428.scyld.localdomain to start
qsub: job 176428.scyld.localdomain ready

-bash-3.2$ md5sum /usr/bin/env
7ada476000967f2e4cca2bc669045479  /usr/bin/env

/ usr / bin/envを使用した引数処理には注意が必要です。しかし、これを使用しているソフトウェアはたくさんあり、それらすべてを修正することはできません。これを修正するために私にできることはありますか?

4

1 に答える 1

1

#!/usr/bin/env rubyスクリプトは、の最初のruby実行可能ファイルによって実行され$PATHます。$PATH計算ノードでは異なる可能性があります。これは、によって環境が設定されている方法が原因である可能性がありますqsub

迅速で汚い修正は次のようになります。

PATH=/data/software/ruby-1.9.2-p180/bin:$PATH ./script.usr_bin_env.rb 1 2 3

$PATHただし、Rubyスクリプトを実行する前に、それが正しく設定されていることを確認するためのよりクリーンな方法を見つける必要があります。

詳細については、計算ノードでwhich rubyまたはtype rubyを試して、コマンドが実際に機能することを確認してください。echo $PATHruby

#!/usr/bin/env ...vsの詳細については、この質問に対する私の回答#!.../ruby参照してください)。

于 2012-12-07T08:46:43.027 に答える