无法在 bash 脚本中转发 TCP 套接字

无法在 bash 脚本中转发 TCP 套接字

我有四个 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转储),但您对其进行处理,就好像它是由新行分隔的文本数据一样。对于二进制数据,readecho无法正常工作。

为什么不简单地将文件描述符的内容传递给文件xxd并将结果保存到文件中?即只是这样:

xxd -ps <&4 | sed 's/../&\ /g' > somefile.txt &

相关内容