gpt4 book ai didi

bash - socat:使用串行端口记录对话

转载 作者:行者123 更新时间:2023-11-29 09:14:38 28 4
gpt4 key购买 nike

一段时间后,我终于让 socat 以与 putty 相同的方式运行,使用:

stty -F /dev/ttyS2 115200 cs8 ixoff
socat $(tty),raw,echo=0,escape=0x03,nonblock /dev/ttyS2
stty sane

我还想将对话记录到日志文件中。

编辑:

我找到了一种方法(但我认为这是一种拼凑),所以我回答了我自己的问题 - 根据堆栈溢出标准,这是一个有效的答案。

最佳答案

(我的第一种做法不对,所以修改)

我从未使用过 socat,但如果它有 -v log.txt 选项,我有一个可能的解决方案给你 正如我所见使用 -v 选项,它也将结果打印到 stderr。

我假设您希望将日志文件发送到 log.txt 中,剪切前 10 行并删除所有 \r 字符。在 上它支持进程替换,它可以像这样完成:

socat -v ... 2> >(awk 'NR>10 {gsub("\r","");print}'>log.txt)

(注意两个>标记之间的空格!!!)

这将创建一个进程,>(...) 返回一个类似 /dev/fd/68 的文件并重定向 stderr给它。实际上这是一个到括号内指定进程的管道 (awk)。所以文本经过 并将其输出写入 log.txt

如您所述,您没有 这可以使用 解决(或 tailtr 管道,但它需要一个额外的过程)。

socat -v ... 2> >(sed -e '1,10 d' -e 's/\r//g' >log.txt)

(注意两个>标记之间的空格!!!)

好像不支持这个,但它可以在相当老的 RedHat Linux 上运行。

实际上,您也可以使用 -lf(我不确定这会打印出您需要的所有内容。如果有更好的选择,也许可以使用 -v...):

-lf <logfile>
Writes messages to <logfile> [filename] instead of stderr.
Some third party libraries, in particular libwrap, might not obey
this option.

所以原来的方法也行得通:

socat -lf >(sed -e '1,10 d' -e 's/\r//g' >log.txt) ...

希望对您有所帮助!

关于bash - socat:使用串行端口记录对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338706/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com