Pergunta

Estou me perguntando como alguém iria redirecionar o stdin de um script da atual sessão do Xtert IE/dev/pts/0 para um que também está executando o IE/dev/pts/1 usando o bash? Eu tenho um script bash que abre 3 janelas X e quero obter informações de apenas uma dessas janelas e não consigo descobrir como fazê -lo. Qualquer ajuda é apreciada! obrigado.



EDITAR (Movido de baixo - OP enviou este esclarecimento como resposta)

Acho que deveria ter esclarecido o que queria fazer. Vou iniciar um script de um pty, digamos que é/dev/pts/3. Este script abrirá 3 Xterminals, digamos:/dev/pts/0,/dev/pts/1 e/dev/pts/2. Esses três novos PTYs são o que o usuário vai ver. O script pede alguma entrada ao usuário e eu quero que a entrada do usuário seja digitada em/dev/pty/1 e o programa deve obter suas informações a partir daí. No entanto, eu tentei fazer isso e não funciona. Aqui está um trecho do meu código.

exec</dev/pts/1

echo
echo "Would you like to search for more info?" 1>/dev/pts/1
read answer

case $answer in
    y) echo "YES" ;;
    n) echo "NO"  ;;
    *) echo "y/n only!";;
esac

A declaração do caso no final é apenas um pequeno espaço reservado para ver se a entrada realmente funcionou.

Foi útil?

Solução

Eu suspeito que isso não é possível. Afaik, sem modificar algo no espaço do kernel, é impossível ler a entrada de um Tty (ou Pty) que não é o TTY atual. Mesmo a raiz não pode fazer isso. Passei algum tempo analisando isso e não consegui descobrir como fazê -lo, mas encontrei muitas fontes alegando que era impossível. Parece ter sido uma decisão de design para aumentar a segurança/privacidade dos usuários.

Outras dicas

Talvez você possa ajustar ttyecho para suas necessidades?

# /dev/ttysXXX is the result of the tty command in another Terminal window
sudo ttyecho -n /dev/ttysXXX pwd

E talvez ttyecho poderia ser combinado com netcat (ou nc) ou ncat (que faz parte do NMAP) para se comunicar entre diferentes TTYs?

Para mais informações, veja:

Para responder à sua pergunta esclarecida, uma maneira simples é usar um FIFO (chamado Pipe) para o trabalho. Ao enviar terminal:

mkfifo ./myfifo
read var
echo "var" > myfifo

No terminal de recieding:

read line < ./myfifo

Para simplesmente imprimir mais um Xterm do seu, ao reciar o Xterm:

$ tty
/dev/pts/2

Ao enviar o Xterm:

$ echo howdy doody > /dev/pts/2

Ou de um script no envio de Xterm, redirecionando Stdin enquanto você perguntou:

$ cat > /dev/pts/2

Você deve ser o CHMOD das permissões para escrever para/dev/pts/2 se estiver fazendo isso entre os usuários.

Você não pode capturar o que é impresso dessa maneira no terminal de recebimento. Não existe um método de redirecionamento construído para capturar a entrada de outro terminal.

Se você deseja uma maneira automatizada para o envio do Xterm para descobrir o dispositivo de caracteres do recebimento, isso pode ser respondido de várias maneiras, dependendo do tipo de comunicação interprocessante que você deseja usar. Um hack simples seria que o receptor faça o TTY> FILE1 e o remetente para ecoar o que

Se você quiser tentar direcionar isso do receptor em vez do remetente, novamente você tem um problema de comunicação interprocessante que pode ser resolvido de várias maneiras.

É simples que você só precisa entender

ls -ls /dev /pts você verá

0 1 2 3 4 Suponha que você abra vários

Agora use um não 4 e digite gato </dev/pts/4 ou exec <cat/dev/pts/4

e digite algo em 4 o que você sabe agora o que acontece

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top