2012-12-07 38 views
2

我遇到了一個奇怪的問題/usr/bin/env ...我設計了一個簡單的腳本來顯示問題。腳本在Ruby中,但Python中類似的腳本也是如此。下面是該腳本:如何解決/ usr/bin/env agrument processing?

#!/usr/bin/env ruby 

p ARGV 

而另一個沒有在/ usr/bin中/ env的

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

p ARGV 

正如你看到的應該只是打印腳本參數。一個它完美的作品在頭節點上:

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

但在計算節點上運行時,它就會被卡住:

[[email protected] 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的正好在兩臺機器上是相同的:

[[email protected] test]$ md5sum /usr/bin/env 
7ada476000967f2e4cca2bc669045479 /usr/bin/env 
[[email protected] 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的可能會非常棘手。但是我們有很多使用這個軟件的軟件,我們不能僅僅修復它們。有什麼我可以解決這個問題嗎?

+0

你確定節點上PATH中的'ruby'有什麼好處嗎?它與'/ data/software/ruby​​-1.9.2-p180/bin/ruby​​'是否相同? – mvp

+0

事實上,問題是計算節點上的PATH變量。 – user1179926

回答

1

#!/usr/bin/env ruby導致腳本由$PATH中的第一個ruby可執行文件執行。您的$PATH在計算節點上可能會有所不同,很可能是因爲環境設置的方式爲qsub

一個快速和骯髒的解決將是:

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

,但你應該找一個更清潔的方式來確保$PATH設置正確執行你的Ruby腳本之前。

有關詳細信息,請which rubytype rubyecho $PATH在計算節點上,並確保該ruby命令實際工作。 (關於#!/usr/bin/env ...#!.../ruby的更多討論,參見my answerthis question)。