歡迎轉(zhuǎn)載然遏,但請(qǐng)?jiān)陂_(kāi)頭或結(jié)尾注明原文出處【blog.chaosjohn.com】
前言
筆者在四年前曾寫(xiě)過(guò)一文HomeBrew -- OSX下的最強(qiáng)軟件包管理器,篇中詳細(xì)介紹了HomeBrew以及Cask的使用吧彪。
多年過(guò)去了待侵,Homebrew依舊非常流行,但內(nèi)在也發(fā)生了很多變化来氧,比如Cask原先作為第三方Tap的存在诫给,現(xiàn)已整合到Homebrew內(nèi),在未安裝Cask的環(huán)境里啦扬,執(zhí)行 brew cask install ${app}
中狂,Homebrew則會(huì)自動(dòng)安裝Cask。
同時(shí)扑毡,在Homebrew的日常使用中胃榕,筆者也遇到了很多問(wèn)題,本文就著重于“踩坑”和“填坑”瞄摊。
“這些年遇到的坑”
Homebrew自動(dòng)更新
brew 提供了 update 命令勋又,但是你執(zhí)行 install 或 upgrade 時(shí),都會(huì)強(qiáng)制性先 update换帜,浪費(fèi)寶貴的時(shí)間楔壤。
解決:
- brew命令前加上變量HOMEBREW_NO_AUTO_UPDATE=1,變?yōu)?
$ HOMEBREW_NO_AUTO_UPDATE=1 brew install …
- 或使用alias別名惯驼,在.bashrc或.zshrc中新增一行
alias brew="HOMEBREW_NO_AUTO_UPDATE=1 brew"
- 或?qū)С霏h(huán)境變量蹲嚣,在.bashrc或.zshrc中新增一行
export HOMEBREW_NO_AUTO_UPDATE=1
,筆者推薦這種方法 - 或者使用 Homebrew/aliases祟牲,執(zhí)行
brew alias install_no_autoupdate='!HOMEBREW_NO_AUTO_UPDATE=1 brew install'
(install_no_autoupdate 名字任意更換)隙畜,以后要執(zhí)行無(wú)預(yù)更新的brew install ${formula}
操作,都改為brew install_no_autoupdate ${formula}
Cask 安裝的應(yīng)用说贝,和 App Store 安裝的應(yīng)用议惰,都混在了一起
因?yàn)殡p方都把應(yīng)用安裝到了 /Applications 目錄下,所以導(dǎo)致
- 分不清應(yīng)用到底是Cask安裝的乡恕,還是App Store里安裝的
- 如果Cask和App Store安裝同一款應(yīng)用言询,則后安裝或更新的應(yīng)用俯萎,就會(huì)覆蓋掉先前存在的版本
解決:export HOMEBREW_CASK_OPTS="--appdir=~/Applications/_"
,這樣Cask會(huì)自動(dòng)將應(yīng)用都安裝到用戶(hù)目錄下的 Applications/_/
里倍试。
這里我想介紹一下我在mac下的應(yīng)用管理讯屈,僅供參考:
- App Store安裝的應(yīng)用,都位于
/Applications/
下 - Cask安裝的應(yīng)用县习,都位于
~/Applications/_/
下 - 網(wǎng)絡(luò)上搜羅來(lái)的破解應(yīng)用涮母,都位于
~/Applications/#/
下 - JetBrains公司的IDE,都用
JetBrains Toolbox
進(jìn)行安裝管理(當(dāng)然Toolbox本身是用Cask進(jìn)行安裝的) - 其他開(kāi)源/免費(fèi)的應(yīng)用躁愿,都位于
~/Applications/
下
Cask 批量更新應(yīng)用
在前文HomeBrew -- OSX下的最強(qiáng)軟件包管理器中筆者曾給出過(guò)一行shell腳本用來(lái)批量更新Cask的應(yīng)用叛本,但是這么多年過(guò)去了,這行腳本筆者不再推薦使用彤钟。
解決:brew tap buo/cask-upgrade
来候,項(xiàng)目鏈接,安裝完之后逸雹,
- 執(zhí)行:
brew cu
营搅,更新所有“存在更新版本”的應(yīng)用 - 執(zhí)行:
brew cu ${app}
,更新特定app - 選項(xiàng):
-a, --all
梆砸,包含標(biāo)記了 auto-update 的應(yīng)用转质;-f, --force
,包含當(dāng)前版本號(hào)為 latest 的應(yīng)用帖世;-y, --yes
休蟹,對(duì)所有詢(xún)問(wèn)是否確認(rèn)更新,自動(dòng)應(yīng)答 yes
因國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境導(dǎo)致brew速度慢
這里的慢包含兩方面:brew update
慢 & brew install
慢
解決方案A: 換源策略
解決方案B: 代理策略, export all_proxy=socks5://${host}:${port}
,替換自己代理主機(jī)地址和端口即可
Error: SHA256 mismatch / Error: Checksum mismatch
前者是 brew
后者是 cask
哪轿,錯(cuò)誤原因盈魁,倉(cāng)庫(kù)里記載的校驗(yàn)值和實(shí)際下載下載的文件校驗(yàn)值不一致
解決: 執(zhí)行 rm -rf ~/Library/Caches/Homebrew
將本地緩存目錄刪除后重試,有概率能解決問(wèn)題窃诉,適用于軟件發(fā)行者修改應(yīng)用后缺沒(méi)有更改版本號(hào)就發(fā)行出去的情況备埃。若未解決,針對(duì)于 brew
褐奴,編輯 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/${formula}.rb
,針對(duì)于 cask
于毙,編輯 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/${app}.rb
敦冬,將 sha256
修改為實(shí)際校驗(yàn)值,保存唯沮,再次執(zhí)行先前操作脖旱,大概率能成功堪遂。切記兩點(diǎn)主意事項(xiàng):
- 需禁用brew的自動(dòng)更新,否則前腳剛改完校驗(yàn)值萌庆,后腳自動(dòng)更新就把校驗(yàn)值改回來(lái)了
- 更改校驗(yàn)值后不要關(guān)閉編輯器溶褪,等安裝/更新應(yīng)用成功后,立即撤銷(xiāo)更改践险,再關(guān)閉編輯器猿妈,因?yàn)閎rew和cask的倉(cāng)庫(kù)是用git管理的,更改倉(cāng)庫(kù)文件對(duì)后續(xù)的更新會(huì)造成沖突巍虫。如果發(fā)生沖突了彭则,也別擔(dān)心,到倉(cāng)庫(kù)根目錄執(zhí)行
git reset --hard
恢復(fù)原樣占遥。brew 的倉(cāng)庫(kù)目錄位于/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
俯抖;cask 的倉(cāng)庫(kù)目錄位于/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/