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 )
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.
cat mypipe | netcat ...
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!