web-dev-qa-db-ja.com

bashは関数の定義を表示できますか?

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

たとえば、関数foobarを定義したとします

function foobar {
    echo "I'm foobar"
}

foobarが実行するコードを後で取得する方法はありますか?

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

typeを使用します。 foobarがたとえば~/.profileで定義:

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

これにより、foobarが何であるかがわかります。関数として定義されている場合、pmohandrasで説明されているように、declare -fが呼び出されます。

関数の本体(つまりコード)のみを出力するには、sedを使用します。

type foobar | sed '1,3d;$d'
315

Declareを使用して、bashで関数の定義を表示できます。例えば:

declare -f foobar
178
pmohandas
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

foob​​arは関数名です。

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

これは基本的に、関数名foobar()で始まり、}で終わるsetコマンドの行を出力します

4