在bash中将十六进制字节发送到串行

在bash中将十六进制字节发送到串行,bash,command-line,serial-port,serial-communication,Bash,Command Line,Serial Port,Serial Communication,我能够使用以下命令将hec字节发送到串行端口 stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo echo -en '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > /dev/ttyUSB0 但当我尝试在循环中从文件读取测试时,它不想工作 #!/bin/bash stty

我能够使用以下命令将hec字节发送到串行端口

stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
echo -en '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' > /dev/ttyUSB0
但当我尝试在循环中从文件读取测试时,它不想工作

#!/bin/bash
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb -echo
while read line
do
    name=$line
    echo -en $name | tr -d ' ' > /dev/ttyUSB0
    sleep 0.04
done < $1
txt有一些类似这样的简单内容

./sendData.sh file.txt
试试1

试试2

\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xF2\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF

有人能告诉我遗漏了什么。

问题是
read
默认解释转义序列,有效地消除了反斜杠。使您的文件包含例如
\x01\x02\x03
并使用
读取-r

while read -r line
do
  echo -en "$line" > /dev/ttyUSB0
done < "$1"
读取时-r行
做
echo-en“$line”>/dev/ttyUSB0
完成<“$1”

echo
很棘手,请尝试
printf
或像
xxd
hextump
@tripleee这样的专用十六进制转换工具。您能推荐任何示例来尝试吗?
printf“%s\n”“$line”
?祝你好运。@Sheller不起作用:(如果你收到错误消息,最好编辑你的问题以包含该信息。最好说明你将如何知道它起作用。这耗尽了我的知识(没有)关于与
/dev/USB*
通信。我无法调试那里发生的事情。祝你好运!它成功了。只是一个小小的修改。我不得不使用echo-en$行(不带引号)请编辑它以防有人碰到它。不应该是这样。你能做
读取-r行<“$1”echo-en$行| od-t x1-c;echo-en吗“$line”| od-t x1-c;
和post输出?两者都给出相同的输出。在这里输入输出有点长。但是奇怪的是,序列号只得到了正确的输出,没有引号。抱歉,我只是重复检查了一下。两个都有效!我的代码中有一个输入错误。
while read -r line
do
  echo -en "$line" > /dev/ttyUSB0
done < "$1"