2013-08-09 2 views
11

Когда я бегу ruby -version я получаю:Почему я не могу определить версию своей рубиновой установки?

ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0] 
-e:1: undefined local variable or method `rsion' for main:Object (NameError) 

Что может быть не так?

+0

достаточно странно, 'рубин --version' не возвращает никаких ошибок. – ehsangh

+4

Основная проблема с вашей установкой заключается в том, что ruby ​​1.8.7 - это конец жизни и неподдерживаемый сейчас. Кроме того, @R_G уже объяснил, что ваш 'ruby -version' эквивалентен' ruby ​​-v -e 'rsion''. – dbenhur

ответ

33

Используйте либо ruby ​​-v, либо ruby ​​-version. Он анализирует -версию в rsion.

Любой из этих двух работ. Подсчитайте число черточек:

ruby -v 
ruby --version 

Когда вы предоставите один дефис с "версией", Ruby видит это:

ruby -v -e rsion 
8

Существует -v вариант и - версия опция, но не вариант -версия. (Подсчитайте тире.) Посмотрите undefined local variable or method 'rsion' for main:Object.

С этой thread, истинная причина гораздо ясен:

Если запустить ruby -version, так как вы используете только один прочерк, слово «версии» не рассматриваются как единый флаг, но вместо этого, как список флагов. В этот случай, он берет флаг -v, который печатает информацию о версии. Затем он пытается обработать флаг e, который в основном говорит: «остальная часть этой строки - это рубиновый скрипт для выполнения». Итак, рубин верно пытается разобрать «rsion», в котором вы получаете NameError.

Чтобы получить информацию о версии, вы можете сделать ruby -v или ruby --version.

+1

Ага, это довольно удивительно, ваш ответ заставил меня понять точную ошибку, хотя ссылка, к сожалению, больше не работает (опция v и опция e существуют, а опция e пытается запустить команду, а 'rsion' не является действительная команда ('ruby -v' +' ruby ​​-e' с аргументами 'risen' = 'ruby -version') –

+0

@ b.enoit.be Приятно сломать детали. –

+0

@ b.enoit.be Также обновлена ​​ссылка .. –

0

Это так, как интерпретатор, но у вас есть константы, определенные в Ruby.

Попробуйте

$> ruby -e " p RUBY_VERSION" 

Вы можете найти то под Module.constants

здесь

>> Module.constants.sort.each do |constant| 
?> puts constant 
>> end