ちょっと前から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
の部分、ちょっと注意したほうが良いです。