Suponha que você tenha um emulador de terminal (T1) aberto com um PID de 6350.
Em outro terminal, digite este comando (C1):
echo "ls\n" > /proc/6350/fd/0
Isso grava ls
e a nova linha em T1, mas não a executa. Por quê?
Eu também tentei usar cat|bash
com, echo "ls\n" > /proc/catid/fd/0
mas ainda não foi executado.
Como posso ecoar o comando em outro terminal e executá-lo?
possível resposta :
$ mkfifo toto;
$ bash < toto;
$ echo "ls" > toto;
Nesse caso, você não pode mais escrever diretamente no terminal (tudo é exibido da mesma maneira que o comando (C1) exibido neste terminal.
terminal
stdout
command
file-descriptors
rvlander
fonte
fonte
Respostas:
Existe um utilitário de linha de comando chamado
ttyecho
que pode enviar um comando para outro terminal (tty / pts) e executar o comando.Consulte: Utilitário para enviar comandos ou dados para outros terminais (tty / pts)
Veja também:
ttyecho
código fonte no github .Outro comando tty interessante é
selector
um comparador de padrões interativos em tempo real no console que atualiza o buffer de entrada tty.Veja: seletor - PESQUISA DINÂMICA EM CONSOLE
fonte
ttyecho
código fonte no github parece estar quebrado. No entanto, parece estar disponível em github.com/osospeed/ttyecho agora.Quando você escreve uma gravação para
/dev/pts/X
(/proc/6350/fd/0
,1
e2
é apenas um link simbólico para isso), o que acontece é exatamente a mesma coisa que acontece quando o processo6350
(ou um de seus filhos, adequadamente bifurcado) produz algo: ele grava no terminal.Se você tentar ler a partir desse dispositivo (
cat < /dev/pts/X
), coisas estranhas acontecerão. Você deve ver as coisas que digitar no shell original. (Possivelmente apenas após a primeira nova linha que você digitou - acho que o programa do terminal (xterm
ou o que você estiver usando) faz algum buffer de linha, e o6350
shell que foi bloqueadoread
recebe esse pedaço; então, o shell pode ou pode não, ganhe as leituras subsequentes, mas eu posso estar completamente errado nisso.)A questão é: quando você lê ou escreve nesse dispositivo, não está conversando com o outro shell que o está usando. Você está falando com o emulador de terminal (
xterm
por exemplo). Somente o emulador de terminal pode injetar dados nesse canal (o que o shell lê) e tudo o que o shell grava vai para o terminal. Anexar um segundo shell não muda isso.Se você deseja injetar comandos nesse
6530
processo, terá que fazer isso através do terminal (seja um aplicativo X11 ou outra coisa).Leitura recomendada: Qual é a diferença exata entre um 'terminal', um 'shell', um 'tty' e um 'console'?
fonte
cat /dev/pts/x
você não precisa<
), recebo as letras alternadamente estritamente entre os terminais./proc/6350/fd/0
é um simlink para o pai stdin doprocess 6350
qual é um terminal. Eu acho que é o mesmo para aplicativos em janelas?