Ruby 1.9如果我有一个shebang指向ruby,为什么系统不能看到它?

我正在使用Ubuntu。 我正在尝试运行一个ruby文件todo.rb我添加了这个shebang作为文件的第一行

#!/usr/bin/env ruby 

我转到rb文件所在的目录,然后运行todo.rb并获取错误todo.rb: command not found

所以我直接进入了/ usr / bin目录。 我找到了env命令并运行它。 env命令的输出显示ruby路径和ruby数据:

 MY_RUBY_HOME=/home/tallercreativo/.rvm/rubies/ruby-1.9.2-p290 PATH=/home/tallercreativo/.rvm/gems/ruby-1.9.2-p290/bin:/home/tallercreativo/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/tallercreativo/.rvm/rubies/ruby-1.9.2-p290/bin:/home/tallercreativo/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games GEM_PATH=/home/tallercreativo/.rvm/gems/ruby-1.9.2-p290:/home/tallercreativo/.rvm/gems/ruby-1.9.2-p290@global RUBY_VERSION=ruby-1.9.2-p290 

因此,我无法使其工作,我将shebang改为直接指向ruby:

 #!/home/tallercreativo/.rvm/rubies/ruby-1.9.2-p290/bin/ruby 

我得到相同的命令没有找到错误。 怎么了?

您需要先使脚本可执行:

 chmod +x todo.rb 

然后你需要像这样运行它:

 ./todo.rb 

你不能只通过说todo.rb来运行它,除非你把它放在你的PATH ,在这种情况下你可以从任何地方这样做。

你在env命令结束时错过了ruby 。 你的意思是:

 #!/usr/bin/env ruby 

你需要告诉env你正在寻找什么可执行文件。

(问题更新)

你是在执行这样的代码吗? todo.rb ? 您需要提供脚本的完整路径( /home/you/project/todo.rb )或相对路径( ./todo.rb ),除非该目录位于$PATH