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就会被判定为不存在的命令,因此触发该报错。
相关配置截图:

报错日志如下:
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格式」后保存
- VS Code操作:点击右下角状态栏的
- 方案2:流水线执行前自动转换
无需修改本地文件,直接在Azure DevOps的Bash任务中,执行test.sh前先添加换行符转换命令即可:
预装了dos2unix工具的环境可以用:
没有dos2unix的环境可以用sed命令直接替换:dos2unix test.sh bash test.shsed -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,拉取时不做转换
- Windows用户本地执行:
内容的提问来源于stack exchange,提问作者wonderfulworldwithcharity
相关产品推荐
相关产品推荐

