Вы не можете сделать это переносимо. POSIX spec не указал ни способа дампа определения функции, ни того, как функции реализуются.
В bash
не обязательно экспортировать функцию в окружение, можно использовать:
declare -f funcname
(Работает в zsh
)
Это работает, даже если вы запускаете bash
в posix
режиме:
$ bash --posix -c 'y(){ echo z; }; declare -f y'
y ()
{
echo z
}
В ksh
:
typeset -f funcname
(Работает в bash
, zsh
, mksh
, pdksh
, lksh
)
В yash
:
typeset -fp funcname
Это не сработает, если yash
ввести в POSIXly-correct mode:
$ yash -o posixly-correct -c 'y() { ehco z; }; typeset -fp y'
yash: no such command `typeset'
С zsh
:
print -rl -- $functions[funcname]
whence -f funcname
type -f funcname
which funcname
Обратите внимание, что оба whence -f
, which
, type -f
сообщат о первом алиасе с тем же именем. Вы можете использовать -a
, чтобы заставить zsh
сообщить обо всех определениях.
Согласно POSIX, вам придется записывать определение функции самостоятельно, что можно сделать с помощью:
myfunction_code='myfunction() { echo Hello World; }'
eval "$myfunction_code"
или вспомогательной функции
defn() {
code=$(cat)
eval "${1}_code=\$code; $1() { $code; }"
}
defn myfunction << 'EOF'
echo Hello World
EOF
printf '%s\n' "$myfunction_code"
Как правило, это симптом какой-то ошибки в программном обеспечении каким-то образом, общего ответа дать нельзя.
Таким образом, это действительно специфично для ошибок в конкретном программном обеспечении, которое показывает такое поведение.
В случае с WWWOFFLE -прослушивание сетевого соединения между wwwoffle
и wwwoffled
позволяет получить некоторую информацию.