如何在Bash脚本中检查GitHub CLI是否已登录?
解决GitHub CLI登录状态检测问题
问题核心在于gh auth status在未登录时的提示信息是输出到**标准错误流(stderr)**而非标准输出流(stdout),你之前的代码只捕获了stdout,因此无法匹配到"not logged"字符串。以下是几种可行的解决方案:
方案1:修正正则匹配,合并标准错误流
将stderr重定向到stdout,确保能捕获到未登录的提示内容:
if [[ $(gh auth status 2>&1) =~ "not logged" ]]; then echo "未登录,请执行gh auth login进行认证" exit 1 fi # 执行后续脚本逻辑
方案2:使用grep静默检测(更高效)
利用grep -q的静默模式,仅通过退出码判断是否匹配,无需捕获完整输出:
if gh auth status 2>&1 | grep -q "not logged"; then echo "未登录,请执行gh auth login进行认证" exit 1 fi
补充说明
2>&1是Bash中重定向语法,含义是将文件描述符2(stderr)的内容重定向到文件描述符1(stdout),这样所有输出都会被合并到同一个流中,方便后续检测。- 如果你需要更严谨的检测,可以匹配完整的未登录提示字符串
You are not logged into any GitHub hosts,避免出现误匹配的情况。
内容的提问来源于stack exchange,提问作者Artur Bacilla
相关产品推荐
相关产品推荐

