摘要: 本文分析了使用
bash执行 Shell 脚本时报错$'\r': 未找到命令的根本原因,指出这是由于 Windows 风格换行符(CRLF) 与 Linux 系统不兼容导致的。通过具体案例演示了如何修复此类问题,并提供了多种解决方案,适用于所有跨平台开发的开发者。
💥 问题现象
用户使用 bash 执行脚本时仍然报错:
bash start_vllm_qwen3_1.7b.sh
错误信息如下:
start_vllm_qwen3_1.7b.sh: 行 2: $'\r': 未找到命令
start_vllm_qwen3_1.7b.sh: 行 5: $'\r': 未找到命令
...
start_vllm_qwen3_1.7b.sh: 行 20: --max_model_len: 未找到命令
...
虽然改用 bash 执行,但依然提示参数未找到。
🔍 原因分析
核心问题:Windows 风格换行符(CRLF)
从错误信息中的 $'\r' 可以判断,脚本中存在 Windows 风格的换行符(即 \r\n),而 Linux 系统只识别 \n。
为什么会出现这个问题?
- 脚本可能是在 Windows 环境下编辑(如 VS Code、Notepad++、记事本等)后上传到 Linux 服务器。
- Windows 默认使用
\r\n换行,而 Linux 使用\n,导致脚本解析异常。
在 Vim 中验证:
用 vim start_vllm_qwen3_1.7b.sh 打开脚本时,如果看到类似 ^M 的字符,说明存在 \r 换行符。
✅ 解决方案
方法一:使用 dos2unix 工具转换文件格式
-
安装 dos2unix(如未安装):
sudo apt-get install dos2unix # Debian/Ubuntu sudo yum install dos2unix # CentOS/RHEL -
转换文件格式:
dos2unix start_vllm_qwen3_1.7b.sh -
再次执行脚本:
bash start_vllm_qwen3_1.7b.sh
方法二:在 Vim 中手动修复
-
用 Vim 打开脚本:
vim start_vllm_qwen3_1.7b.sh -
执行命令转换格式:
:set fileformat=unix -
保存并退出:
:wq
方法三:使用 sed 删除 \r
sed -i 's/\r//' start_vllm_qwen3_1.7b.sh
🛠 额外建议
1. 检查脚本编码是否为 UTF-8
- 使用
file命令查看文件类型:file start_vllm_qwen3_1.7b.sh - 如果输出不是
UTF-8,可用 Vim 或iconv转换编码。
2. 确保脚本第一行为 #!/bin/bash
- 确认脚本开头的 shebang 行是否正确:
#!/bin/bash
3. 赋予脚本可执行权限
chmod +x start_vllm_qwen3_1.7b.sh
📬 结语
这次的错误是典型的 Windows/Linux 换行符不兼容问题,尤其在跨平台开发或部署 AI 模型服务时非常常见。通过 dos2unix 或 Vim 修复后即可轻松解决。
如果你在部署 vLLM、LLaMA、Qwen 等大模型服务时也遇到过类似问题,欢迎留言交流!
祝你代码顺利,一键部署成功 🚀
标签:
#Shell脚本 #Windows换行符 #vLLM部署
解决 Windows/Linux 换行符不兼容脚本报错问题
833

被折叠的 条评论
为什么被折叠?



