Ruby 脚本:shebang ruby 的绝对路径不起作用
Ruby script: shebang with absolute path to ruby not working
我正在使用 Mac OS X。我安装了 Ruby 的两个版本(2.1.5 和 2.0.0)。前者安装在/another/.path/to/ruby("path"前有一个点来模拟路径之间包含一个点头目录的事实),除了默认的系统一(版本2.0.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
它输出'hey there'。好的。同时,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
它正常输出'hey there'。看起来 shebang 使用 /usr/bin/env ruby 完美运行,但不适用于新安装的绝对路径 ruby?
这是为什么?有没有办法修复它,以便更新的脚本仍然可以通过键入以下内容来工作?
./rbs
谢谢!
puts: command not found
消息表明您的脚本不是 Ruby 运行,而是 shell。所以首先,我会仔细检查您的 shebang 行的语法和路径。
其次,请注意 rbenv 使用动态查找和 运行 正确版本的 ruby
(以及相关程序,如 gem
等)。但是垫片是脚本,而脚本 本身不能成为 shebang 解释器 ;您必须找到并使用 ruby 可执行文件的实际路径(由 rbenv which ruby
输出)。
另一方面,因为 /usr/bin/env
是 一个可执行文件,你总是可以使用像 #!/usr/bin/env ruby
这样的东西,即使 ruby
它在路径中发现它本身就是一个脚本。
我不能评论,(否则我会添加为评论)但我认为值得添加
#!/usr/bin/env ruby
必须是文件的第一行。这让我绊倒了一段时间。
source
我正在使用 Mac OS X。我安装了 Ruby 的两个版本(2.1.5 和 2.0.0)。前者安装在/another/.path/to/ruby("path"前有一个点来模拟路径之间包含一个点头目录的事实),除了默认的系统一(版本2.0.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
它输出'hey there'。好的。同时,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
它正常输出'hey there'。看起来 shebang 使用 /usr/bin/env ruby 完美运行,但不适用于新安装的绝对路径 ruby?
这是为什么?有没有办法修复它,以便更新的脚本仍然可以通过键入以下内容来工作?
./rbs
谢谢!
puts: command not found
消息表明您的脚本不是 Ruby 运行,而是 shell。所以首先,我会仔细检查您的 shebang 行的语法和路径。
其次,请注意 rbenv 使用动态查找和 运行 正确版本的 ruby
(以及相关程序,如 gem
等)。但是垫片是脚本,而脚本 本身不能成为 shebang 解释器 ;您必须找到并使用 ruby 可执行文件的实际路径(由 rbenv which ruby
输出)。
另一方面,因为 /usr/bin/env
是 一个可执行文件,你总是可以使用像 #!/usr/bin/env ruby
这样的东西,即使 ruby
它在路径中发现它本身就是一个脚本。
我不能评论,(否则我会添加为评论)但我认为值得添加
#!/usr/bin/env ruby
必须是文件的第一行。这让我绊倒了一段时间。
source