2014-11-10 7 views
5

Ho un processo che può essere comunicato tramite un socket UNIX (in realtà uno abstract socket che penso sia specifico per Linux).Utilizzare socat per connettersi al socket, inviare un comando e leggere una singola riga

Sto scrivendo uno script di shell che deve inviare comandi a questo processo. Ho deciso di provare a utilizzare SOCAT per questo scopo. Sto cercando di capire come (1) connettersi al socket astratto, (2) inviarlo un singolo comando (una stringa), (3) leggere la risposta e stampare la risposta allo stdout.

Finora, posso collegare facilmente semplicemente dicendo:

socat ABSTRACT-CONNECT:mysocket STDIN 

Questo si collega STDIN alla presa, quindi se lo so manualmente digita un comando, il socket leggerà nella stringa, e poi l'uscita risultante risposta alla console.

Tranne quando eseguo socat in uno script, è necessario automatizzare l'invio di una stringa a STDIN. Ok, quindi il modo più semplice per farlo sembrava essere quello di passare una stringa a STDIN. Quindi supponiamo di avere un comando chiamato "status", direi:

echo status | socat ABSTRACT-CONNECT:mysocket STDIN 

Questo sembra funzionare (socat rapporti nessun errore), tranne il risultato non viene inviato a stdout. Piuttosto, la chiamata torna semplicemente senza risposta. Quindi, come posso leggere anche una singola linea dal socket e visualizzare il risultato su stdout?

risposta

2

utilizzare il tipo di indirizzo "STDIO" per il secondo argomento, questo è un indirizzo bidirezionale. legge i dati di input dalla console e li invia all'estremità opposta, oltre a ricevere i dati dall'estremità opposta e scrive sull'output della console. buon per dire - aka. il trattino è scorciatoia per stdio.

+0

E come salvare questo in variabile locale nello script di shell? – 0andriy

Problemi correlati