2026/2/15 1:52:33
网站建设
项目流程
大型网站建站,满城住房和城乡建设局网站,好看的官网源码,扁平网站设计适用场景#xff1a;
Docker / Jenkins / Linux 容器中执行 .sh 脚本失败
报错#xff1a;env: ‘bash\r’: No such file or directory一、问题现象#xff08;很多人都会遇到#xff09;
在 Docker 容器或 Jenkins 容器中#xff0c;执行脚本#xff1a;
chmod x insta…适用场景Docker / Jenkins / Linux 容器中执行.sh脚本失败报错env: ‘bash\r’: No such file or directory一、问题现象很多人都会遇到在 Docker 容器或 Jenkins 容器中执行脚本chmodx 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\rLinux 会把它理解成bash\r 一个不存在的命令于是就报了这个经典错误env: ‘bash\r’: No such file or directory三、如何确认是不是这个问题可选可以用下面命令查看隐藏字符sed-n1linstall.sh如果看到#!/usr/bin/env bash\r$那就100% 确认是 CRLF 换行符问题。四、解决办法3 种任选一种✅ 方法 1最推荐使用sed转换格式sed-is/\r$//install.sh然后再执行./install.sh✔ 通用✔ 不依赖额外工具✔ Docker / Jenkins 都适用✅ 方法 2使用dos2unix如果系统有dos2unix install.sh ./install.sh注意不是所有容器里都有dos2unix✅ 方法 3直接用 bash 执行临时方案bashinstall.sh这种方式有时能绕过 shebang 问题但不如前两种彻底五、为什么很容易踩这个坑常见原因包括在Windows 浏览器中下载.sh用记事本 / VS CodeCRLF打开并保存从 Windows 主机复制脚本到 Linux / DockerJenkins 容器里直接粘贴脚本 这些都会自动把 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-is/\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