homebrew-file
を使ってBrewfileを管理するとき、通常のbrew
コマンドで
何かインストールした後とかに自動的にBrewfileもアップデートするために
brew
コマンドに対してラッパースクリプトを作っていましたが、
それだと弊害があるのでラッパー関数を用意してそれを読み込むように変更してみました。
ラッパースクリプト
以前あったものはこれ:bin/brew-wrap at v2.2.1。
これを
1 2 3 4 5 |
|
みたいにしてログイン時にalias
で設定するようにしていました。
が、これだと、brew-fileを再インストールとかしたいときに、
一度アンインストールするとbrew
というコマンド自体が使えなくなるので
command brew
みたいに直接本来のbrew
を呼ばないと行けなかったり面倒がありました。
ラッパー関数
ということで、こんな設定ファイルを用意しました: etc/brew-wrap at master。
今度は中身はbrew
という関数が定義してあります。
この設定ファイルを.bashrc等で
1 2 3 4 5 |
|
として読み込んで貰えばOK。
この関数では関数自体でbrew-file
があるかどうか判断するので、
このラッパー関数が定義された状態で
brew-file
をアンインストールしても問題なく動きます。
また、brew install
等をいくつか続けて行いたいときに
毎回Brewfileの更新をするのを避けたい場合には
$ brew noinit install ...
と、最初にnoinit
を入れて貰えれば通常のbrew
コマンドだけ行うようになります。
勿論command brew
とcommmand
を使っても同じことです。
もし設定している人がいたらbrew-file
自体を
brew update && brew upgrade
でアップデートした上で
.bashrc等を書きなおしてください。
コマンドの有る無しを確かめる際のTips
ちょっと上の関数を作っていてつまずいたところとして、
brew-file
があるかないか、を調べるのに、type
コマンドを使っていますが、
最初そのままtype brew-file
とやって、
これがbrew-file
をアンインストールした直後にもTrueになってしまって
上手く行きませんでした。
これは、bashなどではコマンドがハッシュされていて、 アンインストールしてもそれが残っていて存在してると勘違いするからです。
これを回避するにはtype -a
と、-a
オプションを使うことで
ハッシュは無視して、PATHやalias等、現在実際にあるものを
探して全てリストします。
またはwhich
コマンドであれば最初からハッシュは無視します。
もしくはhash -r
とハッシュ自体をリセットしてtype
を使ったり
hash
コマンドも同じようにコマンドを検索出来るのでそちらを使ったり。
単にtype
を使ったコマンドの検索はちょっと危険、と言う話。
速度的には勿論ハッシュしてあるものを使った方が速いわけですが、
実際に行うコマンドに比べて十分小さいので通常は
type -a
等しておいた方が安全です。
下のページには速度とか、上に書いたハッシュの話とか 色々まとまっていて参考になります。
また、ちょっと違う話ですが、
shopt -s checkhash
とコマンドを実行するか.bashrc等に書いておくと、
仮にハッシュテーブルにコマンドがあっても、
常に実際にコマンドが存在するか確かめ、
無ければ通常通り$PATH
の中にあるかどうか検索を行います。
これを行うと全コマンド毎回検索するのでちょっと速度が気になることもあるので
通常は設定しない方が良いです。
ただ、コマンドのハッシュを使っていると、 たまに複数インストールしてあるコマンド等で (pythonのバージョン違いとか、/usr/bin/にあるものをさらに /usr/local/bin/に別バージョンを入れたりとか) 後からインストールされたものが反映されなかったり、 また、使ってるものをアンインストールして前の物を使おうとしたら コマンドがない、と言われてしまうことがありますが、 そういった場合には
$ hash -r
としてハッシュをリセットしてあげれば正しいものを見つけてくれる様になります。