Bash脚本执行git clone报错‘不支持"https协议’求助(WSL2 Ubuntu)
问题原因及解决方法
根本原因
你遇到的错误是因为jq输出的仓库URL包含双引号,脚本直接读取后传给git clone,导致URL被带上了引号(比如变成"https://github.com/xxx/yyy")。Git会把带引号的字符串当成完整URL,自然识别不了"https这种格式的协议。
解决方案
1. 让jq输出不带引号的原始URL
给jq加上-r参数(raw output模式),这样输出的html_url就不会包含双引号了。
2. 精准提取配置文件中的Token
原来的grep命令可能会误匹配config.toml中其他带引号的内容,建议改成更精准的正则,只匹配Token行的引号内内容。
修改后的完整脚本
#!/usr/bin/env bash # 精准提取token行中的引号内内容 token=$(grep -oP '(?<=token = ")[^"]+' config.toml) # 使用jq的-r参数输出不带引号的URL curl -H "Accept: application/vnd.github.v3+json" -H "Authorization: token $token" https://api.github.com/user/repos | jq -r '.[] | .html_url' | while read url; do git clone "$url" "$1" done
额外说明
- 给
$url和$1加上双引号,避免URL或目标目录名包含空格时出现问题。 - 这个问题和WSL2环境无关,纯粹是脚本对字符串的处理不当导致的。
内容的提问来源于stack exchange,提问作者Ymi
相关产品推荐
相关产品推荐

