Windows10下Cygwin编译Prometheus源码遇build_ui.sh错误求助
解决Windows 10+Cygwin编译Prometheus源码的换行符错误问题
问题场景
我按照Prometheus官方文档,在Windows 10系统中通过Cygwin从源码编译Prometheus。执行make build config.file prometheus.yml命令后出现报错。
错误信息
> prometheus-io@0.46.0 build > set "GENERATE_SOURCEMAP=false" && bash build_ui.sh --all build_ui.sh: line 2: $'\r': command not found build_ui.sh: line 15: $'\r': command not found : invalid optione 16: set: - set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...] build_ui.sh: line 17: $'\r': command not found build_ui.sh: line 18: syntax error in conditional expression make: *** [ui-build] Error 127
已尝试操作
我修改了web/ui/package.json中的build条目:
原内容:
"build": "GENERATE_SOURCEMAP=false bash build_ui.sh --all",
修改为:
"build": "set \"GENERATE_SOURCEMAP=false\" && bash build_ui.sh --all",
但问题仍未解决。
可行解决办法
报错的核心原因是Windows与Unix换行符不兼容:Windows使用\r\n作为换行符,而Cygwin的bash仅识别Unix格式的\n,脚本中的\r被误判为命令的一部分,导致语法错误。
步骤1:转换脚本换行符
在Cygwin终端中进入Prometheus源码的web/ui目录,执行以下命令将build_ui.sh转换为Unix换行格式:
dos2unix build_ui.sh
步骤2:修复Git换行符配置(若源码来自Git克隆)
如果是通过Git拉取的源码,Git默认会自动将Unix换行符转为Windows格式,需修改配置避免此问题:
git config --global core.autocrlf false
之后重新克隆源码仓库,或在现有仓库执行git reset --hard重置文件到原始格式。
步骤3:恢复package.json的build命令
无需修改package.json中的build命令,改回原始写法即可:
"build": "GENERATE_SOURCEMAP=false bash build_ui.sh --all",
Cygwin的bash环境支持直接设置环境变量的写法,之前的修改反而可能引入额外问题。
完成以上操作后,重新执行make build config.file prometheus.yml即可正常编译。
内容的提问来源于stack exchange,提问作者asimkon
相关产品推荐
相关产品推荐

