Estoy tratando de obtener una secuencia de texto en vivo netcat
, pero no funciona para mí:
netcat localhost 9090 | grep sender
no devuelve nada, pero estoy seguro de que debería.
Si redirijo la netcat
salida a un archivo y agrego algunos retrasos (simular el entorno real), entonces funciona:
$ (sleep 5; cat netcat_output; sleep 5) | grep sender
{"jsonrpc":"2.0","method":"GUI.OnScreensaverDeactivated","params":{"data": "shuttingdown":false},"sender":"xbmc"}}
También intenté agregar --line-buffered
pero sin éxito.
¿Qué hice mal?
Editar:
Noté el mismo problema con sed
, la salida está vacía.
Pero, por ejemplo, hexdump
convierte el texto en hexadecimal en vivo:
$ netcat localhost 9090 | hexdump -C
00000000 7b 22 6a 73 6f 6e 72 70 63 22 3a 22 32 2e 30 22 |{"jsonrpc":"2.0"|
00000010 2c 22 6d 65 74 68 6f 64 22 3a 22 50 6c 61 79 65 |,"method":"Playe|
00000020 72 2e 4f 6e 50 6c 61 79 22 2c 22 70 61 72 61 6d |r.OnPlay","param|
00000030 73 22 3a 7b 22 64 61 74 61 22 3a 7b 22 69 74 65 |s":{"data":{"ite|
00000040 6d 22 3a 7b 22 69 64 22 3a 36 2c 22 74 79 70 65 |m":{"id":6,"type|
00000050 22 3a 22 6d 6f 76 69 65 22 7d 2c 22 70 6c 61 79 |":"movie"},"play|
00000060 65 72 22 3a 7b 22 70 6c 61 79 65 72 69 64 22 3a |er":{"playerid":|
00000070 31 2c 22 73 70 65 65 64 22 3a 31 7d 7d 2c 22 73 |1,"speed":1}},"s|
netcat -z localhost 9090 | grep sender
grep
lo que probablemente esté esperando sin cesar una nueva línea. cat
funciona ya grep
que obtendrá un EOF si no una nueva línea, al menos. ¿Quizás probar awk
con {
RS?
stdbuf -o0 netcat localhost 9090 | grep sender
(tomado de aquí )