gitやvagrantに普通にサブコマンドを追加するならpluginを作ることになったりすると思いますが、そういうことしません。作り方知りません。
私の考えたやり方は、
- 新しいサブコマンドなら専用の処理、既存のサブコマンドなら今までどおりの処理を行うシェル関数を書く
- その関数を目的のコマンドにaliasする
だけです。
と、これだけ言っても分からんと思うので、例としてvagrantに、boxをdestroyしてupするrestartサブコマンドを追加します。
.zshrcに以下の記述をします。
function vagrant_wrapper() {
if [ $1 = 'restart' ]; then
shift
\vagrant destroy -f $@ && \vagrant up $@
else
\vagrant $@
fi
}
alias vagrant=vagrant_wrapper
これでvagrant restart BOX_NAME
でdestroy && upが出来ます。もちろんrestart以外のコマンドも使えます。
ポイントとしてはvagrant_wrapper
の中で使うvagrant
コマンドのサフィックスにバックスラッシュ\
をつけることです。バックスラッシュをつけるとaliasを無視して元のコマンドが発動します。つけないと多分無限ループするので注意。
こんな感じでプラグインを作らずともサブコマンドを追加出来るよ、というお話でした。