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

Win7 Cmder(Git for Windows)下调用curl脚本返回错误码3问题排查

解决方案:curl返回错误码3(URL含\r)的问题

这个问题的根源很明确:Windows和类Unix系统的换行符不兼容。你的url.txt是Windows格式保存的(每行结尾是\r\n),而Git for Windows的bash环境中,默认的read命令不会自动剔除行尾的\r(回车符),导致传给lib脚本的URL后面多了个隐形的\r——也就是你看到的$'https://example.com\r',这直接让curl识别无效URL,返回错误码3。

下面给你几种可行的解决办法,选适合你的就行:

方法1:转换文本文件为Unix格式

最直接的方式是把url.txt转换成Unix换行符格式(每行结尾仅\n):

  • 如果你的环境里有dos2unix工具,直接运行:
    dos2unix url.txt
    
  • 没有dos2unix的话,用sed命令手动清理行尾的\r:
    sed -i 's/\r$//' url.txt
    

转换完成后再运行librun.sh,read读取的URL就不会带\r了。

方法2:在librun.sh的read环节处理换行符

修改librun.sh的循环逻辑,在读取每行时直接剔除\r,同时保留原行的空格等格式:

FILE=url.txt
while IFS= read -r line; do
    # 移除行尾的回车符
    line=${line%$'\r'}
    bash lib "$line"
done < "$FILE"

这里的IFS=是为了保留行首或行尾的空格,-r参数防止read把URL里的反斜杠当成转义字符,${line%$'\r'}是bash的参数扩展语法,专门删除变量末尾的\r字符。

方法3:在lib脚本里兼容处理输入

如果希望lib脚本不管被怎么调用都能正常工作,可以在脚本里先清理传入的URL参数:

set -x
# 清理URL末尾的回车符
clean_url=${1%$'\r'}
curl.exe -s "$clean_url"
echo $?
echo "$clean_url"

这种方式相当于给脚本加了一层“容错垫”,即使调用方传入带\r的参数也能正常处理。

不管用哪种方法,处理后再运行脚本,set -x的输出应该会变回+ curl.exe -s 'https://example.com',curl也能正常返回0了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:24