Una storia di set di strumenti
Non sei la prima persona a desiderare un simile strumento. Le persone desiderano tali strumenti da 30 anni. E sono esistiti anche per così tanto tempo.
Il primo strumento per questo genere di cose fu il pacchetto "pty" di Daniel J. Bernstein, descritto da Rich Salz come un "coltello Ginsu", che Bernstein scrisse alla fine degli anni '90 per imbrogliare a nethack (sic!). La versione 4 del pacchetto "pty" è stata pubblicata nel 1992 comp.sources.unix
(volume 25 numeri da 127 a 135). È ancora localizzabile sul World Wide Web. Paul Vixie lo descrisse all'epoca:
Cosa posso dire? Taglia, taglia, lava i piatti, porta a spasso il cane. "Funziona", il che significa che se segui le istruzioni otterrai un pacchetto di lavoro senza strappi di capelli o digrignamento dei denti o altre attività di porting standard.
Bernstein in seguito lo aggiunse, qualche volta prima o prima del 1999-04-07, con un pacchetto "ptyget", che annunciò:
Ho messo insieme un nuovo allocatore pseudo-tty, ptyget. Una versione alfa è a ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. C'è una mailing list di ptyget; per partecipare, inviare un messaggio vuoto a
djb-ptyget-requ...@koobera.math.uic.edu
. Ho progettato l'interfaccia di ptyget da zero. È molto più modulare di pty; l'interfaccia pty di base ora è stata divisa in tre pezzi:
ptyget
: un piccolo programma di basso livello - l'unico programma setuid nel pacchetto - che alloca un nuovo pseudo-tty e lo passa al programma che preferisci
ptyspawn
: un altro piccolo programma che esegue un processo figlio sotto pseudo-tty, in attesa che esca e in attesa di fermate
ptyio
: un altro programma, leggermente più grande, che sposta avanti e indietro i dati
Il vecchio coltello Ginsu pty
è ora scritto ptybandage
, che è sinonimo di ptyget ptyio -t ptyspawn
; pty -d
, per collegare programmi di rete a pseudo-tty, è ora scritto ptyrun
, che è sinonimo di ptyget ptyio ptyspawn
; ed nobuf
è sinonimo di
ptyget ptyio -r ptyspawn -23x
. Ho suddiviso le funzionalità di gestione della sessione in un pacchetto separato.
Quel pacchetto separato era il pacchetto "sess".
"ptyget" è, per inciso, noto per esemplificare una versione molto antica di, e una delle poche istanze pubblicate del sistema di build "redo" mai pubblicato da Berstein. dependon
è un chiaro precursore di redo-ifchange
.
uso
ptybandage
ptybandage
è ciò che di solito le persone desiderano in una sessione di accesso. Il suo caso d'uso principale è rendere i programmi sensibili al fatto che i loro input, output o errori standard siano collegati ai terminali funzionino in questo modo anche se in realtà sono in pipeline di shell o se i loro descrittori di file standard vengono reindirizzati a file.
Ci vuole un comando da eseguire (che deve essere un comando esterno adeguato, ovviamente) e viene eseguito in modo tale che esso ritiene che il suo input, output e l'errore standard sono collegati a un terminale, collega quelli sui ptybandage
s' input, output ed errore standard originali.
Gestisce le sfumature dell'esecuzione sotto shell di controllo lavoro, assicurando che un carattere STOP del terminale non solo si fermi, ptybandage
ma fermi anche il programma in esecuzione collegato al terminale interno.
ptyrun
ptyrun
è ciò che la gente di solito desidera nei server di rete TCP. Il suo caso d'uso principale sono gli ambienti di esecuzione remota che non hanno essi stessi impostato terminali, eseguendo programmi che non funzionano come desiderato quando non c'è terminale.
Non prevede di essere eseguito in una shell di controllo lavoro e se il comando in esecuzione riceve un segnale di arresto, viene semplicemente riavviato.
Set di strumenti disponibili
Dru Nelson pubblica sia "pty" versione 4 che "ptyget".
Paul Jarc pubblica una versione fissa di ptyget, che tenta di gestire l'originale dispositivo pseudo-terminale specifico del sistema operativo che i sistemi operativi non forniscono più.
Il pacchetto sorgente di nosh viene fornito con workalike ptybandange
e ptyrun
script, che utilizzano lo execline
strumento di Laurent Bercot e i comandi di gestione pseudo-terminali del pacchetto nosh . A partire dalla versione 1.23 di nosh, questi sono disponibili preconfezionati nel pacchetto nosh-terminal-extra. (Le versioni precedenti le fornivano solo alle persone che costruivano dalla fonte.)
Alcuni esempi usano
Jurjgen Oskam utilizza ptybandage
su AIX per inviare l' input da un documento qui a un programma che esplicitamente apre e legge il suo terminale di controllo per una richiesta di password:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
parola d'ordine
sessione di query
processo di query
smettere
EOF
Andy Bradford utilizza ptyrun
OpenBSD su demoneols e ucspi-tcp per rendere bgplgsh
accessibile il programma di controllo del router interattivo tramite la rete, facendo pensare che stia parlando con un terminale:
#! / Bin / sh
exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Ulteriori letture