VAR_SHELL_FUNCINFOパラメーター(関数情報配列の使用有無を選択する)
形式
#-adsh_conf VAR_SHELL_FUNCINFO {TYPE_A|TYPE_B|NONE}
機能
関数情報配列を使用するかどうかを定義します。関数情報配列は,adshexecコマンドが実行している関数の情報を格納する一次元配列です。
関数情報配列には次の3種類があります。関数情報配列については,「5.5.3 関数情報配列」を参照してください。
-
呼び出し関数名称配列
-
関数呼び出し行番号配列
-
関数定義スクリプトファイル名配列
オペランド
- TYPE_A
-
関数情報配列を次に示す「ADSH_」で始まる名称で作成します。
配列の種類
配列名
呼び出し関数名称配列
ADSH_FUNCNAME
関数呼び出し行番号配列
ADSH_LINENO
関数定義スクリプトファイル名配列
ADSH_SOURCE
- TYPE_B
-
関数情報配列を次に示すbashと同じ配列名で作成します。
配列の種類
配列名
呼び出し関数名称配列
FUNCNAME
関数呼び出し行番号配列
BASH_LINENO
関数定義スクリプトファイル名配列
BASH_SOURCE
- NONE
-
関数情報配列を作成しません。
そのため,TYPE_AやTYPE_Bの指定時に作成される配列を通常の配列として使用できます。
注意事項
-
システム環境ファイルとジョブ環境ファイルの両方にこのパラメーターが定義されていた場合,ジョブ環境ファイルでの定義が有効になります。
-
このパラメーターを同一の環境ファイルで同一のホストに対して複数定義した場合,エラーとなります。
-
関数情報配列は読み込み専用です。読み込み専用の解除,値の更新,unsetによる無効化はできません。
-
関数情報配列は関数内ローカル変数として定義することはできません。関数内での属性の変更や,関数内ローカル変数の定義はしないでください。
-
関数情報配列は#-adsh_step_startコマンドのstepVar属性に指定することはできません。
-
ルートジョブと子孫ジョブでパラメーターの指定値が異なる場合,作成される配列はジョブ起動時のパラメーターの指定値に従います。
使用例
VAR_SHELL_FUNCINFOパラメーターにTYPE_Aを指定した環境で次のジョブ定義スクリプトを実行した場合を例に説明します。
- /home/user/script/adsh_func.ash
0001 : func1(){ # 関数func1の定義 0002 : function func1_2 { # 関数func1_2の定義 0003 : echo "in func1_2" 0004 : func2 # 関数func1_2から関数func2を呼び出す 0005 : } 0006 : echo "in func1" 0007 : . ./func2.ash # 関数func2を定義した外部スクリプトを.(ドット)で読み込む 0008 : func1_2 # 関数func1から関数func1_2を呼び出す 0009 : } 0010 : 0011 : echo "main_script start" 0012 : export FPATH=`pwd` # シェル変数FPATHにカレントの作業ディレクトリを格納 0013 : #-adsh_script ./func3.ash # 関数func3を定義した外部スクリプトを#-adsh_scriptで読み込む 0014 : autoload func4 # 関数func4のオートロード機能を有効にする 0015 : 0016 : func1 # 関数func1を呼び出す 0017 : echo "main_script end"
- /home/user/script/func2.ash
0001 : func2(){ 0002 : echo "in func2" 0003 : func3 0004 : }
- /home/user/script/func3.ash
0001 : func3(){ 0002 : echo "in func3" 0003 : func4 0004 : }
- /home/user/script/func4
0001 : func4(){ 0002 : echo "in func4" 0003 : cnt=0 0004 : for cnt in 0 1 2 3 4 5 0005 : do 0006 : echo "ADSH_FUNCNAME[$cnt] = ${ADSH_FUNCNAME[$cnt]}" 0007 : echo "ADSH_LINENO[$cnt] = ${ADSH_LINENO[$cnt]}" 0008 : echo "ADSH_SOURCE[$cnt] = ${ADSH_SOURCE[$cnt]}" 0009 : done 0010 : }
echoコマンドの行で各関数のスタック情報が出力されます。
関数func4()実行時点の関数情報配列の値を次に示します。
要素番号
配列名
ADSH_FUNCNAME
ADSH_LINENO
ADSH_SOURCE
0
func4
3
/home/user/script/func4
1
func3
3
/home/user/script/func3.ash
2
func2
4
/home/user/script/func2.ash
3
func1_2
8
/home/user/script/adsh_func.ash
4
func1
16
/home/user/script/adsh_func.ash
5
main
0
/home/user/script/adsh_func.ash
なお,VAR_SHELL_FUNCINFOパラメーターにTYPE_Bを指定した環境で実行する場合は,ジョブ定義スクリプト「/home/user/script/func4」の内容を次のように変更してください。
0001 : func4(){ 0002 : echo "in func4" 0003 : cnt=0 0004 : for cnt in 0 1 2 3 4 5 0005 : do 0006 : echo "FUNCNAME[$cnt] = ${FUNCNAME[$cnt]}" 0007 : echo "BASH_LINENO[$cnt] = ${BASH_LINENO[$cnt]}" 0008 : echo "BASH_SOURCE[$cnt] = ${BASH_SOURCE[$cnt]}" 0009 : done 0010 : }