脚本执行报错?可能是Windows/Linux换行符搞的鬼!

解决 Windows/Linux 换行符不兼容脚本报错问题

摘要: 本文分析了使用 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 工具转换文件格式

  1. 安装 dos2unix(如未安装):

    sudo apt-get install dos2unix  # Debian/Ubuntu
    sudo yum install dos2unix      # CentOS/RHEL
    
  2. 转换文件格式:

    dos2unix start_vllm_qwen3_1.7b.sh
    
  3. 再次执行脚本:

    bash start_vllm_qwen3_1.7b.sh
    

方法二:在 Vim 中手动修复

  1. 用 Vim 打开脚本:

    vim start_vllm_qwen3_1.7b.sh
    
  2. 执行命令转换格式:

    :set fileformat=unix
    
  3. 保存并退出:

    :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部署

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值