当前位置: 首页 > article >正文

macOS 终端智能代理检测

🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub

在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如:

fatal: unable to access 'https://github.com/ohmyzsh/ohmyzsh.git/':
Failed to connect to github.com port 443

为了让终端具备自动检测 GitHub 可达性并在必要时自动设置代理,我编写了一个轻量级的 智能代理检测脚本,可以直接集成进 .zshrc 或单独保存为脚本文件使用。


✋ 如果不想自动设置,也可以手动配置代理

当你明确知道当前网络环境需要通过代理访问 GitHub,可以手动在终端中设置以下环境变量:

export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export all_proxy=socks5h://127.0.0.1:7891

其中,端口号请根据你所使用的代理软件实际情况进行调整,常见配置包括:

  • 7890:Clash 的 HTTP/HTTPS 代理端口
  • 7891:Clash 的 SOCKS5 代理端口
  • 1087:macOS 系统代理默认端口(如 Surge)

🕐 临时使用代理(推荐用于单条命令)

如果只是临时需要用代理执行一条命令,例如更新 Oh My Zsh,可以这样写:

export https_proxy=http://127.0.0.1:7890
omz update

执行完后关闭终端或 unset 即可恢复默认状态,无需修改 .zshrc


✅ 可选恢复命令:

如果你想清除已设置的代理变量,可以使用:

unset http_proxy https_proxy all_proxy

🎯 脚本功能

  • 自动检测是否能访问 https://github.com
  • 若不能访问,自动设置本地代理地址(例如:http://127.0.0.1:7897
  • 设置代理后再次验证是否连通
  • 命令行输出清晰、颜色友好

🚀 两种使用方式

✅ 方式一:将脚本嵌入 .zshrc 开头(推荐个人使用)

打开 .zshrc 文件:

nano ~/.zshrc

将以下代码粘贴到最上方(优先执行):

# 智能代理配置函数(使用 ANSI 颜色控制)
function setup_proxy_smart() {local test_url="https://github.com"local proxy_addr="http://127.0.0.1:7897"local timeout=3echo "🔍 Checking internet access for $test_url..."if [[ "$(curl --max-time $timeout -s -o /dev/null -w "%{http_code}" "$test_url")" == "200" ]]; thenecho "\033[32m✅ Direct connection available. Proxy not needed.\033[0m"unset http_proxy https_proxy all_proxyelseecho "\033[33m🌐 No direct connection. Setting proxy to \033[36m$proxy_addr\033[0m"export http_proxy=$proxy_addrexport https_proxy=$proxy_addrexport all_proxy=$proxy_addrecho "🔁 Retesting access via proxy..."if [[ "$(curl --max-time $timeout -s -o /dev/null -w "%{http_code}" "$test_url")" == "200" ]]; thenecho "\033[32m✅ Proxy connection successful.\033[0m"elseecho "\033[31m❌ Proxy connection failed. Please check your proxy client.\033[0m"fifi
}# 每次终端启动时自动执行
setup_proxy_smart

保存后执行:

source ~/.zshrc

🛠️ 方式二:单独存为 proxy_check.sh 脚本文件(适合复用)

① 新建文件:
mkdir -p ~/scripts
nano ~/scripts/proxy_check.sh
② 粘贴同样的脚本代码(见上方)
③ 添加执行权限:
chmod +x ~/scripts/proxy_check.sh
④ 在 .zshrc 中引用:
source ~/scripts/proxy_check.sh

🧠 为什么 all_proxy 两种写法不同?

场景类型设置方式原因/说明
脚本里HTTP 代理export all_proxy=$proxy_addrproxy_addrhttp://127.0.0.1:7897 类型
手动设置 SOCKS5SOCKS5 代理export all_proxy=socks5h://...明确使用 socks5 协议(通常端口 7891)

✅ 最佳实践建议:

  • 如果你确定使用的是 HTTP 代理端口(如 Clash 面板显示 7890、7897),就用:

    export http_proxy=http://127.0.0.1:7890
    export https_proxy=http://127.0.0.1:7890
    export all_proxy=http://127.0.0.1:7890
    
  • 如果你想走 SOCKS5 且保证远程解析 DNS,建议用:

    export all_proxy=socks5h://127.0.0.1:7891
    

🧪 实用测试技巧:

你可以切换这两种配置后,用 curl 分别测试:

curl https://ipinfo.io/ip
  • 使用 HTTP 代理时:应走 7890
  • 使用 SOCKS5 时:应走 7891(并远程解析)

🧩 实际踩坑记录与解决

在配置的过程中,我也遇到了一些问题,以下是过程记录与解决方法,希望对你有帮助。


❗ 问题一:颜色输出不生效

在这里插入图片描述

初期使用 %F{color} 的语法输出颜色,但发现终端中无效果,颜色代码直接打印出来了。

✅ 解决办法:

使用更通用的 ANSI 转义序列 来实现颜色:

echo "\033[33mThis is yellow\033[0m"

例如:

  • \033[32m → 绿色
  • \033[33m → 黄色
  • \033[36m → 青色
  • \033[31m → 红色
  • \033[0m → 重置颜色

❗ 问题二:curl 访问明明成功却判断为失败

在这里插入图片描述

初始版本使用:

curl --silent --head ...

在某些代理工具(如 Clash)下,HEAD 请求可能被阻断或返回不规范,导致误判失败。

✅ 解决办法:

使用 -o /dev/null -w "%{http_code}" 明确获取状态码:

curl -s -o /dev/null -w "%{http_code}" https://github.com

确保判断依据准确。


❗ 问题三:脚本执行太晚,代理未及时生效

最初放在 .zshrc 末尾调用 source ~/scripts/proxy_check.sh,但有些工具加载在前,造成代理未及时生效。

✅ 解决办法:

将脚本调用(或嵌入)放在 .zshrc 最顶端,确保代理设置先执行。


✅ 输出示例

✔️ 可直连时:

🔍 Checking internet access for https://github.com...
✅ Direct connection available. Proxy not needed.

🌐 需设置代理时:

🔍 Checking internet access for https://github.com...
🌐 No direct connection. Setting proxy to http://127.0.0.1:7897
🔁 Retesting access via proxy...
✅ Proxy connection successful.

❌ 代理设置后仍失败:

🔍 Checking internet access for https://github.com...
🌐 No direct connection. Setting proxy to http://127.0.0.1:7897
🔁 Retesting access via proxy...
❌ Proxy connection failed. Please check your proxy client.

在这里插入图片描述


📌 总结

通过这一简单的脚本,你可以实现:

  • 在终端环境下自动判断是否需要设置代理
  • 避免每次手动设置代理的繁琐步骤
  • 保持 GitHub 访问畅通,提升命令行体验

这一方法适用于 Zsh 用户,也可以轻松迁移到 Bash 或其他 shell 中使用。如需支持多端口轮询、日志记录等高级功能,也可以在此基础上进一步扩展。

相关文章:

macOS 终端智能代理检测

🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...

高防服务器价格高原因分析

高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC&#xf…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...