はじめに
Bashシェルスクリプトでログを出力する際などに以下のような情報が欲しい場合がありました。
- 「現在実行中の関数」の名前
- 「現在実行中の関数」の呼び出し元
これらの情報を取得する方法を説明します。
検証環境
| |
$FUNCNAME 変数を使って「コールスタック」を参照する
$FUNCNAME という配列の変数を参照することで、関数の「コールスタック」情報が取得できます。
サンプルスクリプトを通して、使い方を見ていきましょう。
サンプルスクリプトで確認してみる
以下のような2つのスクリプトを作成して動作を確認してみます。
| |
| |
| |
f1 関数を呼び出すまでの流れは大きく以下のようになっています。
ただし、script_main.sh から script_sub.sh を呼び出す方法として2つの方法を実行しています。
実行結果は以下のようになります。
| |
$FUNCNAME 変数について
サンプルプログラムからわかったことを整理します。
declare -p FUNCNAMEコマンドから、変数$FUNCNAMEは配列であることがわかる。${FUNCNAME[@]}でコールスタックがすべて取得できる${FUNCNAME[0]}で現在実行中の関数名(ここではf1)が取得できる${FUNCNAME[1]}で呼び出し元の関数名(ここではf2)が取得できる${FUNCNAME[N]}( N は添字の最終値)は呼び出し元のmainという関数名(?)が取得できる.あるいはsourceコマンド経由でスクリプトを読み込んだ場合は、sourceという中間関数がコールスタックに積まれる
ひとこと
実行中の関数名をログ出力させたい場合などには、以下のような命令が使えます。
| |