You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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=notrunc
    
    dd会严格传递输入的每一个字节,不会做任何额外转换。

要是你长期需要用这个串口传输二进制数据,把stty的配置写到系统启动脚本里,省得每次重启都要重新设置。

内容的提问来源于stack exchange,提问作者Smithy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:34:55