东西是错误的`#`在Ruby脚本(家当)(hashbang)

问题描述:

我有以下内容的Ruby脚本:东西是错误的`#`在Ruby脚本(家当)(hashbang)

#!/data1/thirdparty/ruby/bin/ruby -I/data1/thirdparty/ruby/lib/ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/gems/2.0.0/gems/ruby-net-ldap-0.0.4 -I/data1/thirdparty/ruby/lib/ruby/site_ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/2.0.0/i686-linux 

当我运行它引发以下错误的脚本:

<internal:gem_prelude>:1:in `require': cannot load such file -- rubygems.rb (LoadError) 
     from <internal:gem_prelude>:1:in `<compiled>' 

我把程序的strace的,发现这个在strace的:

open("/data1/thirdparty/ruby/lib/ruby/2.0.0 -I/data1/thirdparty/enc/encdb.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory) 

所以它看起来像红宝石是无法处理-I正确,因为它将它包含在文件路径本身中。我如何强制脚本使用-I作为包含路径指令?

+0

这有什么好做的Ruby。这是关于如何正确使用您的操作系统,因此属于[超级用户](http://superuser.com/)。它基本上只是“我如何在我的shell中调用程序”的变体。 –

+0

http://*.com/a/4304187/2988 –

试试这个:

#!/bin/bash 
exec /data1/thirdparty/ruby/bin/ruby -I/data1/thirdparty/ruby/lib/ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/gems/2.0.0/gems/ruby-net-ldap-0.0.4 -I/data1/thirdparty/ruby/lib/ruby/site_ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/2.0.0/i686-linux -x "$0" "[email protected]" 

#!ruby 
p "this is my ruby code" 

我会使用rvm和bundler。然后,您可以使用rvm包装器(例如,如果在cron作业中运行)调用脚本,或使用bundle exec进行开发。您将需要配置好您的*.gemspec(例如运行bundle new mygem并查看mygem.gemspec)。

另一种可能性将是写一个shell脚本,包括

/data1/thirdparty/ruby/bin/ruby -I/data1/thirdparty/ruby/lib/ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/gems/2.0.0/gems/ruby-net-ldap-0.0.4 -I/data1/thirdparty/ruby/lib/ruby/site_ruby/2.0.0 -I/data1/thirdparty/ruby/lib/ruby/2.0.0/i686-linux <yourfile.rb> 

Btw。 #!行称为shebang或hashbang,以防您想要研究发生的情况。