シェルで、自身のスクリプトファイル名を取得する

シェルスクリプト内ではパラメータを使用して、自身のスクリプトファイル名を取得できます。

例えば

#!/bin/sh

FILE=${0}

とかすると、変数:FILE にはスクリプトのファイル名が入ります。
要はパラメータの最初(インデックス0)には自身のファイル名が渡されるってことです。

これ結構使えるんですけど、シェルスクリプトの実行の仕方でパラメータの中身が変わってしまうのがネックでした。
フルパス指定で実行すればフルパスで、相対パスで実行すれば相対パスで渡されてくる。
つまり、"自身のスクリプトファイル名がパラメータで渡される"んじゃなくて、"コマンドラインがそのままパラメータで渡される"ってこと。

私はスクリプトの実行内容のログを取るときに、

LOG_DIR=/var/log
LOG_FILE=${LOG_DIR}/${0}.log

echo `date` > ${LOG_FILE}

みたいなことしてコマンドの実行結果を変数:LOG_FILE で示されるファイルにリダイレクトしたりしてます。
これおわかりの通り、カレントからの相対パスでの実行でしか通用しません。

なんとかならないかなーって探してたら見つけましたよ。
シェルのパラメータ展開でスクリプト自身のファイル名を取得する

私の例だと、

LOG_DIR=/var/log
LOG_FILE=${LOG_DIR}/${0##*/}.log
で、スクリプトファイル名だけがゲットできます。

詳しい原理はリンク先で解説してますので割愛。
こりゃ便利だ。

トラックバック

このエントリーのトラックバックURL:
http://www.tec-q.com/mt/mt-tb.cgi/877

コメントを投稿