4

一段时间后,我终于得到了socat与 相同的行为方式putty,使用:

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

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

编辑:

我想出了一种方法来做到这一点,(但我认为这是一个混乱),所以我回答了我自己的问题 - 这是堆栈溢出标准的有效答案。

4

1 回答 1

2

(我的第一种方法不正确,所以我修改)

我从未使用过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.

正如您所提到的,您没有 ,这可以使用(或tail管道tr,但它需要一个额外的过程)来解决。

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) ...

我希望这有帮助!

于 2015-01-17T17:13:53.787 回答