brew
在本文中,我們將使用 jq 來解析 JSON,可使用 brew install jq
從 Homebrew 取得。
brew
提供命令來取得系統中的常見資訊類型。 brew list
會顯示已安裝的配方。 brew deps foo
會顯示 foo
所需的相依性。
當然,可以撰寫其他命令(包括外部命令)來提供更詳細的資訊。這裡有幾個缺點。首先,它需要針對 Homebrew 可能會變更的程式碼庫撰寫 Ruby。在重構期間,將會有更多程式碼需要變更,而 Homebrew 無法保證外部命令將持續運作。其次,它需要設計命令本身,指定輸入參數和輸出格式。
為了讓使用者能夠執行豐富的查詢而不會有上述問題,Homebrew 提供了 brew info
命令。
brew info --json
brew info
可以輸出關於配方的 JSON 格式資訊。然後可以使用您選擇的工具來解析此 JSON。在 brew info --help
中查看更多詳細資訊。
預設的架構版本為 v1
,它會傳回關於配方的資訊;指定 --json=v2
以包含配方和 cask。請注意,可能會根據需要新增欄位到架構,而不會增加架構。任何重大的重大變更都會導致架構版本變更。
架構本身目前未在 formula.rb
中的程式碼外進行文件化,它會產生架構。
JSON 輸出的最上層元素總是陣列,因此 map
算子用於作用於資料。
brew info --json=v1 tig | jq .
顯示所有已安裝公式的完整 JSON 資訊
brew info --json=v1 --installed
有些公式標示為「僅 keg」,表示已安裝的檔案未連結到共用的 bin
、lib
等目錄,因為這麼做可能會造成衝突。此類公式可以強制連結到共用目錄,但並不建議這麼做(而且會導致 brew doctor
抱怨。)
找出連結的僅 keg 公式名稱
brew info --json=v1 --installed | jq "map(select(.keg_only == true and .linked_keg != null) | .name)"
找出已安裝但未連結到共用目錄的正常(非僅 keg)公式名稱
brew info --json=v1 --installed | jq "map(select(.keg_only == false and .linked_keg == null) | .name)"
formulae.brew.sh 有 文件化的 JSON API,可讓您存取 brew info --json=v1
輸出,而不需要存取 Homebrew。
透過使用 JSON 輸出,可以對 Homebrew 進行查詢,且較不容易因為 Homebrew 程式碼變更而中斷,也不需要了解 Homebrew 的 Ruby 內部結構。
如果 JSON 輸出沒有提供應有的資訊,請提交要求,最好附上加入所需資訊的修補程式。