You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps YAML流水线执行Bash脚本报$'\r': command not found错误

问题根因

报错$'\r': command not found是换行符格式不兼容导致的,和是否添加shebang声明无关:

  • 你编写的test.sh脚本使用了Windows默认的CRLF(\r\n)换行格式,而Azure DevOps流水线的Bash执行环境为Linux类系统,仅识别LF(\n)作为合法换行符
  • 每行末尾多余的\r字符会被Bash识别为命令内容的一部分,空行中的\r就会被判定为不存在的命令,因此触发该报错。

相关配置截图:
配置截图1
配置截图2

报错日志如下:

hello world
/__w/4/s/test.sh: line 3: $'\r': command not found
this is bash script

解决方法

你可以根据场景选择以下任意一种方案处理:

  • 方案1:修改本地脚本换行符
    用VS Code、Notepad++等编辑器打开脚本,将换行符格式从CRLF改为LF后重新提交即可:
    • VS Code操作:点击右下角状态栏的CRLF标识,在弹出的选项中选择LF后保存文件
    • Notepad++操作:顶部菜单栏选择「编辑」→「文档格式转换」→「转换为UNIX格式」后保存
  • 方案2:流水线执行前自动转换
    无需修改本地文件,直接在Azure DevOps的Bash任务中,执行test.sh前先添加换行符转换命令即可:
    预装了dos2unix工具的环境可以用:
    dos2unix test.sh
    bash test.sh
    
    没有dos2unix的环境可以用sed命令直接替换:
    sed -i 's/\r$//' test.sh
    bash test.sh
    
  • 方案3:配置Git全局规则(长期协作场景)
    如果团队同时有Windows和Linux用户协作,可以配置Git自动转换换行符,避免后续同类问题:
    • Windows用户本地执行:git config --global core.autocrlf true,提交时自动将CRLF转为LF,拉取时自动转回CRLF
    • Linux/macOS用户本地执行:git config --global core.autocrlf input,提交时自动将CRLF转为LF,拉取时不做转换

内容的提问来源于stack exchange,提问作者wonderfulworldwithcharity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:48:02