Homebrewにはhomebrew-cask 等の外部コマンドを導入することが出来ますが、 Rubyを使ったものだけだと思ってたら シェルスクリプトでもなんでも入れられるようだったので試してみました。
Homebrewの外部コマンド
Homebrewには内部のコマンドと共に、 後からインストールしてコマンドとして使えるものがあります。
brew commandsとすると一覧が出てきます。
コマンド化するには結構面倒なのかな、というかRubyで書くのかな、と思ってたのですが、
どうやらPATHが通ってるところのコマンドを探して、
brew-commandというものがあるとbrew commandとして使える様になる模様。
.rbの拡張子がついてるものについては.rb拡張子を除いた状態でRubyの実行コマンド
ファイルとして認識されます。
homebrew/brew.rb at master · Homebrew/homebre: https://github.com/Homebrew/homebrew/blob/master/Library/brew.rb#L130
.rbがついてるものはrequireメソッドで実行され、
それ以外はexec。
.sh等の拡張子を付けておいても使える事は使えますが(brew command.shなどとして)、
brew commandsでは表示されないし避けたほうが無難な様子。
Brewallをコマンド化
brewallはBrewfileを用いてパッケージを管理するシェルスクリプトで、
brew bundleの代わりになるようなものです
1。
BrewfileをGitHubで管理できる様に出来る事が便利。
以前はインストール
するとbrewallというコマンドが使える様になったわけですが、
レポジトリにbrew-allというbrewallへのシンボリックリンクを追加しました。
これで、今まで通り
$ brew tap rcmdnk/brewall
$ brew install brewall
とインストールすると
$ brew all ...
というコマンドが使える様になります。
$ brew commands
Built-in commands
--cache cat doctor irb options search unlinkapps
--cellar cleanup edit leaves outdated sh unpack
--env commands fetch link pin tap unpin
--prefix config help linkapps postinstall test untap
--repository create home list prune tests update
audit deps info log readall uninstall upgrade
bottle diy install missing reinstall unlink uses
External commands
all beer gist-logs pull tap-readme
cask bundle-dir graph server test-bot
gem bundle man services versions
aspell-dictionaries cleanup-installed profile switch which
$
と、ちゃんとallが認識されてます。
シェルスクリプトの場合なんかはそのままbrew-allとするのと全く一緒なわけで、
だから何だという感じもありますが、
新しくコマンド作らいたい場合は
単にbrew-*という実行ファイルを作ってPATHが通った所に入れれば
Homebrewにコマンドが追加できる、ということです。
追記: 2015/07/21
上の方法は今はobosleteになっていて、 cmdというディレクトリを作ってTapするだけの方法が主流になっているようです。
追記ここまで
-
現在
brew bundleすると、$ brew bundle Warning: brew bundle is unsupported and will be replaced with another, incompatible version at some point. Please feel free volunteer to support it in a tap. ...こんな感じのメッセージが出ます。
Deprecate some contributions. by mikemcquaid · Pull Request #30749 · Homebrew/homebrew
この辺で色々と外部コマンドについてどうしようかということが話し合われて bundleについてはUnsupportedということになったみたいです。
