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