Necesitaba hacer esto hoy y descubrí que whence -v
genera el archivo que contiene la definición de la función.
$ whence -v function_name
function_name is a shell function from /path/to/file
En primer lugar, se puede definir una función sin el function
palabra clave por lo que una mejor búsqueda sería
grep 'cp()' .*
Eso buscará a través de archivos como .zshrc
y .profile
Y qué no. Si eso no encuentra nada, es posible que también desee ver los diversos archivos cargados por zsh
. Estos se enumeran al final de man zsh
:
FILES
$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}* (default is /tmp/zsh*)
/etc/zsh/zshenv
/etc/zsh/zprofile
/etc/zsh/zshrc
/etc/zsh/zlogin
/etc/zsh/zlogout (installation-specific - /etc is the default)
Por defecto $ZDOTDIR
debería ser tu $HOME
. Entonces, este comando debería encontrar su archivo infractor:
grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
/etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Agregué el \|
ya que también puede tener espacios entre el nombre de la función y la función misma. Finalmente, @Dennis señala que los paréntesis también se pueden omitir si usa el function
palabra clave. Entonces, para estar aún más seguro, haz esto:
grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
/etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Versiones más nuevas de zsh (desde 5.4, agregado en commit 34f70c5
) admite el $functions_source
matriz como parte del zsh/parameter
módulo (documentación:man zshmodules
):
functions_source
Esta matriz asociativa de solo lectura asigna nombres de funciones habilitadas al nombre del archivo que contiene el origen de la función.
Para una función cargada automáticamente que ya se cargó, o se marcó para carga automática con una ruta absoluta, o cuya ruta se resolvió con 'functions -r
', este es el archivo encontrado para la carga automática, resuelto en una ruta absoluta.
Para una función definida dentro del cuerpo de un script o archivo fuente, este es el nombre de ese archivo. En este caso, esta es la ruta exacta utilizada originalmente para ese archivo, que puede ser una ruta relativa.
Para cualquier otra función, incluidas las definidas en un indicador interactivo o una función de carga automática cuya ruta aún no se haya resuelto, esta es la cadena vacía. Sin embargo, el elemento hash se informa como definido siempre que la función esté presente:las claves de este hash son las mismas que las de $funcions
.
Entonces, puedes hacer
echo $functions_source[cp]