Ruby on Rails脚本控制台

时间:2011-06-21 04:55:26

标签: ruby-on-rails ruby

之前我无法运行./script/console,因为我的script console文件已包含#!/usr/bin/env ruby19,因此导致错误。在点击和试用后,我通过将#!/usr/bin/env ruby19替换为#!/usr/bin/env ruby来修复此错误。

上述内容是做什么的?

版本:

  • Ruby:1.9.2-p180
  • Ruby on Rails:2.3.5

2 个答案:

答案 0 :(得分:6)

文本文件第一行中的#!(哈希爆炸)告诉大多数* nix系统中的程序加载器调用下一个指定的程序(在本例中为/usr/bin/env)提供的任何参数(在这种情况下,ruby)。

/usr/bin/env只是在您的环境中查找第一个参数中命名的程序的一种可移植方式。这是Ruby解释器。如果Ruby解释器在你的PATH中,env将找到它并使用文件的其余部分作为输入来运行它。

您的PATH中可能没有名为ruby19的程序,因此您会收到错误消息。你有一个名为ruby的程序,因此可行。

答案 1 :(得分:1)

Unix脚本中的shebang行应该指定一个完整路径,所以这个:

#!/usr/local/bin/ruby

有效,但不是:

#!ruby

第一种形式的问题是,您需要使用完整路径,但实际路径在所有系统上都不一样。 env实用程序通常用于允许脚本在PATH环境变量中搜索相应的解释器,env应始终位于/usr/bin/env中,以便您可以安全地将其用作完整路径,然后让envPATH搜索指定的解释器。

来自fine manual

  

env [-i] [name=value]... [utility [argument...]]

     

env 实用程序应获取当前环境,根据其参数修改它,然后使用修改后的环境调用实用程序操作数命名的实用程序。

这对你的情况并不十分有用,但我认为无论如何我都应该包括它。使用env的shebang是一种不使用env的预期行为的黑客攻击。