Запустите библиотеку Ruby из командной строки - PullRequest
15 голосов
/ 28 января 2009

Я только что изучил основы Ruby после того, как был очень доволен Python в течение нескольких лет (я до сих пор использую Python для некоторых вещей), но я хотел бы знать, есть ли идиома или хак для решения этой проблемы проблема.

У меня есть скрипт на Ruby, с которым я хотел бы работать require script_name, но я также хотел бы иметь возможность запускать ruby script_name.rb из терминала и запускать его как скрипт командной строки. В Python это можно сделать, имея следующую структуру внизу скрипта:

if __name__ == '__main__':
    # do something here

Однако я не могу найти эквивалент в Ruby. Есть ли способ определить, запускается ли текущий скрипт из командной строки? Может быть, какой-то Kernel:: метод или что-то? В идеале то, что я хотел бы, это что-то вроде этого в нижней части сценария:

if from_command_line?
  # do something here
end

Ответы [ 3 ]

23 голосов
/ 28 января 2009

Вы хотите использовать:

if __FILE__ == $0
  # do stuff
end

__FILE__ - имя исходного файла, а $0 - имя выполняемого в данный момент сценария.

7 голосов
/ 28 января 2009

Подобную функциональность вы можете найти в ruby.

__ FILE __ текущее имя исходного файла.

$ 0 Содержит имя исполняемого скрипта. Может быть назначено.

источник: Ruby Quick Ref

5 голосов
/ 23 июня 2011

В то время как

if __FILE__ == $0
  Foo.run
end

- это общий подход, в настоящее время я использую

if File.identical?(__FILE__, $0)
  Foo.run
end

потому что такие программы, как ruby-prof могут зарабатывать $ 0 не равным __FILE__ даже при использовании --replace-progname.

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