在Bash中无需克隆测试私有GitHub仓库SSH访问并存储结果的方法
解决方案
你之前的写法捕获不到错误输出是因为Git的报错信息输出到了标准错误流(stderr),而$()命令替换默认只会捕获标准输出流(stdout)的内容,所以变量为空。实际不需要捕获输出内容,直接通过Git命令的退出状态码就可以判断权限,更简洁可靠。
核心原理
git ls-remote 命令只会拉取远程仓库的引用列表,不需要克隆完整仓库,访问成功时返回退出码0,访问失败(无权限、仓库不存在等)时返回非0的退出码,直接判断这个状态码即可满足需求。
代码示例
直接判断权限
#!/bin/bash # 将命令的标准输出和标准错误都丢弃,避免多余日志输出 git ls-remote git@github.com:<你的GitHub用户名>/<私有仓库名>.git &> /dev/null if [ $? -eq 0 ]; then echo "SSH访问权限正常" else echo "无SSH访问权限" fi
存储布尔结果到变量
Bash中约定用0代表真(有权限),非0代表假(无权限),直接将命令退出码赋值给变量即可:
#!/bin/bash git ls-remote git@github.com:<你的GitHub用户名>/<私有仓库名>.git &> /dev/null # has_access为0时代表有权限,非0时代表无权限 has_access=$? # 后续使用示例 if [ $has_access -eq 0 ]; then # 执行有权限对应的逻辑 echo "有权限" fi
可选:捕获错误信息到变量(非必需)
如果确实需要把错误内容存到变量里,可以把stderr重定向到stdout:
#!/bin/bash has_access_msg=$(git ls-remote git@github.com:<你的GitHub用户名>/<私有仓库名>.git 2>&1) echo "$has_access_msg"
内容的提问来源于stack exchange,提问作者a.t.
相关产品推荐
相关产品推荐

