通常从命令行使用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
答案 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