Una historia de conjuntos de herramientas.
No eres la primera persona que quiere esa herramienta. La gente ha querido estas herramientas durante 30 años. Y han existido durante casi tanto tiempo también.
La primera herramienta para este tipo de cosas fue el paquete "pty" de Daniel J. Bernstein, descrito por Rich Salz como un "cuchillo Ginsu", que Bernstein escribió a principios de la década de 1990 para engañar a nethack (¡sic!). La versión 4 del paquete "pty" se publicó en 1992 comp.sources.unix
(volumen 25, números 127 a 135). Todavía es localizable en la World Wide Web. Paul Vixie lo describió en ese momento:
¿Qué puedo decir? Rebana, corta en cuadritos, lava platos, pasea al perro. "Simplemente funciona", lo que significa que si sigue las instrucciones obtendrá un paquete de trabajo sin tirar del cabello o rechinar los dientes u otras actividades de portabilidad estándar.
Bernstein más tarde actualizó esto, en algún momento antes del 07/04/1999, con un paquete "ptyget", que anunció:
He creado un nuevo asignador pseudo-tty, ptyget. Una versión alfa está en ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. Hay una lista de correo ptyget; para unirse, envíe un mensaje vacío a
djb-ptyget-requ...@koobera.math.uic.edu
. Diseñé la interfaz de ptyget desde cero. Es mucho más modular que pty; La interfaz básica de pty ahora se ha dividido en tres partes:
ptyget
: un pequeño programa de bajo nivel, el único programa setuid en el paquete, que asigna un nuevo pseudo-tty y lo pasa al programa de su elección
ptyspawn
: otro pequeño programa que ejecuta un proceso secundario bajo un pseudo-tty, esperando a que salga y esperando paradas
ptyio
: otro programa, solo un poco más grande, que mueve datos de un lado a otro
El viejo cuchillo Ginsu pty
ahora se deletrea ptybandage
, lo cual es sinónimo de ptyget ptyio -t ptyspawn
; pty -d
, para adjuntar programas de red a pseudo-ttys, ahora se deletrea ptyrun
, lo cual es sinónimo de ptyget ptyio ptyspawn
; y nobuf
es sinónimo de
ptyget ptyio -r ptyspawn -23x
. He separado las funciones de administración de la sesión en un paquete separado.
Ese paquete separado era el paquete "sess".
"ptyget" es, por cierto, notable por ejemplificar una versión muy temprana y una de las pocas instancias publicadas del propio sistema de compilación "rehacer" nunca publicado por Berstein. dependon
es un claro precursor redo-ifchange
.
Uso
ptybandage
ptybandage
es lo que la gente suele querer en una sesión de inicio de sesión. Su caso de uso principal es hacer que los programas que son sensibles a si sus entradas, salidas o errores estándar están conectados a los terminales funcionen de esa manera, incluso si de hecho están en tuberías de shell, o tienen sus descriptores de archivo estándar redirigidos a un archivo.
Se necesita un comando a ejecutar (que tiene que ser un comando externo adecuado, por supuesto) y lo ejecuta de tal manera que se cree que su nivel de entrada, salida y error están asociadas a un terminal, la conexión de aquellos a través de ptybandage
's Entrada estándar original, salida y error.
Se ocupa de los matices de ejecutar bajo shells de control de trabajo, asegurando que un carácter STOP de terminal no solo se detenga ptybandage
sino que también detenga el programa en ejecución conectado al terminal interno.
ptyrun
ptyrun
es lo que la gente suele querer en los servidores de red TCP. Su caso de uso principal es entornos de ejecución remota que no han configurado terminales, ejecutando programas que no funcionan como se desea cuando no hay terminal.
No espera ejecutarse bajo un shell de control de trabajo, y si el comando que se ejecuta recibe una señal de detención, simplemente se reinicia.
Conjuntos de herramientas disponibles
Dru Nelson publica "pty" versión 4 y "ptyget".
Paul Jarc publica una versión fija de ptyget, que intenta lidiar con los ioctls de dispositivos pseudo-terminales específicos del sistema operativo en el original que los sistemas operativos ya no proporcionan.
El paquete fuente nosh viene con workalike ptybandange
y ptyrun
scripts, que usan la execline
herramienta de Laurent Bercot y los propios comandos de gestión de pseudo-terminal del paquete nosh. A partir de la versión 1.23 de nosh, estos están disponibles preempacados en el paquete nosh-terminal-extras. (Las versiones anteriores solo las suministraban a las personas que construían desde la fuente).
Algunos ejemplos de usos
Jurjgen Oskam utiliza ptybandage
en AIX para alimentar la entrada de un documento aquí a un programa que se abre explícitamente y lee su terminal de control para solicitar una contraseña:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
contraseña
sesión de consulta
proceso de consulta
dejar
EOF
Andy Bradford usa ptyrun
en OpenBSD bajo daemontools y ucspi-tcp para hacer que el bgplgsh
programa de control de enrutador interactivo sea accesible a través de la red mientras hace pensar que está hablando con un terminal:
#! / bin / sh
exec 2> y 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Otras lecturas