我有一个可以通过UNIX套接字(实际上是abstract socket,我认为它特定于Linux)进行通信的进程。

我正在编写一个shell脚本,该脚本需要向该过程发送命令。我决定尝试为此目的使用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上显示结果呢?

最佳答案

在第二个参数中使用“STDIO”地址类型,这是双向地址。它从控制台读取输入数据并发送到另一端,并从另一端接收数据并写入控制台输出。值得一提- aka。破折号是stdio的快捷方式。

10-08 03:08