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。