2011-08-02 13 views
181

Czy istnieje sposób, aby wyświetlić definicję funkcji basha w bash?Czy bash może wyświetlać definicję funkcji?

Na przykład, powiedzmy, że określona funkcja foobar

function foobar { 
    echo "I'm foobar" 
} 

Czy istnieje jakiś sposób, aby później otrzymać kod foobar działa?

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

Odpowiedz

240

Użyj type. Jeśli foobar to np. zdefiniowanych w ~/.profile:

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

ten sposób dowiedzieć się, co foobar było, a jeśli została zdefiniowana jako funkcja wywołuje declare -f jak wyjaśnił pmohandras.

+1

To nie działa w zsh. declare -f func działa praktycznie wszędzie – sjsupersumit

127

Możesz wyświetlić definicję funkcji w bashu używając declare. Na przykład:

declare -f foobar 
+0

Wielkie, do tego stopnia, nawet wtedy, gdy funkcje zdefiniowane w innych załadowanych plików skryptów. Działa również w zsh. –

+1

Działa w zsh. Wybrana odpowiedź nie działa dla mnie. – Bijan

+1

Działa ze starymi powłokami w systemach innych niż linux, jeśli używasz 'typeset -f' – Emmanuel

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

z foobarem będącym nazwą funkcji.

+4

problem: wyświetli się tylko do pierwszego "}", co nie jest wszystkim, ilekroć definicja zawiera zagnieżdżenia "{...}", na które faktycznie zezwala Bash. –

+1

Może również zawieść, jeśli funkcja zawiera ciąg here-doc/here zawierający nawias klamrowy – Cheetah

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

To w zasadzie drukuje linie z Twojego polecenia set zaczynające foobar function nazwa(), a skończywszy}

Powiązane problemy