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
相关产品推荐
相关产品推荐

