Reputation: 16440
Is there a way to view a bash function's definition in bash?
For example, say I defined the function foobar
function foobar {
echo "I'm foobar"
}
Is there any way to later get the code that foobar
runs?
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
Upvotes: 368
Views: 73175
Reputation: 58594
Use type
. If foobar
is e.g. defined in your ~/.profile
:
$ type foobar
foobar is a function
foobar {
echo "I'm foobar"
}
This does find out what foobar
was, and if it was defined as a function it calls declare -f
as explained by pmohandras.
To print out just the body of the function (i.e. the code) use sed
:
type foobar | sed '1,3d;$d'
Upvotes: 480
Reputation: 105
set | sed -n '/^foobar ()/,/^}/p'
This basically prints the lines from your set command starting with the function name foobar () and ending with }
Upvotes: 8
Reputation: 4158
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'
with foobar being the function name.
Upvotes: 4
Reputation: 3819
You can display the definition of a function in bash using declare. For example:
declare -f foobar
Upvotes: 328