LeetCode 岛屿数量II题解
2026/5/12 23:31:11
适用场景:
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看起来像是:
👉其实都不是。
Linux / Docker 使用的是:
而 Windows 常见的是:
当脚本第一行是:
#!/usr/bin/env bash\rLinux 会把它理解成:
bash\r (一个不存在的命令)于是就报了这个经典错误:
env: ‘bash\r’: No such file or directory可以用下面命令查看隐藏字符:
sed-n'1l'install.sh如果看到:
#!/usr/bin/env bash\r$那就100% 确认是 CRLF 换行符问题。
sed转换格式sed-i's/\r$//'install.sh然后再执行:
./install.sh✔ 通用
✔ 不依赖额外工具
✔ Docker / Jenkins 都适用
dos2unix(如果系统有)dos2unix install.sh ./install.sh注意:不是所有容器里都有
dos2unix
bashinstall.sh这种方式有时能绕过 shebang 问题,但不如前两种彻底
常见原因包括:
.sh👉 这些都会自动把 LF 转成 CRLF。
curl-fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh|bashcurl-o install.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.shsed-i's/\r$//'install.shbashinstall.sh| 错误操作 | 原因 |
|---|---|
sudo ./install.sh | Docker 容器里通常没有 sudo |
一直chmod +x | 权限不是根因 |
| 以为是 bash 没装 | 实际是换行符问题 |
| 以为 Jenkins 有 bug | 和 Jenkins 无关 |
env: 'bash\r'报错 ≠ bash 不存在
而是脚本是 Windows 格式(CRLF),
用sed -i 's/\r$//' 文件名即可解决。
在Linux / Docker / Jenkins环境中:
.sh脚本永远只用 LFcurl / wget