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

React Native运行旧项目报env: sh\r: No such file or directory错误如何解决?

报错成因
  • 该报错核心是换行符格式跨系统不兼容导致的:Windows系统默认文本换行格式为CRLF(即\r\n),MacOS属于Unix类系统,默认仅使用LF(即\n)作为换行标识
  • 旧项目是在Windows环境下开发,项目内的shell脚本(包括React Native内置构建脚本、自定义执行脚本、部分依赖包的可执行文件)保留了Windows的CRLF换行符,MacOS的shell解析时会把行尾的\r识别为文件名的一部分,因此提示找不到sh\r这个可执行文件
  • 新建项目无报错是因为MacOS环境下生成的文件默认使用LF换行符,不存在格式兼容问题
修复方案

临时修复当前项目

  • 优先删除旧依赖目录重装,排除依赖包内脚本的换行问题:
rm -rf node_modules package-lock.json yarn.lock
npm install
# 若使用yarn则执行 yarn install
  • 若重装依赖后仍报错,使用dos2unix工具批量转换项目脚本的换行格式:
    1. 首先安装dos2unix:brew install dos2unix
    2. 在项目根目录执行批量转换:
    # 转换所有.sh后缀的shell脚本
    find . -type f -name "*.sh" -exec dos2unix {} \;
    # 也可针对性转换原生构建目录的所有文件
    find ./ios -type f -exec dos2unix {} \;
    find ./android -type f -exec dos2unix {} \;
    

全局配置避免后续同类问题

  • 配置git自动处理换行符,拉取Windows环境提交的代码时自动将CRLF转为LF,提交时自动适配对应系统格式:
git config --global core.autocrlf input
  • 可在项目根目录新增.gitattributes文件,统一项目内的换行规则,避免跨系统协作时反复出现同类问题,参考配置:

*.sh text eol=lf
*.js text eol=lf
*.ts text eol=lf
*.json text eol=lf
*.gradle text eol=lf
*.pbxproj text eol=lf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:07