Eine Geschichte von Werkzeugen
Sie sind nicht die erste Person, die ein solches Werkzeug haben möchte. Seit 30 Jahren wollen die Leute solche Werkzeuge. Und die gibt es auch schon fast so lange.
Das früheste Werkzeug für diese Art von Dingen war Daniel J. Bernsteins "Pty" -Paket, das von Rich Salz als "Ginsu-Messer" beschrieben wurde und das Bernstein um die Wende der 1990er Jahre schrieb, um Nethack zu betrügen (sic!). Version 4 des Pakets "pty" wurde 1992 veröffentlicht comp.sources.unix
(Band 25, Ausgaben 127 bis 135). Es ist immer noch im World Wide Web zu finden. Paul Vixie beschrieb es damals:
Was kann ich sagen? Es schneidet, es würfelt, es wäscht Geschirr, es geht mit dem Hund spazieren. Es "funktioniert einfach", was bedeutet, dass Sie, wenn Sie den Anweisungen folgen, ein Arbeitspaket erhalten, ohne an den Haaren zu ziehen oder an den Zähnen zu knirschen oder andere übliche Portierungsaktivitäten durchzuführen.
Bernstein aktualisierte dies später, irgendwann am oder vor dem 07.04.1999, mit einem "ptyget" -Paket, das er ankündigte:
Ich habe einen neuen Pseudo-Tty-Allokator zusammengestellt, ptyget. Eine Alpha-Version ist bei ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. Es gibt eine Ptyget-Mailingliste. Senden Sie zum Beitritt eine leere Nachricht an
djb-ptyget-requ...@koobera.math.uic.edu
. Ich habe die Oberfläche von ptyget von Grund auf neu gestaltet. Es ist viel modularer als pty; Das grundlegende Pty-Interface wurde nun in drei Teile aufgeteilt:
ptyget
: ein winziges Programm auf niedriger Ebene - das einzige Setuid-Programm im Paket -, das eine neue Pseudotty zuweist und an das Programm Ihrer Wahl weitergibt
ptyspawn
: Ein weiteres kleines Programm, das einen untergeordneten Prozess unter einer Pseudotty ausführt, darauf wartet, dass er beendet wird und auf Stopps wartet
ptyio
: Ein weiteres, nur geringfügig größeres Programm, das Daten hin und her bewegt
Das alte Ginsu-Messer pty
ist jetzt buchstabiert ptybandage
, ein Synonym für ptyget ptyio -t ptyspawn
; pty -d
, um Netzwerkprogramme an pseudo-ttys anzuhängen, wird jetzt buchstabiert ptyrun
, was synonym ist für ptyget ptyio ptyspawn
; und nobuf
ist ein Synonym für
ptyget ptyio -r ptyspawn -23x
. Ich habe die Sitzungsverwaltungsfunktionen in ein separates Paket aufgeteilt.
Dieses separate Paket war das "Sess" -Paket.
"ptyget" ist übrigens ein Beispiel für eine sehr frühe Version von Bersteins "Redo" -Build-System und eine der wenigen veröffentlichten Instanzen. dependon
ist ein klarer Vorläufer von redo-ifchange
.
Verwendung
ptybandage
ptybandage
ist, was Leute normalerweise in einer LOGON-Sitzung wünschen. Der primäre Anwendungsfall besteht darin, Programme so zu konfigurieren, dass sie empfindlich darauf reagieren, ob ihre Standardeingaben, -ausgaben oder -fehler mit Terminals verbunden sind, obwohl sie sich in Shell-Pipelines befinden oder ihre Standarddateideskriptoren in eine Datei umgeleitet werden.
Zum Ausführen wird ein Befehl benötigt (dies muss natürlich ein ordnungsgemäßer externer Befehl sein), und der Befehl wird so ausgeführt, dass er denkt, dass seine Standardeingabe, -ausgabe und -fehler an ein Terminal angeschlossen sind, das diese mit ptybandage
's' verbindet ursprüngliche Standardeingabe, Ausgabe und Fehler.
Es befasst sich mit den Nuancen der Ausführung unter Jobsteuerungs-Shells, wobei sichergestellt wird, dass ein Terminal-STOP-Zeichen nicht nur stoppt, ptybandage
sondern auch das Programm anhält, das mit dem inneren Terminal verbunden ist.
ptyrun
ptyrun
ist das, was die Leute normalerweise von TCP-Netzwerkservern erwarten. Der primäre Anwendungsfall sind Remote-Ausführungsumgebungen, in denen keine Terminals eingerichtet sind und Programme ausgeführt werden, die nicht wie gewünscht funktionieren, wenn kein Terminal vorhanden ist.
Es wird nicht erwartet, dass es unter einer Jobsteuerungs-Shell ausgeführt wird, und wenn der ausgeführte Befehl ein Stoppsignal empfängt, wird er einfach neu gestartet.
Verfügbare Toolsets
Dru Nelson veröffentlicht sowohl "pty" Version 4 als auch "ptyget".
Paul Jarc veröffentlicht eine feste Version von ptyget, die versucht, die betriebssystemspezifischen Pseudo-Endgeräte-Ioctls im Original zu behandeln, die Betriebssysteme eigentlich nicht mehr bereitstellen.
Das nosh-Quellpaket wird mit Workalike ptybandange
und ptyrun
Skripten geliefert , die das execline
Tool von Laurent Bercot und die eigenen Pseudo-Terminal-Verwaltungsbefehle des nosh-Pakets verwenden. Ab der nosh-Version 1.23 sind diese im nosh-terminal-extras-Paket enthalten. (Frühere Versionen haben sie nur an Personen geliefert, die aus dem Quellcode erstellt haben.)
Ein paar Anwendungsbeispiele
Jurjgen Oskam verwendet ptybandage
unter AIX , um Eingaben aus einem Here-Dokument in ein Programm einzugeben, das explicity öffnet, und liest sein steuerndes Terminal für eine Kennwortabfrage:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
Passwort
Abfragesitzung
Abfrageprozess
Verlassen
EOF
Andy Bradford benutzt ptyrun
OpenBSD unter daemontools und ucspi-tcp, um das bgplgsh
interaktive Router-Steuerungsprogramm über das Netzwerk zugänglich zu machen, während er denkt, dass es mit einem Terminal spricht:
#! / bin / sh
exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Weitere Lektüre