2015-03-02 2 views
2

Мне нужно сделать интерактивную оболочку программно (в Node.js, но любой язык будет делать). Самым важным является то, что я хочу, чтобы начать REPL любого языка (узел, рубиновый, Эрл и т.д.) и быть в состоянии получить AutoCompletionЗапуск интерактивной оболочки программно

pri\t 

, который я хочу, чтобы получить выход в STDERR (например)

print()  println()   printf() 

И поскольку это на языке REPL compgen не может быть использован.
Я пробовал много способов, но кажется, что он терпит неудачу, потому что оболочка не может быть интерактивной, а программно открыта. Launchin /bin/sh -i просто yeilds ошибки как:

bash: cannot set terminal process group (XXXX): Inappropriate ioctl for device 

Я слышал, что я не могу запустить интерактивную оболочку без терминала, но при выполнении SSH автодополнения делает работу, которая означает, что можно эмулировать в некотором роде.

Буду признателен за вашу помощь. Я не могу продолжать свою работу, не найдя для этого решения.

ответ

6

Вы можете эмулировать терминал, используя псевдотерминал . Вот как это делает ssh. Есть много способов использовать псевдотерминал , хотя и ответное поле SO не достаточно велико для всего. Поэтому проверьте справочную страницу на pty(7).

+0

Могу ли я предположить, что он предустановлен в каждой системе Linux? –

+0

@KrzysztofWende Согласно странице man для '' forkpty'', она не является стандартной, но присутствует в libc5 и glibc2, поэтому было бы безопасно предположить, что она присутствует в любой современной Linux-системе. – randomusername

+0

ДА! Наконец, это работает. Спасибо! Когда вопрос будет доступен для награды, я дам вам 50 очков репутаций. Это первый ответ, который действительно сработал. –

Смежные вопросы