Um histórico de conjuntos de ferramentas
O mais antigo instrumento para esse tipo de coisa foi o pacote "pty", de Daniel J. Bernstein, descrito por Rich Salz como "faca Ginsu", que ele escreveu na virada da década de 1990 para trapacear em nethack (sic !) A versão 4 do pacote "pty" foi publicada em 1992 paracomp.sources.unix
(volume 25, edições 127 a 135). Ainda é localizável na World Wide Web. Paul Vixie descreveu na época:
What can I say? It slices, it dices, it washes dishes, it walks the dog. It "just works", meaning that if you follow the directions you'll get a working package without any pulling of hair or gnashing of teeth or other standard porting activities.
Mais tarde, Bernstein atualizou isso, em algum momento antes ou antes de 1999-04-07, com um pacote "ptyget", que ele anunciou:
I've put together a new pseudo-tty allocator, ptyget. An alpha version is at
ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. There's a ptyget mailing list; to join, send an empty message to[email protected]
. I designed ptyget's interface from scratch. It's much more modular than pty; the basic pty interface has now been split into three pieces:
ptyget
: a tiny, low-level program — the only setuid program in the package — that allocates a new pseudo-tty and passes it to the program of your choiceptyspawn
: another small program that runs a child process under a pseudo-tty, waiting for it to exit and watching for stopsptyio
: another, only slightly larger, program that moves data back and forthThe old Ginsu knife
pty
is now spelledptybandage
, which is a synonym forptyget ptyio -t ptyspawn
;pty -d
, for attaching network programs to pseudo-ttys, is now spelledptyrun
, which is a synonym forptyget ptyio ptyspawn
; andnobuf
is a synonym forptyget ptyio -r ptyspawn -23x
. I've split off the session management features into a separate package.
Esse pacote separado era o pacote "sess".
"ptyget" é, incidentemente, notável por exemplificar uma versão muito antiga, e um dos poucos exemplos publicados do próprio sistema de construção "refazer" nunca publicado de Berstein. dependon
é um precursor claro para redo-ifchange
.
Conjunto de ferramentas disponíveis
Dru Nelson publica a versão "pty" 4 e "ptyget".
Paul Jarc publica uma versão fixa do ptyget, que tenta lidar com o dispositivo pseudo-terminal específico do sistema operacional ioctls no original que os sistemas operacionais atualmente não fornecem mais.
O pacote de código nosh vem com os scripts ptybandange
e ptyrun
, que usam a ferramenta execline
do Laurent Bercot e os comandos de gerenciamento do pseudo-terminal do próprio pacote.
Alguns exemplos usam
Jurjgen Oskam usando ptybandage
no AIX para alimentar entrada de um documento aqui para um programa que explicitamente abre e lê seu terminal de controle para um prompt de senha:
$ ptybandage dsmadmc <<EOF >uit.txt joskam password query session query process quit EOF
Andy Bradford usando ptyrun
no OpenBSD sob o daemontools e o ucspi-tcp para Torne o programa de controle de roteador interativo bgplgsh
acessível através da rede, fazendo com que ele pense que está falando com um terminal:
#!/bin/sh exec 2>&1 exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun /usr/bin/bgplgsh
Leitura adicional
- Daniel J. Bernstein (1992-02-19). v25i127: interface generalizada para dispositivos pseudo-tty . comp.sources.unix. 25 (127).
- Daniel J. Bernstein (1991-10-04). Uma introdução ao gerenciamento de sessões . Bernstein em TTYs. JdeBP.
- Paul Jarc. ptyget . Software de Paul Jarc.
- Jonathan de Boyne Pollard (2016). conjunto de ferramentas ptyget de Daniel J. Bernstein . Softwares.
- Dru Nelson. drudru / pty4 . GitHub.
- Dru Nelson. drudru / ptyget . GitHub.
- Laurent Bercot. execline . software.
- Jonathan de Boyne Pollard (2014). O pacote nosh . Softwares.
- Jonathan de Boyne Pollard (2012). Uma introdução ao
redo
. Respostas frequentemente dadas. - Reyk Floeter.
bgplgsh
. 8. Páginas de manual do OpenBSD.