検索
カレンダー
2020年2月
« 4月    
 1
2345678
9101112131415
16171819202122
23242526272829
ブログメニュー
Amazon検索
キーワード:

シェルスクリプト(バッチファイル)を別ディレクトリからの起動に対応させる

2007年3月30日

シェルスクリプトやバッチファイルを書いていると、コマンドの中に相対パスで別のファイルを指定したりしてしまいます。
例えばシェルスクリプトと同じディレクトリにある”test.txt”というファイルを開くシェルスクリプトなら、単純に

cat test.txt

とすればよいように思うかもしれません。
試しに、上記の内容を記述したファイルを/tmp/test.shとし、適当なテキストファイルを/tmp/test.txtとして用意し、
自身のホームディレクトリより
/tmp/test.sh
として実行するとどうなるでしょうか。
きっとエラーになるはずです。
これは、シェルスクリプトの中で実行されるコマンド(cat)が、ホームディレクトリのtest.txtというファイルを開こうとするからです。

シェルスクリプトと同じディレクトリにあるファイルを開こうとするなら、一度シェルスクリプトがあるディレクトリに移動し、終了後に戻るという操作が必要です。
これをシェルスクリプトで記述するなら以下のようになります。

pushd `dirname $0` > /dev/null
(実行するコマンド)
popd > /dev/null

また、バッチファイルなら以下のようになります。

@pushd %~dp0
(実行するコマンド)
@popd

私は、シェルスクリプトやバッチファイルを書くとき、とりあえず上記のコマンドをおまじないとして書くようにしています。

注意: ファイルパスをオプションとして指定するようなコマンドを作成するときは、上記の手法は使えません

コメントはまだありません »

コメントはまだありません。

TrackBack URL : http://www.meibinlab.jp/nishijima/archives/82/trackback

コメントする