2011-08-02 17 views
181

bashでbash関数の定義を表示する方法はありますか?関数の定義をbashで表示できますか?

は例えば、私は機能foobar

function foobar { 
    echo "I'm foobar" 
} 

後でfoobar実行するコードを取得する方法はありますが定義されて言いますか?

$ # non-working pseudocode 
$ echo $foobar 
echo "I'm foobar" 

答えて

240

typeを使用します。例えば、foobarが。あなたの~/.profileで定義されている:

$ type foobar 
foobar is a function 
foobar { 
    echo "I'm foobar" 
} 

これはfoobarが何であったかを知るんし、それはpmohandrasで説明したように、それはdeclare -fを呼び出す関数として定義した場合。

+1

これはzshでは機能しません。宣言-f funcはほとんどどこでも動作します – sjsupersumit

127

関数の定義は、declashを使用してbashで表示できます。たとえば、

declare -f foobar 
+0

グレートは、ポイントに、機能は他のロードされたスクリプトファイルで定義されている場合でも動作します。 zshでも動作します。 –

+1

zshで動作します。選択された答えは私にとってはうまくいかない。 – Bijan

+1

'typeset -f'を使用すると、Linux以外のシステム上の古いシェルで動作します – Emmanuel

6
set | grep -A999 '^foobar()' | grep -m1 -B999 '^}' 

foobarは関数名です。

+4

問題:最初の "}"までしか表示されません。defintionに "{...}"のネストが含まれていれば、すべてではありません。 –

+1

関数にcurly-braceパターンを含むhere-doc/here-stringが含まれている場合にも失敗することがあります – Cheetah

2
set | sed -n '/^foobar()/,/^}/p' 

これは、基本的には(関数名foobarに始まるあなたのsetコマンドから行を出力)で終わる}

関連する問題