Você não pode portá-lo. A especificação POSIX não especificou nenhuma maneira de despejar a definição de função, nem como as funções são implementadas.
Em bash
, você não precisa exportar a função para o ambiente, você pode usar:
declare -f funcname
(Trabalhar em zsh
)
Isso funciona mesmo quando você executa bash
no modo posix
:
$ bash --posix -c 'y(){ echo z; }; declare -f y'
y ()
{
echo z
}
Em ksh
:
typeset -f funcname
(Funciona em bash
, zsh
, mksh
, pdksh
, lksh
)
Em yash
:
typeset -fp funcname
Isso não funcionará se yash
entrar modo POSIXly-correto :
$ yash -o posixly-correct -c 'y() { ehco z; }; typeset -fp y'
yash: no such command 'typeset'
com zsh
:
print -rl -- $functions[funcname]
whence -f funcname
type -f funcname
which funcname
Observe que whence -f
, which
, type -f
reportará o alias primeiro com o mesmo nome. Você pode usar -a
para fazer zsh
relatar todas as definições.
POSIXly, você teria que gravar sua definição de função que você poderia fazer com:
myfunction_code='myfunction() { echo Hello World; }'
eval "$myfunction_code"
ou uma função auxiliar
defn() {
code=$(cat)
eval "${1}_code=\$code; $1() { $code; }"
}
defn myfunction << 'EOF'
echo Hello World
EOF
printf '%s\n' "$myfunction_code"