以前我无法运行./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
以前我无法运行./script/console
,因为我的script console
文件包含了#!/usr/bin/env ruby19
,所以它会抛出一个错误。通过尝试和测试,我将#!/usr/bin/env ruby19
替换为#!/usr/bin/env ruby
来修复此错误。
上述行的作用是什么?
版本:
#!
(hash bang)告诉大多数*nix系统的程序加载器调用指定的程序(在这种情况下是/usr/bin/env
),并提供任何参数(在这种情况下是ruby
)。/usr/bin/env
只是一种便携式的查找命名为第一个参数的程序的环境方式。这里是Ruby解释器。如果Ruby解释器在您的PATH中,env将找到它并使用文件的其余部分作为输入运行它。ruby19
的程序,所以会出现错误。而您有一个名为ruby
的程序,所以可以正常使用。在Unix脚本中的shebang行应该指定完整路径,因此:
#!/usr/local/bin/ruby
这个是有效的,但这个不是:
#!ruby
env
实用程序允许脚本搜索PATH
环境变量以查找适当的解释器,env
应始终位于/usr/bin/env
,因此您可以安全地将其用作完整路径,然后让env
搜索命名解释器的PATH
。在您的情况下,这并不是非常有帮助,但我认为我还是应该包含它。使用
env [-i] [name=value]... [utility [argument...]]
该env实用程序将获取当前环境,根据其参数进行修改,然后使用修改后的环境调用由实用程序操作数命名的实用程序。
env
的shebang用法有点像黑客行为,没有使用env
的预期行为。