Escreva para o stdin do processo em execução de vez em quando

3

De tempos em tempos, quero enviar algum texto para a entrada de netcat . O Netcat irá enviá-lo para outro processo netcat (na minha máquina ou em uma rede local), mas agora estou preocupado apenas com o primeiro.

Por exemplo Ao pressionar o botão, o usuário preenche um valor em um prompt; Quero enviar esse valor para esse processo.

Dado o valor em, digamos $text , como posso enviá-lo para netcat para recebê-lo e tratá-lo como stdin normal?

Eu tentei as seguintes formas, nenhuma delas funciona:

  • echo $text >> /proc/'pidof netcat'/fd/0 .
    Isso grava $text no terminal, mas o netcat não o recebe. (de acordo com esta questão )

    • Eu também tentei iniciar o netcat assim: cat | netcat ... e ecoando para o processo cat
  • mkfifo pipe; netcat <mypipe
    Agora, quando o outro processo netcat se conecta, ele recebe o que enviei para mypipe até agora.
    Quaisquer gravações adicionais para mypipe não terão efeito.

    • Eu também tentei cat mypipe | netcat ...
      Isso teve um resultado diferente: a primeira gravação para mypipe é enviada para o outro processo netcat, mas a segunda echo 123 >mypipe tenta congelar - não obtenho o prompt e posso inserir valores, mas nada acontece.

Como acabei de aprender sobre pipes nomeados, talvez eu não esteja usando corretamente.
Mas procurando por "arquivos de fluxo" ou similares conta que eles são a ferramenta certa para este trabalho (mas não como ).

A alternativa à minha primeira tentativa (aprendi sobre isso em serverfault ) foi usar screen , mas acho que é um exagero para o meu problema.

O problema com os pipes nomeados parece ser que echo envia EOF após a string. Por sua vez, netcat interrompe a leitura do pipe e, portanto, não posso enviar mais mensagens (posso, mas o netcat não as lê). Isso me levou a Piping dados para stdin de um processo sem causar EOF depois , mas não vejo como aplicar a solução fornecida ao meu caso.

Acho que cobri qualquer combinação possível de pipes / cats / echoes sem resultado, então a única coisa que resta é unix.se:)

Obrigado antecipadamente!

    
por Al.G. 27.12.2016 / 16:28

0 respostas