我有四个 TCP 套接字连接到一个设备。
这些是用创建的
exec 3<>/dev/tcp/IP/PORT
exec 4<>/dev/tcp/IP/PORT
exec 5<>/dev/tcp/IP/PORT
exec 6<>/dev/tcp/IP/PORT
在子 shell 中,我从文件描述符中读取
cat <&4 | while read LINE; do
echo -n "FD4 $LINE" | xxd -ps | sed 's/../&\ /g' > somefile.txt
done &
将其转发到文件以供进一步使用。
但对于某些类型的消息我遇到了问题。
用一个简单的
cat <&6 | xxd -ps
我看到以下内容(一些参数)。
006ec94430020000c090006800c903470000000000040000209f00000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
但我无法将其转发到文件或变量来使用它。
我已经尝试过不同的方法,但找不到解决方案。
我希望有人知道如何处理这样的消息。
答案1
您的代码存在几个问题:
- 在读取的每一行中,您都会重新创建,
somefile.txt
从而擦除前一行中放置的内容。您可能应该使用>> somefile.txt
代替,或者移到关键字> somefile.txt
后面done
。 - 看来您正在接收二进制数据(根据
xxd
转储),但您对其进行处理,就好像它是由新行分隔的文本数据一样。对于二进制数据,read
将echo
无法正常工作。
为什么不简单地将文件描述符的内容传递给文件xxd
并将结果保存到文件中?即只是这样:
xxd -ps <&4 | sed 's/../&\ /g' > somefile.txt &