GNU/Linux >> Tutoriales Linux >  >> Linux

Ubicar la fuente de una función en zsh

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]

Linux
  1. Linux impulsa Internet, confirma el comisario de la UE

  2. ¿La función de la raíz del grupo de usuarios?

  3. ¿Redirigir al mismo archivo que el archivo de origen procesado por el comando?

  4. ¿Qué es el símbolo de nueva línea en la Ps1 de Zsh?

  5. Agregar una nueva entrada a la variable PATH en ZSH

Cómo instalar la última versión de OpenSSL desde Source en Linux

Ohcount:el contador y analizador de líneas de código fuente

WAZUH La plataforma de seguridad de código abierto

¿La función de la lista de dispositivos de bucle?

Instale Awesome Zsh y conviértalo en el shell predeterminado

¿Dónde encuentro la versión de un árbol de fuentes del kernel de Linux?