Linux下echo输出GitHub速率限制信息乱序问题排查与解决
解决GitHub拉取频率限制检查时echo输出乱序问题
问题场景
在下载GitHub文件前,需要先检查是否触发拉取频率限制并打印提示,但执行bash命令时,echo输出的提示内容出现乱序。
原命令示例
RATE_LIMIT=$(curl -sI https://api.github.com/repos/username/repo/contents/file.txt | grep -i "x-ratelimit-remaining") echo "当前剩余拉取次数: $RATE_LIMIT"
预期输出
当前剩余拉取次数: X-RateLimit-Remaining: 4999
实际输出
: 4999剩余拉取次数: X-RateLimit-Remaining
curl返回的响应头(含问题字符)
HTTP/2 200 cache-control: public, max-age=60, s-maxage=60 x-ratelimit-limit: 5000 x-ratelimit-remaining: 4999\r x-ratelimit-reset: 1718000000 ...
原因排查
乱序是因为curl返回的响应头中带有回车符(\r),当bash解析这个变量时,\r会将光标重置到行首,后续输出内容会覆盖之前的文本,导致显示错乱。
优化后的脚本
通过tr -d '\r'移除响应头中的回车符,解决输出乱序问题:
# 拉取响应头并移除回车符,提取剩余次数 RATE_LIMIT=$(curl -sI https://api.github.com/repos/username/repo/contents/file.txt | grep -i "x-ratelimit-remaining" | tr -d '\r') # 格式化输出提示 echo "当前剩余拉取次数: ${RATE_LIMIT#*: }"
脚本说明
tr -d '\r':彻底删除响应头中的回车符,避免光标重置问题${RATE_LIMIT#*: }:可选优化,只提取次数数值,让输出更简洁(比如输出当前剩余拉取次数: 4999)
内容的提问来源于stack exchange,提问作者saberlion
相关产品推荐
相关产品推荐

