Stavo giocando con awk e volevo esporlo su un socket tcp.
All'inizio ci ho provato, ma ho fallito con micro-inetd. Pensando che forse il problema potrebbe essere nel modo in cui vengono gestiti i caratteri di ritorno a capo / newline, ho deciso di provare a passare a socat.
L'uso di un comando remoto con socat è abbastanza semplice:
socat TCP4-LISTEN:9000 EXEC:/bin/cat
socat TCP4-LISTEN:9000 SYSTEM:"/bin/python -i"
entrambi funzionano
Ma quando provo lo stesso con un semplice comando awk (ad esempio "awk" {print NR} "per contare progressivamente il numero di linee ricevute) non ottengo nulla indietro quando mi connetto con socat da un'altra shell sulla stessa macchina.
Ho provato molte cose (alcune di queste falliscono con un errore di sintassi che è un po 'oscuro per me. Non riesco nemmeno a cercare di stracciare socat per vedere esattamente cosa viene eseguito, dal momento che l'attuale comando che esegue è delegato alla 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}"'
Ho anche creato una piccola sceneggiatura /tmp/testawk
#! /bin/sh
/usr/bin/awk '{print NR}'
(anche con una variante exec)
#! /bin/sh
exec /usr/bin/awk '{print NR}'
Entrambi funzionano localmente, ma quando si invoca
socat TCP4-LISTEN:9000 EXEC:/tmp/testawk
Non mi restituisce l'output
Pensando che il problema potrebbe essere l'ereditarietà degli handle stdin / stdout e / o ancora la gestione di crlf ... Ho provato anche con:
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
Ho trovato qualcun altro che si è lamentato di un problema simile , ma a quanto pare non è riuscito a ottenere alcuna attenzione
Qualche idea su cosa non va?
stdbuf -oL -eL /usr/bin/awk '{print NRq}'
ma non riesco ancora a vedere nulla dall'altra parte