Hitachi

JP1 Version 11 JP1/Advanced Shell 


7.3.54 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の指定時に作成される配列を通常の配列として使用できます。

注意事項

使用例

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 : }