シェルスクリプトでコマンドが存在するか確認する方法
.zshrcでrvmを読み込み処理が何か変になったので、これを機にrbenvに乗り換えました。
ただ、複数のマシンで、この.zshrcを使っているため、rbenv入れてない場合でも動くようにしなければなりません。。
最初whichで判別すればいいやと思ったんですが、念のため他に方法がないかググってみました。
するとここが詳しそうな感じでした。
要はwhichだと外部プロセスなんで遅いと。組み込みのtypeとかcommandを使えと。
もうちょっと、ググってみるとrvmの中で使われているというテクが書いてあるページが ありました。
http://please-sleep.cou929.nu/check-command-existence-on-shellscript.html
結局↓にすることにしました。
if builtin command -v rbenv > /dev/null; then eval "$(SHELL=zsh rbenv init -)" fi
ちなみに
builtin 関数よりコマンドを優先して実行するっていうコマンド
command シェルコマンドでないコマンドでも実行できるコマンド
-v 実行せずコマンドのパスを表示というオプション
です。
rvmのテクをrbenvに適用するとはなんという皮肉・・・