之前我无法运行./script/console
,因为我的script console
文件已包含#!/usr/bin/env ruby19
,因此导致错误。在点击和试用后,我通过将#!/usr/bin/env ruby19
替换为#!/usr/bin/env ruby
来修复此错误。
上述内容是做什么的?
版本:
答案 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
中,以便您可以安全地将其用作完整路径,然后让env
在PATH
搜索指定的解释器。
来自fine manual:
env [-i] [name=value]... [utility [argument...]]
env 实用程序应获取当前环境,根据其参数修改它,然后使用修改后的环境调用实用程序操作数命名的实用程序。
这对你的情况并不十分有用,但我认为无论如何我都应该包括它。使用env
的shebang是一种不使用env
的预期行为的黑客攻击。