シェルをかくときに 、そのシェルがどこで動くかを考えなければならない。
例えば、「/tmp/fujihara/sh」にtest.shを作ったとする。テストシェルは「mkidr ./logs」コマンドでログ用のフォルダを自動で作る。
現在「/tmp」にいるとして、このスクリプトを「./fujihara/sh/test.sh」とたたけば、「/tmp/logs」ができる。しかし、「/tmp/fujihara/sh」にいて「./test.sh」とたたけば、「/tmp/fujihara/sh/logs」ができる。
このように、ユーザの位置によって、作るフォルダなどがかわってくると管理が大変。あちこちに一時フォルダができたりしてしまう。「実行場所に作業フォルダやシェルの結果ファイルなどを作る」というポリシーがなければ、シェルのいる場所に作るようにスクリプトをしておいたほうがいいと思った。
シェルの置かれているパスを取得する
シェルの中では「$0」に実行されたコマンドが入る。「/tmp/fujihara/sh/test.sh」だったり「./sh/test.sh」する。これだと「`dirname $0`」としても絶対パスか相対パスか確定できないので、以下のコマンドを使う。
which $0
これで「/tmp/fujihara/sh/test.sh」のような絶対パスが取れる。あとはdirnameコマンドで、ディレクトリまでを取得すればOK。
SHPATH=`which $0` REALDIR=`dirname $SHPATH`