Я пытаюсь программно запустить консоль так, чтобы:
- Его контекст привязан к конкретному объекту (ссылка на стек Переполнение).
- Это позволяет мне использовать инструменты (например, команду
vim
), предоставляемыеinteractive_editor
Gem (ссылка на GitHub).
Может показаться, что два условия, которые я пытаюсь выполнить, являются взаимоисключающими. Ниже я пишу скрипт, запускающий REPL, привязанный к контексту списка [1,2,3]
.
# test.rb
require 'ripl'
require 'interactive_editor'
Ripl.start :binding => [1,2,3].instance_eval { binding }
Если вы запустите ruby test.rb
, вы увидите, что находитесь в контексте [1,2,3]
:
>> self
=> [1, 2, 3]
>> map { |a| a * 2 }
=> [2, 4, 6]
Но если вы попытаетесь использовать функции interactive_editor
:
>> vim "something"
=> [1, 2, 3]
Эта последняя строка запускает vim
и фактически записывает в файл «что-то» (без моего явного сохранения):
# something
---
- 1
- 2
- 3
Есть ли способ решить эту проблему? Должен ли я зарегистрировать это как проблему на interactive_editor
Gem? Такие же ошибки возникают, когда я использую IRB
вместе с interactive_editor
или irbtools
.
Я предполагаю, что изменение контекста затрудняет для interactive_editor
определение его объектов, но я не уверен, как это работает.
Заранее спасибо и, пожалуйста, дайте мне знать, если я пропустил важную информацию.
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
iteractive_editor (0.0.10)
irbtools (2.0.1, 1.7.1)
ripl (0.7.1)
ripltools (0.7.0)
Я использую OS X Yosemite 10.10.3, но мне удалось воспроизвести эту проблему на нескольких других компьютерах с Linux.