Cómo mostrar la definición de la función zsh(como bash "type myfunc")?
function definition (4)
La expresión zsh es de whence
, la bandera -f
imprime las definiciones de función:
zsh$ whence -f foo
foo () {
echo hello
}
zsh$
En zsh, type
se define como equivalente a whence -v
, por lo que puede continuar usando type
, pero necesitará usar el argumento -f
:
zsh$ type -f foo
foo () {
echo hello
}
zsh$
Y, finalmente, en zsh, which
se define como equivalente a whence -c
- print resultados en formato csh-like , por lo which foo
producirá los mismos resultados.
man zshbuiltins
por todo esto.
¿Cómo se muestra la definición de una función en zsh? type foo
no da la definición.
En bash:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
En zsh:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a shell function
Si no está seguro de lo que está buscando, puede escribir solo
functions
y le mostrará todas las funciones definidas.
Tenga en cuenta que a veces hay MUCHOS de ellos, por lo que es posible que desee canalizar a un programa de buscapersonas:
functions | less
para definir una función, usa
unfunction functionname
Siempre acabo de usar which
para esto.
tl; dr
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
type -f
/ whence -f
/ which
son subóptimos en este caso , porque su propósito es informar el formulario de comando con la precedencia más alta que se define por ese nombre (a menos que también especifique -a
, en cuyo caso todas las formas de comando se informan), en lugar de informar específicamente sobre el operando como una función .
La opción -f
no cambia eso, solo incluye funciones de shell en la búsqueda.
Los alias y las palabras clave de shell tienen mayor prioridad que las funciones de shell, por lo que, en el caso que nos ocupa, si también se definió un alias foo
, type -f foo
informará la definición de alias .
Tenga en cuenta que zsh
sí expande alias en scripts de manera predeterminada (como lo hace ksh
, pero no bash
), e incluso si desactiva primero la expansión de alias, type -f
/ whence -f
/ which
aún informe los alias primero.