История наборов инструментов
Вы не первый человек, который хочет такой инструмент. Люди давно хотят таких инструментов. И они существовали почти так же долго.
Самым ранним инструментом для такого рода вещей был пакет «pty» Дэниела Дж. Бернштейна, который Рич Зальц назвал «ножом Гинсу», который Бернштейн написал в конце 1990-х для того, чтобы обмануть nethack (sic!). Версия 4 пакета «pty» была опубликована в 1992 году comp.sources.unix
(том 25, выпуск 127–135). Это все еще можно найти в World Wide Web. Пол Vixie описал это в то время:
Что я могу сказать? Он нарезает ломтиками, нарезает кубиками, моет посуду, гуляет с собакой. Это «просто работает», что означает, что если вы будете следовать указаниям, вы получите рабочий пакет без каких-либо выдергивания волос, скрежета зубов или других стандартных действий по переносу.
Позднее Бернштейн обновил это, когда-то в 1999-04-07 или ранее, пакетом "ptyget", который он объявил:
Я собрал новый псевдо-tty распределитель, ptyget. Альфа-версия на ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. Есть список рассылки ptyget; чтобы присоединиться, отправьте пустое сообщение
djb-ptyget-requ...@koobera.math.uic.edu
. Я разработал интерфейс ptyget с нуля. Это гораздо более модульно, чем pty; Базовый интерфейс pty теперь разделен на три части:
ptyget
: крошечная низкоуровневая программа - единственная программа setuid в пакете - которая выделяет новую псевдо-tty и передает ее в программу по вашему выбору
ptyspawn
: еще одна небольшая программа, которая запускает дочерний процесс под псевдотермией, ожидает его завершения и отслеживает остановки
ptyio
: еще одна, чуть больше, программа, которая перемещает данные назад и вперед
Записан старый нож pty
Гинсу ptybandage
, что является синонимом ptyget ptyio -t ptyspawn
; pty -d
для присоединения сетевых программ к псевдо-tys теперь пишется ptyrun
, что является синонимом для ptyget ptyio ptyspawn
; и nobuf
является синонимом для
ptyget ptyio -r ptyspawn -23x
. Я разделил функции управления сессиями на отдельный пакет.
Этот отдельный пакет был пакетом "sess".
Кстати, «ptyget» отличается тем, что служит примером очень ранней версии и одного из немногих опубликованных примеров собственной, никогда не публикуемой системой сборки «redo» Берштейна. dependon
является явным предшественником redo-ifchange
.
использование
ptybandage
ptybandage
это то, что люди обычно хотят в сеансе входа в систему. Его основной вариант использования - создание программ, которые чувствительны к тому, работают ли их стандартные входы, выходы или ошибки с терминалами так, даже если они на самом деле находятся в конвейерах оболочки, или их стандартные файловые дескрипторы перенаправлены в файл.
Он принимает команду для запуска (которая, конечно, должна быть правильной внешней командой) и запускает ее таким образом, что он думает, что его стандартный ввод, вывод и ошибка подключены к терминалу, соединяя их через ptybandage
с исходный стандартный ввод, вывод и ошибка.
Он имеет дело с нюансами работы под оболочками управления заданиями, гарантируя, что символ STOP терминала не только останавливает, ptybandage
но и останавливает выполнение программы, присоединенной к внутреннему терминалу.
ptyrun
ptyrun
это то, что люди обычно хотят на сетевых серверах TCP. Его основной сценарий использования - это среды удаленного выполнения, в которых сами терминалы не настроены, и запускаются программы, которые не работают должным образом, когда нет терминала.
Он не ожидает запуска под оболочкой управления заданиями, и если выполняемая команда получает сигнал остановки, она просто перезапускается.
Доступные наборы инструментов
Дрю Нельсон публикует "pty" версию 4 и "ptyget".
Пол Джарк публикует фиксированную версию ptyget, в которой предпринята попытка обработать специфичные для операционной системы псевдо-терминальные устройства ioctl в оригинале, которые операционные системы фактически больше не предоставляют.
Пакет с исходным кодом nosh поставляется с рабочими файлами ptybandange
и ptyrun
сценариями, которые используют execline
инструмент Лорана Беркота и собственные команды управления псевдо-терминалом пакета nosh . Начиная с версии nosh 1.23 они доступны предварительно упакованы в пакет nosh-terminal-extras. (Более ранние версии предоставляли их только людям, которые создавали из исходников.)
Несколько примеров использования
Юрген Оскам (Jurjgen Oskam), использующий ptybandage
в AIX для передачи ввода из документа здесь в программу, которая открывается явным образом, и читает свой управляющий терминал для запроса пароля:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
пароль
сеанс запроса
процесс запроса
уволиться
EOF
Энди Брэдфорд использует ptyrun
OpenBSD под daemontools и ucspi-tcp, чтобы сделать bgplgsh
интерактивную программу управления маршрутизатором доступной через сеть, заставляя ее думать, что она общается с терминалом:
#! / Bin / ш
Exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
дальнейшее чтение