gpt4 book ai didi

ruby 脚本 : shebang with absolute path to ruby not working

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:43 25 4
gpt4 key购买 nike

我使用的是 Mac OS X。我安装了两个版本(2.1.5 和 2.0.0)的 Ruby。前者安装在/another/.path/to/ruby(“路径”之前有一个点,以模拟路径之间包含一个点头目录的事实),此外还有默认系统(版本 2.0.1)。 0) 在/usr/bin/ruby。我使用 rbenv 安装 Ruby。

在我手动设置 PATH 环境变量后,默认的 ruby​​ 命令将在另一个目录中找到:/another/.path/to/ruby。现在我检查

which -a ruby

它首先使用正确的 ruby​​ 作为输出。

/another/.path/to/ruby
/usr/bin/ruby

现在我创建了一个脚本 rbs,其中 shebang 的第一行指定了要使用的 ruby​​。

#!/usr/bin/env ruby
puts 'hey there'

然后我跑

./rbs

它输出“嘿,那里”。好的。同时,Ruby 使用的是正确的版本。

/usr/bin/env ruby --version

还有

ruby --version

两者都输出 2.1.5。所以使用新版本效果很好。

但是,这里是问题发生的地方:现在我将 rbs 文件更新为:

#!/another/.path/to/ruby
puts 'hey there'

请注意,我更新了 shebang 以使用所需 ruby​​ 的绝对路径。然后我跑

./rbs

输出:

./rbs: line 2: puts: command not found

这太奇怪了;

但如果我跑

ruby ./rbs

它会像往常一样输出“嘿,那里”。看起来 shebang 使用/usr/bin/env ruby​​ 完美运行,但不是新安装的 ruby​​ 的绝对路径?

这是为什么?有没有办法修复它,以便更新的脚本仍然可以通过键入以下内容来工作?

./rbs

谢谢!

最佳答案

puts: command not found 消息表示您的脚本不是由 Ruby 运行,而是由 shell 运行。所以首先,我会仔细检查您的 shebang 行的语法和路径。

其次,请注意 rbenv 使用 shim 动态查找和运行正确版本的 ruby(以及相关程序,如 gem 等)。但是填充程序是脚本,而脚本本身不能成为 shebang 解释器;您必须找到并使用 ruby​​ 可执行文件的实际路径(如 rbenv which ruby​​ 的输出)。

另一方面,因为/usr/bin/env 一个可执行文件,你总是可以使用像#!/usr/bin/env这样的东西ruby,即使它在路径中找到的 ruby 本身就是一个脚本,它也能正常工作。

关于 ruby 脚本 : shebang with absolute path to ruby not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com