なぜ

シェルスクリプト実行時の カレントディレクトリ (現在位置) は「実行した位置」で変わります

そのため、スクリプトの中で相対パスを使っていると、意図せずパスがずれてしまいます。

かといって、絶対パスでガチガチにしてしまうのも、ファイルを移動するような場合に不便さが残ります。


たとえば、

1$ pwd
2/home/atuweb
3$ sh /var/hoge/fuga.sh

な感じで、

「同じディレクトリにフィアルを書き出す」シェルスクリプト /var/hoge/fuga.sh を、

ユーザのホームディレクトリで実行すると、

/home/atuweb/bazz.log にファイルが生成される、みたいな感じです。

「置かれた場所」を調べる

それまでは、シェルスクリプトの先頭に

1cd /var/hoge/`

みたいに、絶対パスを埋め込んでごまかしていましたが、

「シェルが置かれている場所を調べる」という、美しい解決方法がありました。

絶対パスを埋め込のではなく、

1DIR=`dirname ${0}`
2cd $DIR

とすることで、

「シェルが置かれたディレクトリ」に移動してくれます。

これで楽勝ですね。

新しいLinuxの教科書

三宅 英明,大角 祐介
出版社:SBクリエイティブ  発売日:2015-06-06

Amazonで詳細を見る

新しいシェルプログラミングの教科書

三宅 英明
出版社:SBクリエイティブ 

Amazonで詳細を見る