Запустите библиотеку Ruby из командной строки

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

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

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

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

if from_command_line?
  # do something here
end

Ответ 1

Вы можете найти аналогичную функциональность в ruby.

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

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

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

Ответ 2

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

if __FILE__ == $0
  # do stuff
end

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

Ответ 3

В то время как

if __FILE__ == $0
  Foo.run
end

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

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

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