2016-07-20 1 views
0

アサーションのログを生成するために現在実行中の関数名を抽出しようとしています。ここに私が試したものがありますshの関数名

function_name() 
{ 
    s=${FUNCNAME[0]} 
    touch ${s} 
} 

私は$ {FUNCNAME [0]}はshにないbashでしか動作しないと思います。

それを行うためのshで現在実行中の関数名を取得する方法はあり

+0

私が知る限り、これはPOSIXシェルからは得られないものです。 – chepner

+0

awkを使ってshスクリプトを前処理して、関数を解析してロギング式を挿入することができます。 – pdg

答えて

1

一つの方法は、すべての機能に手動でログ式を挿入することがあることは面倒だが、それは、awkので自動化することができます。

はあなたが質問に使用されるコーディング規則に従うと仮定します

#!/usr/bin/awk  
/^[ \t]*function[ \t]*[a-zA-Z_][^(]*\(\)/ { 
    name=$0 
    sub(/^[ \t]*function[ \t]*/, "", name) 
    sub(/[ \t]*\(\).*/, "", name) 
    if ($0 !~ /\{/) { 
     print 
     getline 
    } 
    print 
    print " s='" name "'" 
    print " touch ${s}" 
    next 
} 
1 

コードがshスクリプト内の各機能のために、自明である、それは関数名を解析し、以下のロギングコードを挿入します。上記のコードの最後の行に注意してください。これは、他のすべての行を表示することを意味します。