如何修复/ usr / bin / env参数处理?

时间:2012-12-07 08:40:05

标签: linux cluster-computing

我遇到了一个奇怪的问题 / 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 处理参数可能很棘手。但是我们有很多软件使用它,我们不能只修复它们。我能做些什么来解决这个问题吗?

1 个答案:

答案 0 :(得分: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

但是你应该找到一种更简洁的方法来确保在执行Ruby脚本之前正确设置$PATH

有关更多详细信息,请在计算节点上尝试which rubytype rubyecho $PATH,并确保ruby命令确实有效。

(有关#!/usr/bin/env ...#!.../ruby的更多讨论,请参阅my answerthis question)。