homebrew多镜像切换,个数不限(可自定义) | 计算机科学论坛-江南app体育官方入口
命令说明
mac终端敲入以下命令即可永久切换镜像(使用数字或镜像名称都可以)
切换到阿里源:switch_brew_mirror 1
切换到清华源:switch_brew_mirror 2
切换到科大源:switch_brew_mirror 3
重置为官方地址:switch_brew_mirror 0
切换自定义镜像:switch_brew_mirror xxx
添加自定义镜像的方法
只需将有效的 url 写入 mirror_urls 的 xxx 下,之后就可以使用命令switch_brew_mirror xxx
进行切换。如下所示
my %mirror_urls = (
aliyun => { … },
tsinghua => { … },
ustc => { … },
xxx => {
homebrew_api_domain => "valid url1",
homebrew_bottle_domain => "valid url2",
homebrew_brew_git_remote => "valid url3",
homebrew_core_git_remote => "valid url4",
…
}
);
安装方法
无需安装,步骤如下:
1、将脚本文件放入用户的 $home 目录(或改用 )
2、编辑 $home/.zprofile 文件,末尾添加以下3行代码即可
switch_brew_mirror() {
eval "$(perl ~/.switch_brew_mirror.pl "$1")"
}; switch_brew_mirror
mac终端测试结果如下
last login: wed mar 27 10:57:45 on ttys002
~ > echo $homebrew_brew_git_remote
~ >
~ > switch_brew_mirror 0
using homebrew default url.
~ > echo $homebrew_brew_git_remote
~ > switch_brew_mirror alibb
invalid parameter alibb. usage: switch_brew_mirror [0|aliyun|tsinghua|ustc]
~ >
~ > switch_brew_mirror aliyun
switched to aliyun mirror.
~ > echo $homebrew_brew_git_remote
~ >
~ > switch_brew_mirror 2
switched to tsinghua mirror.
~ > echo $homebrew_brew_git_remote
~ >
为什么使用 perl 脚本
一开始是打算用shell脚本来实现这个功能的,但是发现 source 命令加载shell脚本后,所有的函数都直接暴露到终端了。改用perl后就没这问题了,用户只需调用、也只能调用一个名为 switch_brew_mirror 的函数。
镜像资料
阿里镜像
清华镜像
科大源
homebrew
本作品采用《cc 协议》,转载必须注明作者和本文链接
简单讲解一下这个脚本程序的实现原理。
以下代码在用户的shell环境中,定义了一个立即执行函数 switch_brew_mirror()
switch_brew_mirror() 函数体仅一行代码,但是做了两件事:
1、调用 perl 执行脚本程序
~/.switch_brew_mirror.pl
并将用户在终端的输入作为参数传递给这个脚本程序。2、使用 eval 命令执行 perl 脚本程序打印出来的字符串。
脚本 .switch_brew_mirror.pl 拿到用户在终端敲入的参数后去查找 my %mirror_urls 中对应键位的值,如果找到,则打印找到的这组字符串。
注意 perl 脚本程序执行完毕后,打印出来的字符串会传回 shell 环境中的 switch_brew_mirror() 函数里。此函数使用 eval 命令执行这组字符串,这样一来,用户终端就拿到了 homebrew 镜像需要使用的 url 了。
切换镜像后如何实现永久保存?
这个其实很简单,就是直接修改脚本程序本身的变量值
my $current_mirror
。这个操作是通过调用函数sub update_mirror_config
完成的。此函数的相关代码不多(第82行开始)通常,保存设置信息应该使用新的配置文件,或者使用数据库。不过,这里的做法却更加简单。