Я недавно преобразовал библиотеку Ruby в драгоценный камень, который, казалось, нарушил удобство использования командной строки
Работала нормально как библиотека
$ ruby -r foobar -e 'p FooBar.question' # => "answer"
И как драгоценный камень irb знает, как требовать драгоценный камень из параметров командной строки.
$ irb -rubygems -r foobar
irb(main):001:0> FooBar.question # => "answer"
Но то же самое не касается самого рубина:
$ ruby -rubygems -r foobar -e 'p FooBar.question'
ruby: no such file to load -- foobar (LoadError)
я должен сделать это сейчас, что кажется некрасивым:
ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer"
Или есть способ заставить работать 2 переключателя?
Примечание: я знаю, что драгоценный камень может добавить корзину / программу для каждого полезного метода, но мне не нравится без надобности загрязнять пространство имен командной строки

-rubygems фактически то же самое, что -r ubygems.
Насколько я понимаю, это не мешает вашему пути поиска, но я думаю, что это не добавляет ничего и к вашему пути поиска -r. Мне удалось сделать что-то вроде этого:
ruby -rubygems -r /usr/lib/ruby/gems/myhelpfulclass-0.0.1/lib/MyHelpfulClass -e "puts MyHelpfulClass"
MyHelpfulClass.rb существует в указанном выше каталоге lib.
Это отстой, но он, по крайней мере, демонстрирует, что у вас может быть несколько директив -r equire.
В качестве немного менее уродливого обходного пути вы можете добавить дополнительные элементы в путь поиска библиотеки ruby (двоеточие с разделителями в * nix, точка с запятой в окнах).
export RUBYLIB=/usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib
ruby -rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"
Если вы не хотите связываться с переменной окружения, вы можете добавить что-нибудь в путь загрузки самостоятельно:
ruby -I /usr/lib/ruby/gems/1.8/gems/myhelpfulclass-0.0.1/lib \
-rubygems -r MyHelpfulClass -e "puts MyHelpfulClass"
Требуется ли здесь переключатель -rubygems? Могу ли я указать -r MyHelpfulClass без переключателя -rubygems?
Примечание: эта проблема существует для Ruby 1.8, но решена в Ruby 1.9.
В 1.8, если вы укажете обе библиотеки через -r, ruby попытается загрузить каждую библиотеку, не обращая внимания на изменения в $LOAD_PATH. Но rubygems действительно меняет $LOAD_PATH, поэтому драгоценные камни можно найти.
Причина, по которой он работает с irb, заключается в том, что irbделает обращает внимание на изменения $LOAD_PATH.
К сожалению, лучший обходной путь, который я нашел, - это использовать более подробную форму:
ruby -rubygems -e 'require "foobar"; p FooBar.question'
Однако боль не увеличивается линейно с количеством библиотек, если вы используете итератор:
ruby -rubygems -e '%w(rake rspec).each{|r| require r }'
Вы правы (обратите внимание на 'ubygems.rb' в ruby / site_ruby / 1.8), но тогда почему он не работает с требованиями 2? Это меняет путь загрузки или что-то в этом роде?