Может ли bash показать определение функции?
Есть ли способ просмотра определения функции bash в bash?
Например, скажем, я определил функцию foobar
function foobar {
echo "I'm foobar"
}
Есть ли способ позже получить код, который foobar
работает?
$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"
Ответы
Ответ 1
Используйте 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'
Ответ 2
Вы можете отобразить определение функции в bash с помощью объявления. Например:
declare -f foobar
Ответ 3
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'
где foobar является именем функции.
Ответ 4
set | sed -n '/^foobar ()/,/^}/p'
Это в основном печатает строки из вашей команды набора, начиная с имени функции foobar() и заканчивая на}