Ruby on Rails脚本控制台

3

以前我无法运行./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

问题 - #!/usr/bin/env ruby是如何工作的。 - ashisrai_
2个回答

6
在一个文本文件的第一行中,#!(hash bang)告诉大多数*nix系统的程序加载器调用指定的程序(在这种情况下是/usr/bin/env),并提供任何参数(在这种情况下是ruby)。
/usr/bin/env只是一种便携式的查找命名为第一个参数的程序的环境方式。这里是Ruby解释器。如果Ruby解释器在您的PATH中,env将找到它并使用文件的其余部分作为输入运行它。
您可能没有在您的PATH中有一个名为ruby19的程序,所以会出现错误。而您有一个名为ruby的程序,所以可以正常使用。

1

在Unix脚本中的shebang行应该指定完整路径,因此:

#!/usr/local/bin/ruby

这个是有效的,但这个不是:

#!ruby

第一个表单的问题在于,你需要使用完整路径,但实际路径在所有系统上都不同。通常使用env实用程序允许脚本搜索PATH环境变量以查找适当的解释器,env应始终位于/usr/bin/env,因此您可以安全地将其用作完整路径,然后让env搜索命名解释器的PATH
来自fine manual

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

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

在您的情况下,这并不是非常有帮助,但我认为我还是应该包含它。使用env的shebang用法有点像黑客行为,没有使用env的预期行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接