Может ли bash показать определение функции? - PullRequest
229 голосов
/ 02 августа 2011

Есть ли способ просмотреть определение функции bash в bash?

Например, скажем, я определил функцию foobar

function foobar {
    echo "I'm foobar"
}

Есть ли способ позже получитькод, который foobar работает?

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

Ответы [ 4 ]

309 голосов
/ 02 августа 2011

Используйте type. Если foobar, например, определено в вашем ~/.profile:

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

Здесь выясняется, что было foobar, и если оно было определено как функция, оно вызывает declare -f, как объяснено в pmohandras.

Чтобы распечатать только тело функции (т.е. код), используйте sed:

type foobar | sed '1,3d;$d'
174 голосов
/ 02 августа 2011

Вы можете отобразить определение функции в bash с помощью команды Declare.Например:

declare -f foobar
6 голосов
/ 02 августа 2011
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

с именем foobar в качестве имени функции.

4 голосов
/ 29 июня 2016
set | sed -n '/^foobar ()/,/^}/p'

Это в основном выводит строки из вашей команды set, начиная с имени функции foobar () и заканчивая}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...