Eu estava brincando com o awk e queria expô-lo em um soquete tcp.
No começo eu tentei, mas falhei com o micro-inetd. Pensando que talvez o problema possa estar no modo como os caracteres carriage returns / newlines são manipulados, decidi tentar mudar para socat.
Usar um comando remoto com o socat é bastante fácil:
socat TCP4-LISTEN:9000 EXEC:/bin/cat
socat TCP4-LISTEN:9000 SYSTEM:"/bin/python -i"
ambos trabalham
Mas ao tentar o mesmo com um simples comando awk (por exemplo, 'awk' {print NR} 'para contar progressivamente o número de linhas recebidas) eu não obtenho nada quando conecto com o socat de outro shell no mesmo máquina.
Eu tentei muitas coisas (algumas delas falharam com um erro de sintaxe que é um pouco obscuro para mim. Eu não posso nem tentar strat socat para ver exatamente o que está sendo executado, já que o comando atual exec'ing é delegado para o shell):
socat TCP4-LISTEN:9000 SYSTEM:"/usr/bin/awk '{print NR}'"
socat TCP4-LISTEN:9000 SYSTEM:'/usr/bin/awk "{print NR}"'
socat TCP4-LISTEN:9000 SYSTEM:'/usr/bin/awk "{print\ NR}"'
Eu também criei um pequeno script /tmp/testawk
#! /bin/sh
/usr/bin/awk '{print NR}'
(também com uma variante exec)
#! /bin/sh
exec /usr/bin/awk '{print NR}'
Ambos funcionam localmente, mas quando invocam
socat TCP4-LISTEN:9000 EXEC:/tmp/testawk
Não me manda de volta a saída
Pensando que o problema pode ser herança das manipulações stdin / stdout e / ou novamente manipulação de crlf ... Eu tentei também com:
socat TCP4-LISTEN:9000 EXEC:/tmp/testawk,nofork
socat TCP4-LISTEN:9000,crnl EXEC:/tmp/testawk
socat TCP4-LISTEN:9000 EXEC:/tmp/testawk,crnl
socat TCP4-LISTEN:9000,crnl EXEC:/tmp/testawk,crnl
Encontrei outra pessoa que se queixou de problema semelhante , mas aparentemente falhou para angariar atenção
Alguma ideia do que está errado?