BLOGTIMES
2009/10/13

sh スクリプト内で安全に相対パスを使う

  cli  sh 
このエントリーをはてなブックマークに追加

シェルスクリプトでバッチを書いたものの、いざcronに仕掛けたらうまく動かないというパターンはバッチを作った人であれば一度は経験があると思います。基本的には環境変数がセットされていなくて、PATHが通ってなかったというパターンなんかが多いと思いますが、その次に多いのが、スクリプトの内部で相対パスを使っているために、自分でも予期しないうちにカレントディレクトリに依存したスクリプトになってしまっていたというのがあります。いちいち外部のプログラムを絶対PATHで書いていってもいいのですが、それも結構鬱陶しいので、僕はスクリプトの行頭に下記のような2行を追加するようにしています。

scriptdir.sh

#!/bin/bash SCRIPT_DIR=`dirname $0` cd $SCRIPT_DIR # これ以下に処理を書く pwd

こうするとカレントディレクトリが何処であっても、スクリプトの置いてあるディレクトリをカレントディレクトリとしてスクリプトを実行できるようになります。ちょっとしたスクリプトにも必ず書いておくようにすると、他人にスクリプトを実行してもらうときも、「###にcdしてから・・・」という説明を省く事ができるので意外と便利です。

$ pwd /tmp/test $ ./scriptdir.sh /tmp/test $ cd .. $ pwd /tmp $ ./test/scriptdir.sh $ cd ~ $ pwd /home/hsur $ /tmp/test/scriptdir.sh /tmp/test

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3249
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン