鱒身(Masu_mi)のブログ

知った事をメモする場所。

testコマンドで少しハマったのでメモ

.bashrc${PATH} を設定している。 dotfileは githubで管理 してて複数サーバーに対応させ(様とし)ている。 問題が2点あった。

  • 実際に存在しないPATHも読み込んでしまっている
    dir 存在チェックで対応
  • .bashrc を再読み込みするとPATHに同じdirが登録されてしまう
    ${PATH} 存在チェックで対応

if というか [] で少し躓いた。 -a でバッククォートした $PATH チェックを繋ごうとしたら失敗。 2つの []&& で繋いでも良いのだけど折角 [] 使っているのに変な感じがした。 なので略記を使わず test を明示する方針にした。

結局、関数は以下の形になった。

# 関数定義
function add_path {
    if test -d $1 && test `echo ${PATH} | grep -v $1` ; then
      export PATH="$1:${PATH}"
    fi
}
# 使用例
add_path "/usr/local/bin"

これで上記2つの問題の大部分は解決する。

ただ eval "$(rbenv init -)" の実行が ${PATH} を変更するので、 ${PATH} が伸びる問題は完全には解決していない。

これは rbenv のオプションで対応・実行条件で対応・サブシェル内で関数定義、 などで対応出来る筈。 一旦は別の問題として対応する事にした。