如何让echo仅发送\x0A换行符而不附加\x0D回车符?
解决UART传输中echo自动将\x0A转换为\x0D\x0A的问题
这事儿根本不是echo的锅,是你的串口终端设备默认开了CRLF自动转换——终端驱动会把输出的换行符LF(\x0A)自动转换成回车+换行CRLF(\x0D\x0A),哪怕你用echo -ne输出纯\x0A也没用。
给你几个解决办法:
1. 禁用串口的CRLF转换
用stty命令修改串口配置,关掉自动转换的开关:
stty -F /dev/ttyS1 -icrnl -onlcr
-onlcr:禁止输出时把LF转成CR+LF-icrnl:禁止输入时把CR转成LF(可选,但一起关更稳妥)
改完之后可以用下面的命令确认配置生效:
stty -F /dev/ttyS1
输出里看不到onlcr和icrnl就说明配置生效了。
2. 换个工具发送二进制数据
如果不想改串口设置,直接用不会搞额外转换的工具就行:
- 用
printf(最推荐,专门处理格式化输出,不会篡改原始字节):printf "\x0A" > /dev/ttyS1 - 用
dd:echo -ne "\x0A" | dd of=/dev/ttyS1 conv=notruncdd会严格传递输入的每一个字节,不会做任何额外转换。
要是你长期需要用这个串口传输二进制数据,把stty的配置写到系统启动脚本里,省得每次重启都要重新设置。
内容的提问来源于stack exchange,提问作者Smithy
相关产品推荐
相关产品推荐

