Une histoire d'outils
Vous n'êtes pas la première personne à vouloir un tel outil. Les gens ont besoin de tels outils depuis 30 ans. Et ils existent aussi depuis presque aussi longtemps.
Le plus ancien outil pour ce genre de chose était le paquet "pty" de Daniel J. Bernstein, décrit par Rich Salz comme un "couteau de Ginsu", que Bernstein a écrit à la fin des années 1990 pour tricher à Nethack (sic!). La version 4 du paquet "pty" a été publiée en 1992 comp.sources.unix
(volumes 25 à 127, 127 à 135). Il est toujours localisable sur le World Wide Web. Paul Vixie l'a décrit à l'époque:
Que puis-je dire? Il tranche, il tranche, il lave la vaisselle, il promène le chien. Cela "fonctionne tout simplement", ce qui signifie que si vous suivez les instructions, vous obtiendrez un paquet de travail sans vous arracher les cheveux, grincer des dents ou effectuer d'autres activités de portage standard.
Bernstein a par la suite mis à jour cette information, quelque part à compter du 1999-04-07, avec un paquet "ptyget", qu'il a annoncé:
J'ai mis au point un nouvel pseudo-tty allocator, ptyget. Une version alpha est à ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. Il y a une liste de diffusion ptyget; pour vous inscrire, envoyez un message vide à
djb-ptyget-requ...@koobera.math.uic.edu
. J'ai conçu l'interface de ptyget à partir de zéro. C'est beaucoup plus modulaire que pty; l'interface de base pty a été divisée en trois parties:
ptyget
: un petit programme de bas niveau - le seul programme setuid du paquet - qui alloue un nouveau pseudo-terminal et le transmet au programme de votre choix
ptyspawn
: un autre petit programme qui exécute un processus enfant sous un pseudo-tty, attendant sa sortie et surveillant les arrêts
ptyio
: un autre programme, légèrement plus volumineux, qui déplace les données dans les deux sens
Le vieux couteau Ginsu pty
est maintenant orthographié ptybandage
, ce qui est synonyme de ptyget ptyio -t ptyspawn
; pty -d
, pour attacher des programmes réseau à des pseudo-ttys, est maintenant orthographié ptyrun
, ce qui est synonyme de ptyget ptyio ptyspawn
; et nobuf
est un synonyme de
ptyget ptyio -r ptyspawn -23x
. J'ai divisé les fonctionnalités de gestion de session dans un package séparé.
Ce paquet séparé était le paquet "sess".
"ptyget" est d'ailleurs remarquable pour illustrer une version très ancienne du système de construction "redo" jamais publié de Berstein, et l'une des rares instances publiées. dependon
est un précurseur clair de redo-ifchange
.
Usage
ptybandage
ptybandage
est ce que les gens veulent généralement dans une session de connexion. Son principal cas d'utilisation consiste à créer des programmes qui sont sensibles au fait que leurs entrées, sorties ou erreurs standard sont connectées à des terminaux fonctionnent de cette manière, même s'ils se trouvent dans des pipelines shell ou que leurs descripteurs de fichier standard sont redirigés vers un fichier.
Il faut une commande à exécuter (qui doit être une commande externe appropriée, bien sûr) et fonctionne de telle manière qu'il estime que son entrée standard, de sortie et d' erreur sont fixés à un terminal, reliant ceux jusqu'aux ptybandage
« s entrée standard d'origine, sortie et erreur.
Il traite des nuances de l'exécution sous des shells de contrôle de travaux, en s'assurant qu'un caractère STOP du terminal non seulement s'arrête, ptybandage
mais arrête également l'exécution du programme lié au terminal interne.
ptyrun
ptyrun
est ce que les gens veulent généralement dans les serveurs de réseau TCP. Son cas d'utilisation principal concerne les environnements d'exécution à distance qui n'ont pas eux-mêmes configuré des terminaux, exécutant des programmes qui ne fonctionnent pas comme ils le souhaitent sans terminal.
Il ne s'attend pas à être exécuté sous un shell de contrôle de travail et si la commande en cours d'exécution reçoit un signal d'arrêt, elle est simplement redémarrée.
Outils disponibles
Dru Nelson publie les versions "pty" 4 et "ptyget".
Paul Jarc publie une version fixe de ptyget, qui tente de traiter les ioctls de périphériques pseudo-terminaux spécifiques au système d’exploitation dans l’original que les systèmes d’exploitation ne fournissent plus.
Le paquet source nosh est fourni avec workalike ptybandange
et des ptyrun
scripts, qui utilisent l' execline
outil de Laurent Bercot et les propres commandes de gestion pseudo-terminal du paquet nosh. Depuis la version 1.23 de nosh, ils sont disponibles pré-emballés dans le paquet nosh-terminal-extras. (Les versions antérieures ne les fournissaient qu'aux personnes ayant construit à partir des sources.)
Quelques exemples d'utilisations
Jurjgen Oskam utilisant ptybandage
sous AIX pour alimenter en entrée un document qui précède s'ouvre et lit son terminal de contrôle pour une invite de mot de passe:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
mot de passe
session de requête
processus de requête
quitter
EOF
Andy Bradford utiliseptyrun
sous OpenBSD sous daemontools et ucspi-tcp pour rendre le bgplgsh
programme de contrôle de routeur interactif accessible via le réseau tout en laissant croire qu'il parle à un terminal:
#! / bin / sh
exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Lectures complémentaires