シェルで、自身のスクリプトファイル名を取得する
シェルスクリプト内ではパラメータを使用して、自身のスクリプトファイル名を取得できます。
例えば
#!/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
で、スクリプトファイル名だけがゲットできます。
詳しい原理はリンク先で解説してますので割愛。
こりゃ便利だ。