2

其他脚本中有变量,例如:

Python:print(sys.executable)

php:echo PHP_BINARY."\n";

红宝石中有类似的东西吗?

(红宝石 v.2.0)

4

3 回答 3

1

以下答案均不可靠。它们使用静态信息,但您的 ruby​​ 脚本可能由安装在不同于默认路径或不在 PATH 环境变量中的路径中的 ruby​​ 实例执行。

你需要做的是使用WIN32 api。特别是需要调用GetModuleHandleGetModuleFileName函数。第一个获取实际进程的句柄,另一个返回其路径。

灵感示例:

require 'ffi'

module Helpers
  extend FFI::Library

  ffi_lib :kernel32

  typedef :uintptr_t, :hmodule
  typedef :ulong, :dword

  attach_function :GetModuleHandle, :GetModuleHandleA, [:string], :hmodule
  attach_function :GetModuleFileName, :GetModuleFileNameA, [:hmodule, :pointer, :dword], :dword

  def self.actualRubyExecutable
    processHandle = GetModuleHandle nil

    # There is a potential issue if the ruby executable path is
    # longer than 999 chars.
    rubyPath = FFI::MemoryPointer.new 1000
    rubyPathSize = GetModuleFileName processHandle, rubyPath, 999

    rubyPath.read_string rubyPathSize
  end
end

puts Helpers.actualRubyExecutable

在 Linux 上,可以从/proc目录中读取此信息。

于 2014-09-19T08:24:14.213 回答
0

尝试%x(where ruby)你必须在你的路径中有 ruby​​.exe 才能工作,这样 Windows 就知道你在说什么“红宝石”。

于 2014-08-26T11:31:46.167 回答
0

你可以看看 rubinius configure( build_ruby )

所以,目前它看起来如下:

require 'rbconfig'

def build_ruby
  unless @build_ruby
    bin = RbConfig::CONFIG["RUBY_INSTALL_NAME"] || RbConfig::CONFIG["ruby_install_name"]
    bin += (RbConfig::CONFIG['EXEEXT'] || RbConfig::CONFIG['exeext'] || '')
    @build_ruby = File.join(RbConfig::CONFIG['bindir'], bin)
  end
  @build_ruby
end

我还尝试了以下方法:

require 'rbconfig'

File.join( RbConfig::CONFIG['bindir'],
           RbConfig::CONFIG['RUBY_INSTALL_NAME'] + RbConfig::CONFIG['EXEEXT']
         )

它对我同样有效。

于 2013-08-01T22:24:05.770 回答