Linux中Homebrew的正确使用方法
很多人都在使用Linux Homebrew ,有三个技巧可以帮助你更好的使用它:
避免环境污染
首先要避免将 Homebrew 的 bin 目录添加到PATH ,而仅仅将你需要使用的几个可执行做软连接放到~/bin 下面(这个目录在PATH 中),以避免环境污染。
当你编译或者安装新软件时,你显然希望它依赖的是/usr 目录下面的系统文件,而如果把 Homebrew 的 bin 目录长期置于$PATH 中,那么编译时将会调用到 Homebrew 里面的 gcc / clang (这两个经常在 brew 中被自动安装,用于编译和安装 homebrew 中源码形式的包),即便你的 brew 中没有 gcc / clang,也会在分析依赖时调用到 pkg-config / python 等 brew 下的软件,从而返回基于 homebrew 的依赖,这显然不是你想要的。
所以把你需要的工具做个软连接放到~/bin 下面就可以既使用 homebrew 又避免环境污染,只是在调用 brew 安装新包时需要临时添加 homebrew 的 bin 目录到$PATH 中,用完了又取消,我们用两个函数做这个事情:
function brew_disable() {
export PATH=${PATH##*"/.linuxbrew/bin:"}
export PATH=${PATH##*"/.linuxbrew/sbin:"}
export MANPATH=${MANPATH##*"/.linuxbrew/share/man:"}
export INFOPATH=${INFOPATH##*"/.linuxbrew/share/info:"}
}
function brew_enable() {
BREW='/home/linuxbrew/.linuxbrew'
brew_disable
export PATH="$BREW/bin:$BREW/sbin:$PATH"
export MANPATH="$BREW/share/man:$MANPATH"
export INFOPATH="$BREW/share/info:$INFOPATH"
export HOMEBREW_NO_AUTO_UPDATE=1
}
上面两个函数放到你的 bashrc 中,平时不需要启用 homebrew,需要安装时调用一下 brew_enable,安装完包了再用 brew_disable。
还有另外一个做法,直接写一个名叫 brew 的函数:
function brew() {
PATH="/home/linuxbrew/.linuxbrew/bin:$PATH" /home/linuxbrew/.linuxbrew/bin/brew "$@"
}
这样再敲入brew 命令的时候,会临时设置路径并调用真正的 brew 可执行:
brew install fzf
有了上面的函数,你就不需要设置任何 brew 路径而直接安装软件了,如果你不想覆盖brew 这个名字,可以把上面的函数改名为 brew2 之类的。
禁用自动更新
第二项优化,是禁用每次 brew 自动更新:
export HOMEBREW_NO_AUTO_UPDATE=1
这样可以避免每次 install 软件急着用时它给你 update 一半天,是十分影响心情的事情,有了这个宏以后完全可以定期手动brew update 。
使用临时代理
继续在bashrc 中加一行:
alias socks5="http_proxy=socks5://127.0.0.1:1080 https_proxy=socks5://127.0.0.1:1080 all_proxy=socks5://127.0.0.1:1080 "
注意,最后引号结束前有一个空格,那么当你希望让 brew 走代理时就可以:
socks5 brew install micro
这样不破坏环境变量,临时给 brew 设置了一个 localhost:1080 的 socks5 代理,用来安装新软件。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。
- flash builder代码格式化以及其它快捷键
- Repeater,DataList,DataGrid
- flash/flex builder在IE中stage.stageWidth始终为0的解决办法
- MongoDB集群运维笔记
- 水晶报表WEB方式下不打印的问题
- 针对负载均衡集群中的session解决方案的总结
- sliverlight:CompositionTarget.Rendering 的问题
- 分布式监控系统Zabbix-批量添加聚合图形
- as3: this,stage,root的测试
- 通过iptables限制sftp端口连接数
- Jenkins迁移及日常操作的一点总结
- Nginx反向代理中使用proxy_redirect重定向url
- python try/except/finally
- Jumpserver双机高可用环境部署笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- AkShare-股票数据-龙虎榜-营业上榜统计
- AkShare-股票数据-龙虎榜-个股上榜统计
- React中路由的使用
- CyanX 基于ReactHook的状态管理器,遵循函数式编程的理念,极简、可扩展设计哲学上手
- Serverless 架构下如何实现日志的实时输出?
- typescript基础篇(1):helloworld
- typescript基础篇(2):数据类型
- 22款好用的CLI工具
- typescript基础篇(3):接口
- 2020 年,苹果的 AI 还有创新吗?
- 毕设有着落了!一套开源的,基于SpringBoot的车牌识别系统
- 详解hive的join优化
- 区块链时代的世界宪章:代码即法律
- SQL 计算公司的期初资产
- nested exception is java.lang.IllegalStateException: refreshAfterWrite requires