Выполнение сценария ruby по всему миру
Я пишу приложение для командной строки на ruby и хочу запустить его глобально в своей оболочке, без необходимости предварять мой вызов ./
или с ruby <filepath>
- так же, как я бегу git
, brew
или же rails
,
Структура моего простого приложения следующая: у меня есть каталог в /Developer
папка называется rubyPlug
, Внутри rubyPlug находится плагин и Formulae.rb.
Я пишу приложение для командной строки на ruby и хочу запустить его глобально в своей оболочке, без необходимости предварять мой вызов ./
или с ruby <filepath>
- так же, как я бегу git
, brew
или же rails
,
Структура моего простого приложения следующая: у меня есть каталог в /Developer
называется rubyPlug
, внутри rubyPlug
является plug
а также Formulae.rb
, Formulae.rb
где хранится весь код приложения. Plug
хранит некоторый стандартный код запуска:
!/usr/bin/env ruby
require "/Users/theideasmith/Developer/rubyPlug/Formulae.rb"
begin
x = Application.new ARGV
rescue Errno::ENOENT => err
abort "plug: #{err.message}"
end```
Я хочу запустить свое приложение, набрав plug <args>
, Если я храню plug
во всем мире, как бы я структурировать require()
вызов?
Я включил #!/usr/bin/env ruby
в plug
, побежал chmod +x plug
и попробовал sudo cp plug /usr/bin/plug.
Мой сценарий запустился, но не require "/Users/.../Formulae.rb"
вызов. Как мне избежать этого - нужно ли хранить родительский каталог как своего рода пакет в /usr/bin
? Я включил #!/usr/bin/env ruby
в plug
, побежал chmod +x plug
и попробовал sudo cp plug /usr/local/bin/plug
, Я тогда смог набрать plug <args>
, но затем я получил сообщение об ошибке, связанное с моим require
звонок не работает.
Какие-либо предложения?
1 ответ
require
должно работать, если вы используете абсолютный путь, то есть тот, который начинается с /
, Вы также можете использовать Dir.chdir
чтобы скрипт работал так, как будто его нет в /usr/bin
,
Также вы должны действительно положить его в /usr/local/bin
, Это подходящее место для пользовательских исполняемых файлов.