使用wget结合变量下载Prometheus node_exporter最新版本失败求助
解决node_exporter版本号含隐藏回车导致wget下载失败的问题
问题根源
你遇到的%0D是URL编码后的回车符(\r),说明通过curl获取的版本号变量v中包含了这个隐藏字符——虽然echo输出时看不到,但它实际存在,导致拼接URL时被编码成%0D,进而下载失败。
解决方案
只需在获取版本号的命令中添加去除回车符的处理,以下是几种可行方式:
方法1:用tr删除回车符
修改获取版本号的命令,在最后追加tr -d '\r':
v=$(curl -v --silent https://github.com/prometheus/node_exporter/releases/latest 2>&1 | grep "tag" | cut -d "v" -f2 | tr -d '\r')
方法2:用sed替换末尾的回车符
v=$(curl -v --silent https://github.com/prometheus/node_exporter/releases/latest 2>&1 | grep "tag" | cut -d "v" -f2 | sed 's/\r$//')
方法3:用awk简化处理(同时避免多余字符)
v=$(curl -v --silent https://github.com/prometheus/node_exporter/releases/latest 2>&1 | awk -F'v' '/tag/{print $2}' | tr -d '\r')
验证变量有效性
执行以下命令确认变量中已无回车符:
echo -n "$v" | od -c
输出中如果没有\r字符,说明处理成功。
执行下载
此时再运行wget命令即可正常下载:
wget https://github.com/prometheus/node_exporter/releases/download/v$v/node_exporter-$v.linux-amd64.tar.gz
内容的提问来源于stack exchange,提问作者user11563595
相关产品推荐
相关产品推荐

