ちょっと前からHomebrewではinstallやtapコマンドを使う際に
自動的にHomebrewのアップデートを行う様になりました。
この際、アップデートに伴うアウトプットが表示されますが、
brew tapなどでタップのリストを作ろうとしても
このアウトプットが入ってきて邪魔になることがあるので注意です。
Homebrew Auto Update
Homebrew 1.0.0が少し前にリリースされましたが、
その際に色々再確認した際に気づいたことですが、
brew install、brew tap、及びbrew upgradeコマンドを行う際、
これらのコマンドを実行する前にbrew updateが自動で呼ばれる様になっています。
これは、installなどで問題が起こる、とのIssue等が来て確認すると、
大概の場合はbrew updateで治る様なことなので、
その辺、ユーザーに意識させずに自動でアップデートしてしまおう、と言うことみたいです。
なのでこの機能はデフォルトで有効になっています。
また、このアップデートは60秒以内に再びbrew install等が実行された際には行われない様になっています。
無効にするには
export HOMEBREW_NO_AUTO_UPDATE=1
と環境変数を設定します。
実際には1でなくてもなんでも良くて、変数が空白でない文字列に設定されて無効化されます。 設定後、再びAuto Updateを有効にしたい場合は
unset HOMEBREW_NO_AUTO_UPDATE
などで。
また、アップデートを行う間隔を変更したい場合は
export HOMEBREW_AUTO_UPDATE_SECS=600
と、環境変数を設定します。数字は秒数です。(デフォルト60)
Homebrewのアップデートは場合によっては結構時間がかかるので、
ふとした時にbrew installして時間がかかるのが嫌な場合は
HOMEBREW_NO_AUTO_UPDATEを設定しておいた方が良いです。
ただし、その場合は手動でbrew updateを
定期的に行う必要があります。
tapの際のAuto Update
installやupgradeに関しては必ずインストール作業が入るので
Auto Updateを行っても良いんですが、
tapに関してはbrew tapとだけ打つとタップのリストが得られる機能があり、
この際にアップデートの作業が入ると普通に標準出力に余計な出力が出てくるので
スクリプトでタップのリストとかを取ってたりする場合困ります。
この辺、どうなってるのかと思ってbrewのソースコードを久しぶりに見てみたら、 なんと今はシェルスクリプトが最初に呼ばれてごちゃごちゃやるようになってました。
このbrew.shの方でinstall、upgrade、tapのコマンドが来ると
アップデートを行う様になってるのがわかると思います。
ので、ここにちょっと手を加えてtapでただリスト表示する時は
アップデートしない、と言う風にすれば、と思ってPull Requestしてみました。
disable oputput of brew tap at initialize by rcmdnk · Pull Request #1439 · Homebrew/brew
なんですが、シェルスクリプトの中で余計な選択を入れたくない、ということで今回は見送りに。 (今の時点でシェルスクリプトが十分大変な事になってて(自己ループの中で変数使いまわしたり)、 この変更の導入が余計な前例になるとはとても思えませんが、まあ仕方なし。)
というわけで、今後もとりあえずはbrew tapと普通にやるとアップデートが出て余計な出力が出ます。
これを避けるためには
HOMEBREW_NO_AUTO_UPDATE=1 brew tap
の様に一時的にでもAuto Updateを無効にしてあげれば一応回避できます。
Brew-fileの中でもタップのリストを作ってるところがあるので そこではこの無効化を入れました。
また、brew-wrapを読み込むと、そのままbrew tapとコマンドを
打ってもHOMEBREW_NO_AUTO_UPDATE=1を自動で付ける様にしてあります。
というわけで、Homebrewをbrew-file以外でもスクリプト的なもので管理してる人も居るかと思いますが、
brew tapの部分、ちょっと注意したほうが良いです。
