Історія наборів інструментів
Ви не перша людина, яка захотіла такого інструменту. Люди хочуть таких інструментів вже 30 років. І вони існували майже так само довго.
Найбільш раннім інструментом для подібних речей був пакет «pty» Даніеля Дж. Бернштейна, який Річ Зальц описав як «ніж Гінсу», який Бернштейн написав ще на рубежі 90-х, щоб обдурити шахрайство (sic!). Версія 4 пакету "pty" була опублікована в 1992 р. comp.sources.unix
(Том 25 випусків 127 - 135). Він все ще розміщений у всесвітній павутині. Пол Віксі описав це в той час:
Що я можу сказати? Це скибочки, воно кубики, миє посуд, вона гуляє собаку. Це "просто працює", це означає, що якщо ви будете дотримуватися вказівок, ви отримаєте робочий пакет без витягування волосся, скреготування зубів або інших стандартних заходів з перенесення.
Пізніше Бернштейн оновив це, колись або перед 1999-04-07, пакетом "ptyget", який він оголосив:
Я зібрав новий розподільник псевдо-тти, 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
: крихітна програма низького рівня - єдина в програмі встановлена програма - яка виділяє нову псевдо-tty та передає її програмі на ваш вибір
ptyspawn
: ще одна невелика програма, яка запускає дочірній процес під псевдо-tty, очікуючи його виходу та спостерігає за зупинками
ptyio
: інша, лише трохи більша програма, яка переміщує дані вперед і назад
Старий ніж Гінсу pty
тепер написаний ptybandage
, що є синонімом ptyget ptyio -t ptyspawn
; pty -d
, для приєднання мережевих програм до псевдо-ttys тепер написано ptyrun
, що є синонімом ptyget ptyio ptyspawn
; і nobuf
є синонімом для
ptyget ptyio -r ptyspawn -23x
. Я розділив функції управління сеансами на окремий пакет.
Цей окремий пакет був пакетом "sess".
"Ptyget", до речі, примітний тим, що є прикладом дуже ранньої версії, і одним з небагатьох опублікованих примірників власної ніколи не опублікованої системи "повторної" побудови Берштейна. dependon
є явним попередником для redo-ifchange
.
Використання
ptybandage
ptybandage
це те, що люди зазвичай хочуть під час сеансу входу. Його основним випадком використання є створення програм, які чутливі до того, чи їх стандартні входи, виходи або помилки підключені до терміналів, таким чином функціонують, навіть якщо вони насправді знаходяться в оболонкових трубопроводах, або їх стандартні дескриптори файлів перенаправлені до файлу.
Він виконує команду для запуску (яка, звичайно, повинна бути належною зовнішньою командою) і виконує її таким чином, що він думає, що її стандартний вхід, вихід та помилка приєднані до терміналу, підключаючи їх через ptybandage
s оригінальний стандарт введення, виводу та помилки.
Він стосується нюансів роботи під оболонками управління роботою, гарантуючи, що символ STOP терміналу не тільки зупиняється, ptybandage
але й зупиняє роботу програми, прикріплену до внутрішнього терміналу.
ptyrun
ptyrun
це те, що люди зазвичай хочуть на мережевих серверах TCP. Його основним випадком використання є середовища віддаленого виконання, які самі не встановили термінали, запускаючи програми, які не працюють так, як потрібно, коли немає терміналу.
Він не очікує, що він буде запущений під оболонкою управління завданням, і якщо команда, що виконується, отримує сигнал зупинки, вона просто перезапускається.
Доступні набори інструментів
Дру Нельсон публікує "pty" версії 4 та "ptyget".
Пол Jarc публікує фіксовану версію ptyget, що намагається розібратися з специфічними для операційної системи псевдо-кінцевими пристроями ioctls в оригіналі, який операційні системи насправді більше не надають.
Пакет джерела nosh поставляється з діючими ptybandange
та ptyrun
скриптами, які використовують execline
інструмент Лорана Беркота та власні команди управління псевдотермінальними пакетами nosh. З нош-версії 1,23 вони доступні заздалегідь упаковані в пакет nosh-terminal-extras. (Раніші версії постачали їх лише людям, які будували з джерела.)
Кілька прикладів використання
Юріген Оскам, використовуючи ptybandage
AIX щоб подати вхід з документа тут у програму, яка відкриває explicity та читає її керуючий термінал для запиту пароля:
$ ptybandage dsmadmc << EOF> uit.txt
джоскам
пароль
сеанс запитів
процес запиту
кинути
EOF
Енді Бредфорд, використовуючи ptyrun
OpenBSD під daemontools та ucspi-tcp, щоб зробити bgplgsh
інтерактивну програму управління маршрутизатором доступною через мережу, в той час як змусив її думати, що він спілкується з терміналом:
#! / бін / ш
exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Подальше читання