Использование TCL для управления оболочкой Linux - PullRequest
2 голосов
/ 09 ноября 2011

Я новичок в языке TCL, и я хотел бы использовать сценарии, которые я пишу, для автоматизации некоторых простых задач, которые я обычно выполняю в интерфейсе терминала Linux (или какой-либо другой оболочке).Моя цель прямо сейчас - иметь возможность просто запустить терминал (я использую ubuntu, поэтому команда gnome-terminal), а затем иметь возможность отправлять команды этому экземпляру терминала.

Мои первые мысли были о том, что я мог бы просто сделать что-то вроде этого:

set  myTerminal [open |gnome-terminal r+]
puts  $myTerminal "a command"
flush $myTerminal  

и что это сбрасывает символы в терминал.Ничего не происходит, хотя я не уверен, как поступить.Большое спасибо за помощь!

Редактировать: я бы хотел использовать терминал для запуска программ с интерфейсом командной строки.Идея заключалась в том, что я мог бы запустить терминал с помощью tcl, затем дать ему команду запустить эту программу и, наконец, использовать терминал в качестве посредника между сценарием tcl и программой командной строки.Предположим, я использую tcl для управления терминалом, который, в свою очередь, управляет программой командной строки.

Ответы [ 2 ]

7 голосов
/ 09 ноября 2011

Вы должны использовать ожидайте .Это стандарт.Он скрывает большинство особенностей оболочки, которые вы получите, если сделаете это вручную.

Он написан на TCL и создан для того, чтобы делать именно то, что вы хотите.

Ожидайте, что этоИнструмент автоматизации и тестирования Unix, написанный Доном Либесом как расширение языка сценариев Tcl, для интерактивных приложений, таких как telnet, ftp, passwd, fsck, rlogin, tip, ssh и других.Он использует псевдо-терминалы Unix для прозрачного обертывания подпроцессов, что позволяет автоматизировать произвольные приложения, доступ к которым осуществляется через терминал.

1 голос
/ 09 ноября 2011

Это будет намного сложнее, чем кажется. Чтобы добиться того, что, по вашему мнению, вы пытаетесь достичь сейчас, вам нужно создать программу, которая запускает псевдотерминал и запускает внутри него оболочку. Тогда вам придется gnome-terminal открыть окно, в котором запущена ваша программа.

Это будет довольно сложная операция, и для этого вам потребуется написать вспомогательную программу. Вам также, вероятно, потребуется использовать ожидайте , но вам придется использовать его для запуска вспомогательной программы.

Я не был бы удивлен, узнав, что программа, которая делает то, что делает вспомогательная программа, уже существует, но я не удивлюсь, узнав, что это не так. Вы можете прочитать о openpty и forkpty, если хотите написать сами. Я не думаю, что вы можете с пользой вызывать их из TCL, но вы можете из Perl или Python.

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