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

Bash脚本重定向输出到文件时出现乱码的问题排查

问题分析与解决办法

这种情况我之前碰到过好几次,大概率是脚本文件本身的格式问题在搞鬼,给你拆解两个最常见的原因和对应的解决办法:

1. 脚本的换行符格式不兼容(最常见)

如果你是在Windows环境下用Notepad或者记事本编辑的Bash脚本,默认会保存成Windows风格的CRLF换行符(也就是\r\n),但Linux/Bash环境只认Unix风格的LF换行符(\n)。当你运行脚本时,Bash会把每行末尾的\r当成普通字符解析,最终写入目标文件时就会带上这个看不见的特殊字符——在Notepad里可能显示成方块,在Vim里会显示成^M。

而你直接把代码复制到Bash里执行时,终端会自动把换行符转换成LF格式,自然就不会有这个问题。

解决办法:

  • 用Notepad++打开你的脚本:点击界面右下角的「CRLF」按钮,选择「LF」,然后保存脚本。
  • 或者在Bash环境里用命令转换:
    # 如果安装了dos2unix工具
    dos2unix your_script.sh
    # 没有dos2unix的话用sed替代
    sed -i 's/\r$//' your_script.sh
    

2. 脚本带UTF-8 BOM头

有些Windows编辑器(比如系统自带的记事本)保存UTF-8文件时,会自动加上一个BOM头(三个不可见的字节:EF BB BF)。Bash执行脚本时会把这三个字节当成脚本内容的一部分,最终输出到目标文件里就会出现奇怪的开头字符。

解决办法:

  • 用Notepad++打开脚本:顶部菜单选择「编码」→「UTF-8无BOM」,然后保存。
  • 或者在Bash里用命令去掉BOM头:
    sed -i '1s/^\xEF\xBB\xBF//' your_script.sh
    

改完上面的格式问题后,再运行脚本试试,生成的文件应该就和你直接复制代码执行的结果一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:53:22