Используйте socat для подключения к сокету, отправки команды и чтения одной строки

у меня есть процесс, с которым можно связаться через сокет UNIX (на самом деле абстрактное исполнение который, я думаю, специфичен для Linux).

Я пишу скрипт, который должен отправлять команды в этот процесс. Я решил попробовать использовать SOCAT для этой цели. Я пытаюсь выяснить, как (1) подключиться к абстрактному сокету, (2) отправить ему одну команду (строку), (3) прочитать ответ и распечатать ответ на stdout.

Так далеко, я могу легко подключиться, просто сказав:

socat ABSTRACT-CONNECT:mysocket STDIN

это подключает STDIN к сокету, поэтому, если я знаю, что вручную введите команду, сокет прочитает строку, а затем выведет полученный ответ на консоль.

за исключением случаев, когда я запускаю socat в скрипте, мне нужно автоматизировать отправку строки в STDIN. Итак, самый простой способ сделать это-просто протянуть струну STDIN. Итак, предположим, что у нас есть команда под названием"status" Я бы скажи:

echo status | socat ABSTRACT-CONNECT:mysocket STDIN

это, кажется, работает (socat не сообщает об ошибках), за исключением того, что результат не отправляется в stdout. Скорее, вызов просто возвращается без ответа. Итак, как я могу также прочитать одну строку из сокета и отобразить результат на stdout?

1 ответов


используйте тип адреса "STDIO" для второго аргумента , это двунаправленный адрес . он считывает входные данные с консоли и отправляет на противоположный конец, а также получает данные с противоположного конца и записывает на выход консоли . хорошо отметить - ака. тире является ярлыком для stdio .