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

Win7 Cmder(Git for Windows)中脚本调用Curl返回错误码3问题

问题分析与解决方案

问题根源

这个问题的核心是Windows和Unix系统的换行格式差异导致的:

  • Windows文本文件的换行符是\r\n(回车+换行),而Git for Windows的bash这类类Unix环境,默认仅用\n(换行)作为换行符。
  • 你的url.txt是Windows格式的,当librun.sh读取每行内容时,会把行尾的\r(回车符)也一并读入变量$line中,最终传递给lib脚本的URL变成了https://example.com\r。
  • curl返回错误码3,正是因为请求的URL包含无效的\r字符,导致无法正确解析目标地址。

解决方法

这里提供几种实用的解决思路,按优先级排序:

1. 直接转换url.txt为Unix换行格式

如果你的环境里有dos2unix工具(Git for Windows通常自带),直接执行:

dos2unix url.txt

如果没有dos2unix,可以用sed命令替换掉行尾的\r:

sed -i 's/\r$//' url.txt

转换后,url.txt的每行就只有\n作为换行符,后续读取时就不会带入\r了。

2. 在librun.sh中读取行时自动去除\r

如果不想修改原文件,可以在读取每行的过程中处理掉\r字符。修改librun.sh的循环逻辑:

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

或者用tr命令过滤:

while IFS= read -r line; do
    cleaned_line=$(echo "$line" | tr -d '\r')
    bash lib "$cleaned_line"
done < url.txt

3. 预防:创建文件时使用Unix换行格式

后续创建类似的文本文件时,直接使用Unix格式避免问题:

  • 在Cmder中用vim编辑时,执行:set ff=unix再保存文件;
  • 用Notepad++等编辑器时,选择「编辑」→「EOL转换」→「Unix(LF)」。

内容的提问来源于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:53:11