8

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

我正在编写一个需要向该进程发送命令的 shell 脚本。为此,我决定尝试使用 SOCAT。我试图弄清楚如何(1)连接到抽象套接字,(2)向它发送单个命令(字符串),(3)读取响应并将响应打印到标准输出。

到目前为止,我可以简单地说:

socat ABSTRACT-CONNECT:mysocket STDIN

这会将 STDIN 连接到套接字,因此如果我知道手动键入命令,套接字将读取字符串,然后将结果响应输出到控制台。

除了在脚本中运行 socat 时,我需要自动将字符串发送到 STDIN。好的,所以最直接的方法似乎是将一个字符串通过管道传输到 STDIN。所以假设我们有一个名为“ status”的命令,我会说:

echo status | socat ABSTRACT-CONNECT:mysocket STDIN

这似乎工作(socat 报告没有错误),除了结果没有发送到标准输出。相反,调用只是返回而没有响应。那么我怎样才能从套接字中读取一行并将结果显示在标准输出上呢?

4

1 回答 1

4

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

于 2015-01-27T18:59:41.903 回答