从命令行更容易rubygems?

时间:2010-06-24 17:40:28

标签: ruby rubygems

通常从命令行使用Ruby库我可以做类似的事情:

ruby -rfastercsv -e 'code'

不幸的是,这不适用于rubygems,因为默认情况下它们没有启用,而且覆盖require的任何rubygems似乎都不适用于-r切换,所以我是被迫这样做:

ruby -e 'require "rubygems"; require "fastercsv"; code'

相当恼人的单行 - 42个字符的开销,而非rubygems库只有13个字符。有没有办法避免这种情况?

我编写了这个脚本来解决这个问题(它允许多个-e "code"require是幂等的,所以它不应该干扰-p / {{1}或者据我所知,还有其他任何事情,但这一切都相当丑陋,我不介意更优雅的解决方案:

-n

1 个答案:

答案 0 :(得分:0)

我的第一次尝试(上图)仅适用于-e。它不适用于ruby -rfoo bar.rb等文件中的脚本。此脚本支持自我要求的技巧(其文件名必须以.rb结尾):

#!/usr/bin/env ruby

if $0 == __FILE__
  args = []
  libs = []
  last_lib = nil
  while arg = ARGV.shift
    if arg == "--"
      args << arg
      args += ARGV
      break
    elsif arg =~ /\A-r(.*)\Z/
      libs << ($1.empty? ? ARGV.shift : $1)
      last_lib = args.size
    else
      args << arg
    end
  end
  if last_lib
    libself = __FILE__.chomp(".rb")
    ENV["RUBYGEMS_LIBS"] = libs.join(":")
    args[last_lib, 0] = ["-r", libself]
  end
  exec "ruby", *args
else
  require "rubygems"
  libs = ENV["RUBYGEMS_LIBS"]||""
  libs.split(":").each{|lib|
    require lib
  }
end