Ruby on Rails脚本控制台

我以前无法运行./script/console ,因为我的script console文件包含了#!/usr/bin/env ruby19 ,所以它曾经抛出错误。 在做了点击和试用之后,我用#!/usr/bin/env ruby19替换了#!/usr/bin/env ruby19来解决这个错误。

上面这行是做什么的?

版本:

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

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

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

您可能在PATH中没有名为ruby19的程序,因此您将收到错误消息。 你有一个名为ruby的程序,所以它有效。

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

 #!/usr/local/bin/ruby 

是有效的,但这不是:

 #!ruby 

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

从精细手册 :

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

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

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