Shell でファイルの存在を判定する
デフォルトの .profile には、以下のようなコードが書かれていることが多い。
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
てっきり、この意味は「~/.bashrc というファイルがあれば、それを実行する」という趣旨だと思っていたが、~/bin というディレクトリを作って、同じように
if [ -f ~/bin ]; then export PATH=~/bin:$PATH; fi
という感じにしても PATH が追加されない。文法ミスか?と思って、"~/bin:$PATH" にしてみたり、セミコロンをとってみたりといろいろやったが効果なし。そして、あれこれ試したあとで、自分の前提がおかしいのではないかと思って -f オプションについて調べてみた。結果は以下。
-f FILE FILE exists and is a regular file
自分が早合点していただけか・・・このオプションのすぐ上に
-e FILE FILE exists
というのがあったので、.bash_profile の内容を
if [ -e ~/bin ]; then export PATH=~/bin:$PATH fi
にしたらうまくいった。なんだか恥ずかしい。。。