コマンド
brew info --installed --json=v1 \
| jq -r '.[] | select(.installed | any(.installed_on_request)) | .name'
出力例
autoconf
awscli
berkeley-db
carthage
clang-format
解説
brew info --installed --json=v1
はインストール済みのパッケージ情報を出力する。 --json=v1
オプションで出力を JSON 形式にする。
JSON 形式のパッケージ情報の例を以下に示す。 installed_on_request
プロパティはそのパッケージが brew install
コマンドによって明示的にインストールされたら true になる。 false ならそのパッケージが他のパッケージの依存関係として暗黙的にインストールされたことを表す。 このプロパティに対応していなかった昔の Homebrew でインストールした場合は null
になるかもしれない(確かめていない)。
[
{
"name": "zsh",
...
"installed": [
{
"version": "5.7.1",
...
"installed_as_dependency": false,
"installed_on_request": true
}
],
...
}
]
このパッケージ情報を jq
でフィルタリングしてパッケージ名を取り出す。jq 1.6 のマニュアル
jq -r '.[] | select(.installed | any(.installed_on_request)) | .name'
-r
オプションで出力を生の文字列にする。そうしなければ JSON の文字列リテラル(ダブルクォートされた文字列)が出力されてしまう。
'.[] | select(.installed | any(.installed_on_request)) | .name'
で条件を満たすパッケージの名前を出力する。
- 入力はパッケージ情報オブジェクトの配列
-
.[]
: 各パッケージ情報オブジェクトについて -
| select(...)
: 条件に一致したオブジェクトを選ぶ- 条件
.installed | any(.installed_on_requst)
:installed
配列の要素にinstalled_on_request
が真のものがひとつでもあれば真
- 条件
-
| .name
: 各オブジェクトのname
を出力
執筆時点の環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G1012
$ brew --version
Homebrew 2.2.0-14-gb89ec55
Homebrew/homebrew-core (git revision 808d3; last commit 2019-11-28)
Homebrew/homebrew-cask (git revision 5266f2; last commit 2019-11-28)
$ jq --version
jq-1.6