Shammer's Philosophy

My private adversaria

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 

にしたらうまくいった。なんだか恥ずかしい。。。