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

ログファイルをlog.txtに送信し、最初の10行を切り取り、すべての\r文字を削除したいと思います。プロセス置換をサポートするでは、次のように実行できます。

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

(2つのマークの間のスペースに注意し>てください!!!)

これにより、プロセスが作成され、次の>(...)ようなファイルが返され、そのファイル/dev/fd/68にリダイレクトさstderrれます。実際には、これは括弧 ( awk) 内で指定されたプロセスへのパイプです。を通過し、その出力は に書き込まれlog.txtます。

を持っていません。これは (またはパイプですが、追加のプロセスが必要です)tailを使用して解決できます。tr

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

(2つのマークの間のスペースに注意し>てください!!!)

はこれをサポートしていないようですが、かなり古い 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 に答える