2014-12-07 55 views
3

登錄交談過了一段時間,我終於得到了socat以同樣的方式表現爲putty,使用:socat:用串口

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

我也想談話記錄到日誌文件。

編輯:

我想出了一個辦法如何做到這一點,(但我認爲這是一個雜牌組裝電腦),所以我回答我自己的問題 - 這是堆棧溢出標準的有效答案。

+0

'人socat'應該給你的方式來做到這一點,這裏是http://www.dest-unreach.org/socat/doc/socat.html – BMW 2014-12-07 04:39:51

+0

嗯,我讀[this](https:///stuff.mit.edu/afs/sipb/machine/penguin-lust/src/socat-1.7.1.2/EXAMPLES)和[this](http://technostuff.blogspot.com/2008/10/some-useful- socat-commands.html)以及手冊頁。該文檔給了我一些想法嘗試,但沒有一個工作:'socat -v log.txt ...'有一個頭文件和一個不必要的'\ r',而任何嘗試將'socat'(將串口綁定到控制檯的第一個實例)到另一個(將控制檯綁定到文件)的任何一個嘗試都會產生一個錯誤(太多/很少地址)或空文件。 – Ulrik 2014-12-10 15:03:34

+0

請寄出'socat -v log.txt'的輸出,以及爲了滿足您的需求需要對文件進行哪些更改。我相信'awk'會做到這一點。 – ShellFish 2015-01-11 00:20:06

回答

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

如上所述,您沒有這可以使用(或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) ... 

我希望這有助於!

+0

我不熟悉創建像這樣的過程的概念。由於我沒有'awk'在那個系統上,我會使用'tr'和/或'sed'。但僅僅用於測試目的,我不能在沒有任何翻譯的情況下重現你的命令,即'socat -v ... 2>(cat> log.txt)' – Ulrik 2015-01-27 20:49:19

+0

@Ulrik:對不起,我誤解了'-v'的含義。我認爲它需要一個文件arg並將其打印到該文件,但不是。它也將輸出重定向到'stderr'。我糾正了我的答案。 – TrueY 2015-01-28 11:22:19