Использование TCL для управления оболочкой Linux

#linux #shell #tcl

#linux #оболочка #tcl

Вопрос:

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

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

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

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

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

Комментарии:

1. Зачем вам нужно окно терминала? Вам нужен дисплей или что-то еще?

2. Учитывая ваше разъяснение, expect, к сожалению, не будет работать для вас.

3. Вам нужен новый терминал, или будет достаточно управления текущим терминалом?

4. @glennjackman — О, это хороший момент. Управлять текущим терминалом намного проще.

Ответ №1:

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

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

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

Комментарии:

1. Технически Expect написан на C и состоит из набора (очень умных) команд расширения для Tcl (т. Е. пакета Tcl). Он также включает (по историческим причинам) команду Unix, которая запускает комбинацию Tcl Expect .

Ответ №2:

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

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

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

Комментарии:

1. Tcl всегда использовал Expect для обработки pty, поскольку Expect была (IIRC) первой программой, использующей Tcl в универсальной форме (до этого, я думаю, она использовалась просто как встроенная библиотека). Программа tclsh появилась позже (благодаря успеху Expect).