Обертывание бинарного файла UNIX / Linux / OS X в Ruby - PullRequest
0 голосов
/ 24 декабря 2010

Я создаю базовый гем, заключающий в себе команду UNIX / Linux / OS X, и хотел убедиться, что PATH загружен правильно (т. Е. При запуске под пассажиром для приложения ruby-on-rails у него есть '/ usr / bin'). ). Вот простой пример, чтобы проиллюстрировать, что я пытаюсь сделать (фактический пример более сложный):

module Silly
  def self.tail(path)
    `tail #{path}`
  end
end

Должен и / или я могу добавить общие папки в PATH в ruby? Если нет, то можно ли напрямую ссылаться на /usr/bin/tail (или любые другие двоичные файлы в этом каталоге) или они будут расположены в разных каталогах в разных системах? Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 декабря 2010

Вы можете получить доступ к переменным окружения с помощью глобального хеша ENV, например, ENV['PATH'] = ENV['PATH'] + ':/usr/bin'.Может быть возможно вызвать команды с /bin/sh, так как это может установить путь автоматически.

1 голос
/ 24 декабря 2010

В Linux и Mac OS вы можете попросить ОС сообщить вам, где находится предпочтительная версия конкретной команды, используя which. Например:

Greg:stackoverflow greg$ which ls
/bin/ls
Greg:stackoverflow greg$ which find
/usr/bin/find
Greg:stackoverflow greg$ which ruby
/Users/greg/.rvm/rubies/ruby-1.9.2-p0/bin/ruby

Обратите внимание, что он выбрал MY для Ruby, а не тот, который находится в / usr / bin или / usr / local / bin. Это важно, потому что у пользователя или системного администратора может быть очень веская причина для установки новой версии команды, создания псевдонимов или программных ссылок на что-либо еще или их удаления. Если вы предполагаете, что знаете лучше, чем они, вы можете выполнить старую версию с ошибками или игнорировать предпочитаемую пользователем среду.

Если вы знакомы с Perl, приложение CPAN часто определяет окружение при настройке значений по умолчанию, но всегда спрашивает, является ли его значение по умолчанию, определенное с помощью обнаружения, правильным и позволяет пользователю изменить или удалить его. Он также знает альтернативные приложения для аналогичной функциональности, такие как использование ftp, nftp или wget для получения файлов. Некоторые команды недоступны в разных ОС. Даже варианты Unix и / или Linux могут отличаться. Бросьте в MacOS, Cygwin и других Unix-подобных средах, и вы найдете несколько разных имен для одного и того же функционала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...