Bashでbash関数の定義を表示する方法はありますか?
たとえば、関数foobar
を定義したとします
function foobar {
echo "I'm foobar"
}
foobar
が実行するコードを後で取得する方法はありますか?
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
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'
Declareを使用して、bashで関数の定義を表示できます。例えば:
declare -f foobar
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'
foobarは関数名です。
set | sed -n '/^foobar ()/,/^}/p'
これは基本的に、関数名foobar()で始まり、}で終わるsetコマンドの行を出力します