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

WSL Ubuntu克隆的Bash GitHub项目运行失败,dos2unix无效如何解决?

问题原因

报错信息中的$'{\r''关键字明确指向核心问题为脚本行尾使用了Windows格式的CRLF(\r\n),而非Linux Shell兼容的LF(\n),该问题与GitHub存储本身无关,由Git的行尾自动转换配置导致:

  • 原编写脚本的WSL环境Git配置core.autocrlf被设为true,推送时Git自动将本地LF行尾转换为CRLF存储到远程仓库
  • 另一台设备克隆时,Git配置未开启自动将CRLF转回LF的规则,拉取到本地的脚本保留了CRLF行尾,触发bash解析报错
  • 之前dos2unix转换未生效属于操作异常:要么未指定正确的目标脚本文件,要么当前用户对脚本无写入权限,转换动作未实际落地
修复方案

临时修复当前报错脚本

  1. 先验证行尾格式:执行cat -A <你的脚本文件名>,如果每行末尾显示^M$即可确认是CRLF格式问题
  2. 执行以下任意命令完成行尾转换:
    • dos2unix转换:dos2unix <你的脚本文件名>
    • sed直接移除回车符:sed -i 's/\r$//' <你的脚本文件名>
    • tr命令过滤回车符:tr -d '\r' < <你的脚本文件名> > temp.sh && mv temp.sh <你的脚本文件名>
  3. 赋予执行权限后测试运行:chmod +x <你的脚本文件名> && ./<你的脚本文件名>

全局配置Git避免后续复发

在所有使用的WSL/Ubuntu环境执行以下配置,统一行尾转换规则:

  • 提交时自动将CRLF转为LF,拉取时不自动转换为CRLF:git config --global core.autocrlf input
  • 开启行尾合法性检查,禁止提交包含CRLF的Shell类文件:git config --global core.safecrlf true
    如果项目需要跨Windows/Linux协作,可在项目根目录新增.gitattributes文件,指定脚本类文件强制使用LF行尾:
*.sh text eol=lf
*.bash text eol=lf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:30:01