Uma história de conjuntos de ferramentas
Você não é a primeira pessoa a querer essa ferramenta. As pessoas estão querendo essas ferramentas há 30 anos. E eles existem há quase tanto tempo também.
A primeira ferramenta para esse tipo de coisa foi o pacote "pty" de Daniel J. Bernstein, descrito por Rich Salz como uma "faca Ginsu", que Bernstein escreveu na virada da década de 1990 para enganar o nethack (sic!). A versão 4 do pacote "pty" foi publicada em 1992 para comp.sources.unix
(volume 25 edições 127 a 135). Ainda é localizável na Internet. Paul Vixie descreveu na época:
O que posso dizer? Corta, corta, lava a louça, acompanha o cachorro. "Funciona", o que significa que, se você seguir as instruções, receberá um pacote de trabalho sem puxar os cabelos ou ranger de dentes ou outras atividades padrão de transporte.
Mais tarde, Bernstein atualizou isso, em algum momento antes de 1999-04-07, com um pacote "ptyget", que ele anunciou:
Eu montei um novo alocador de pseudo-tty, ptyget. Uma versão alfa está em ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz
. Há uma lista de discussão ptyget; para participar, envie uma mensagem vazia para
djb-ptyget-requ...@koobera.math.uic.edu
. Eu projetei a interface do ptyget do zero. É muito mais modular que pty; a interface pty básica agora foi dividida em três partes:
ptyget
: um pequeno programa de baixo nível - o único programa setuid do pacote - que aloca uma nova pseudo-tty e a passa para o programa de sua escolha
ptyspawn
: outro pequeno programa que executa um processo filho em uma pseudo-tty, aguardando a saída e observando as paradas
ptyio
: outro programa apenas um pouco maior que move os dados para frente e para trás
A velha faca Ginsu pty
agora está escrita ptybandage
, o que é sinônimo ptyget ptyio -t ptyspawn
; pty -d
, para anexar programas de rede a pseudo-ttys, agora está escrito ptyrun
, o que é sinônimo ptyget ptyio ptyspawn
; e nobuf
é sinônimo de
ptyget ptyio -r ptyspawn -23x
. Dividi os recursos de gerenciamento de sessões em um pacote separado.
Esse pacote separado era o pacote "sess".
"ptyget" é, aliás, notável por exemplificar uma versão muito antiga e uma das poucas instâncias publicadas do sistema de compilação "redo" nunca publicado de Berstein. dependon
é um precursor claro de redo-ifchange
.
Uso
ptybandage
ptybandage
é o que as pessoas geralmente querem em uma sessão de login. Seu principal caso de uso é criar programas sensíveis a que suas entradas, saídas ou erros padrão estejam conectados aos terminais, operem dessa maneira, mesmo que estejam de fato em pipelines de shell ou tenham seus descritores de arquivo padrão redirecionados para o arquivo.
É preciso um comando a ser executado (que tem de ser um comando externo apropriado, é claro) e executa-lo de tal maneira que ele acha que seu padrão de entrada, saída e erro estão ligados a um terminal, conectando aqueles através de ptybandage
's entrada, saída e erro padrão original.
Ele lida com as nuances da execução sob as caixas de controle de tarefas, assegurando que o caractere STOP do terminal não apenas pare, ptybandage
mas também interrompa a execução do programa conectado ao terminal interno.
ptyrun
ptyrun
é o que as pessoas geralmente querem nos servidores de rede TCP. Seu caso de uso principal são ambientes de execução remota que não configuraram terminais, executando programas que não operam como desejado quando não há terminal.
Ele não espera estar sendo executado sob um shell de controle de tarefas e, se o comando que está sendo executado recebe um sinal de parada, é simplesmente reiniciado.
Conjuntos de ferramentas disponíveis
Dru Nelson publica as versões "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 na verdade não fornecem mais.
O pacote fonte nosh vem com scripts ptybandange
e práticas ptyrun
, que usam a execline
ferramenta de Laurent Bercot e os comandos de gerenciamento pseudo-terminal do próprio pacote nosh. A partir da versão 1.23 do nosh, eles estão disponíveis pré-empacotados no pacote nosh-terminal-extras. (As versões anteriores os forneciam apenas para pessoas que criavam a partir da fonte.)
Alguns exemplos usam
Jurjgen Oskam usando ptybandage
no AIX para alimentar a entrada de um documento aqui para um programa que é explicitamente aberto e lê seu terminal de controle para um prompt de senha:
$ ptybandage dsmadmc << EOF> uit.txt
joskam
senha
sessão de consulta
processo de consulta
Sair
EOF
Andy Bradford usando ptyrun
no OpenBSD sob daemontools e ucspi-tcp para tornar o bgplgsh
programa de controle de roteador interativo acessível via rede, enquanto pensa que está falando com um terminal:
#! / bin / sh
exec 2> & 1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun / usr / bin / bgplgsh
Leitura adicional