なっく日報

技術やら生活やらのメモ

シェルスクリプトでコマンドが存在するか確認する方法

.zshrcでrvmを読み込み処理が何か変になったので、これを機にrbenvに乗り換えました。

ただ、複数のマシンで、この.zshrcを使っているため、rbenv入れてない場合でも動くようにしなければなりません。。

最初whichで判別すればいいやと思ったんですが、念のため他に方法がないかググってみました。

するとここが詳しそうな感じでした。

http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script/677212#677212

要は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に適用するとはなんという皮肉・・・