Can bash show a function's definition?
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"
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'
You can display the definition of a function in bash using declare. For example:
declare -f foobar
set | sed -n '/^foobar ()/,/^}/p'
This basically prints the lines from your set command starting with the function name foobar () and ending with }
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'
with foobar being the function name.