一段时间后,我终于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
字符。在支持进程替换的 bash 上,可以像这样完成:
socat -v ... 2> >(awk 'NR>10 {gsub("r","");print}'>log.txt)
(注意两个>
标记之间的空格!!(
这将创建一个进程,>(...)
返回一个类似/dev/fd/68
的文件,并将stderr
重定向到它。实际上,这是通往括号内指定的进程的管道(awk
(。所以文本经过awk,它的输出被写入log.txt
.
正如您提到的,您没有awk,这可以使用sed(或tail
和tr
管道来解决,但它需要一个额外的过程(。
socat -v ... 2> >(sed -e '1,10 d' -e 's/r//g' >log.txt)
(注意两个>
标记之间的空格!!(
似乎cygwin不支持这一点,但它在一个相当旧的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) ...
我希望这有帮助!