当前位置: 首页 > news >正文

执行 install.sh 报错 `env: ‘bash\r‘: No such file or directory` 怎么解决?

适用场景:
Docker / Jenkins / Linux 容器中执行.sh脚本失败
报错:env: ‘bash\r’: No such file or directory


一、问题现象(很多人都会遇到)

在 Docker 容器或 Jenkins 容器中,执行脚本:

chmod+x install.sh ./install.sh

结果报错:

env: ‘bash\r’: No such file or directory env: use -[v]S to pass options in shebang lines

看起来像是:

  • bash 不存在?
  • 权限不对?
  • Jenkins / Docker 有问题?

👉其实都不是。


二、根本原因(重点,一定要看)

✅ 真正原因:脚本是 Windows 换行符(CRLF)格式

Linux / Docker 使用的是:

  • LF(\n)换行

而 Windows 常见的是:

  • CRLF(\r\n)

当脚本第一行是:

#!/usr/bin/env bash\r

Linux 会把它理解成:

bash\r (一个不存在的命令)

于是就报了这个经典错误:

env: ‘bash\r’: No such file or directory

三、如何确认是不是这个问题(可选)

可以用下面命令查看隐藏字符:

sed-n'1l'install.sh

如果看到:

#!/usr/bin/env bash\r$

那就100% 确认是 CRLF 换行符问题


四、解决办法(3 种,任选一种)

✅ 方法 1(最推荐):使用sed转换格式

sed-i's/\r$//'install.sh

然后再执行:

./install.sh

✔ 通用
✔ 不依赖额外工具
✔ Docker / Jenkins 都适用


✅ 方法 2:使用dos2unix(如果系统有)

dos2unix install.sh ./install.sh

注意:不是所有容器里都有dos2unix


✅ 方法 3:直接用 bash 执行(临时方案)

bashinstall.sh

这种方式有时能绕过 shebang 问题,但不如前两种彻底


五、为什么很容易踩这个坑?

常见原因包括:

  • Windows 浏览器中下载.sh
  • 记事本 / VS Code(CRLF)打开并保存
  • 从 Windows 主机复制脚本到 Linux / Docker
  • Jenkins 容器里直接粘贴脚本

👉 这些都会自动把 LF 转成 CRLF


六、推荐的「正确下载脚本姿势」

✅ 方式 1:直接 curl + bash(官方常用)

curl-fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh|bash

✅ 方式 2:先下载,再处理换行符

curl-o install.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.shsed-i's/\r$//'install.shbashinstall.sh

七、常见误区总结(新手必看)

错误操作原因
sudo ./install.shDocker 容器里通常没有 sudo
一直chmod +x权限不是根因
以为是 bash 没装实际是换行符问题
以为 Jenkins 有 bug和 Jenkins 无关

八、一句话总结(可以直接记住)

env: 'bash\r'报错 ≠ bash 不存在
而是脚本是 Windows 格式(CRLF),
sed -i 's/\r$//' 文件名即可解决。


九、写在最后(经验建议)

Linux / Docker / Jenkins环境中:

  • .sh脚本永远只用 LF
  • 不要用 Windows 记事本编辑
  • 下载脚本尽量用curl / wget
http://www.jsqmd.com/news/100845/

相关文章:

  • 洗车行业的多商户管理小程序源码系统 带完整的搭建部署教程
  • 辽宁省企业如何做信创产品认证?信创认证流程与费用详解
  • [Java EE] 多线程编程初阶 - 教程
  • 按需购买Token计费模式上线,搭配LobeChat更划算
  • Java 学习路线:零基础到实战,小白收藏这篇就够了
  • 【小白笔记】反转链表 II
  • 在线免费夸克网盘解析网站不限速70MB/S - 在线工具使用
  • A860-2000-T351编码器
  • 2025年杭州知名的广播电台广告公司口碑推荐榜,电视台广告/广播电台广告/户外led大屏广告/公交广告/广播电台广告价格口碑推荐 - 品牌推荐师
  • 重练算法(代码随想录版) day42 - 动态规划part9
  • 从爬取到分析:使用 Pandas 处理头条问答数据
  • list 的cpp简单模拟实现
  • 实用指南:全景相机领域,影石何以杀出重围?
  • Spring AOP
  • 实战为王!数眼智能 AI 网页解析全流程操作(含 API 接入 + 竞品分析)
  • 带你搞懂BootLoader(四)-第三个BootLoader
  • 【案例共创】从0开始使用华为云开发者空间搭建房价预测模型
  • vLLM推理引擎教程6-Nsight Systems性能分析
  • JX6-CON1控制器模块
  • 海外回国eSIM避坑指南一定要提前搞懂,不然真的会被坑惨!
  • spark读hive偶尔出现table not found
  • keyence颜色传感器LR-W70使用(最多可区分16种颜色)
  • Wan2.2-T2V-A14B模型部署与高保真T2V实战
  • Kubernetes Debug 专用镜像实践指南
  • AIGC简介
  • LangGraph4j 入门
  • 基于VUE的企业信息管理系统 [VUE]-计算机毕业设计源码+LW文档
  • Linux SSH隧道代理转发及多层转发
  • 硬核拆解:这套电影解说工作流,如何帮你零成本搭建AI影视解说SaaS
  • 12/16