BASH admite una $PROMPT_COMMANDvariable de entorno que define un comando que se ejecutará antes de cualquier solicitud interactiva de primer nivel. Estoy buscando un ZSH equivalente a eso.
La documentación dice que hay una función precmdque puedo definir para lograr eso; Sin embargo, no tengo idea de cómo definirlo a partir de una variable de entorno.
He considerado pasar una variable de entorno que haría que ZSH lea un archivo que contiene la definición de esa función, pero ZSH no parece admitir tales cosas : solo lee archivos globales y luego archivos por usuario. Puedo reemplazarlos pero no puedo agregarlos sin modificar los archivos, lo cual no puedo hacer.
Entonces, ¿cómo defino un enlace de solicitud previa en ZSH a través de una variable de entorno, como lo haría con $PROMPT_COMMANDBASH?
fuente

exityexec, ok;))start() { eval "$@"; echo post-command-code }y luego usar un enlace zle para ejecutar la línea de comando constartantepuesto?DEBUGtrampa es un buen hallazgo, pero aún tienes el problema de cómo definirla. He extendido mi respuesta una vez más, pero te dejo escribir tu propia respuesta con respecto a la solución de trampa DEBUG.:)Respuestas:
El enfoque más simple para emular bash
$PROMPT_COMMANDque me viene a la mente es usar elprecmdgancho, como ya descubriste. Defínalo comoy puedes hacer algo así:
Tenga en cuenta las comillas simples en ese ejemplo, de lo contrario
$(date)se ampliará demasiado pronto, es decir, ya al definir$PROMPT_COMMANDy no cuando se llama antes de la solicitud.Si desea preservar (y no quiere alterar) la definición existente, puede usar ese enfoque:
Con eso, las
prmptcmdfunciones se ejecutan después de laprecmd()función existente .Finalmente, aquí hay una manera adecuada para usar en un paquete de programa, que no debe modificar los archivos del usuario o del sistema ni puede ingresar los comandos interactivos.
Un ejemplo para generar una sesión bash podría ser
Para generar zsh puedes usar
lo que hace
/program/dir/.zshrcque sea de origen. En este archivo, elprecmd()gancho se puede definir como se explicó anteriormente. Si desea que la configuración del usuario, además, incluyasource $HOME/.zshrcetc. en el programa .zshrc, también. Esta configuración se puede mantener, ya que no se modifican archivos fuera del directorio del programa.Como última adición, aquí hay una prueba de concepto de cómo mantener al nuevo usuario bienvenido también. Use el siguiente código en su
/program/dir/.zshenvarchivo de configuración rc:fuente
.zshrc? (3) Un ejemplo:foo() { echo foo }; bar() { echo bar }; precmd_functions=(foo bar)esto se ejecutafoo()ybar()además deprecmd().PROMPT_COMMAND="echo foo" bash, ¿verdad? ¿Es esto una posibilidad para el desove zsh:ZDOTDIR=/program/dir zsh. Luego/program/dir/.zshrcse obtiene al inicio, donde puede definir el gancho precmd (). Si desea que el usuario además incluyasource $HOME/.zshrcetc. en el programa zshrc. Esto debería ser fácil de mantener, ya que no se modifican archivos fuera del directorio del programa.Como dice @mypy, Zsh's
precmdfunciona de manera similar a BashPROMPT_COMMAND.Aquí hay un ejemplo que funciona para Bash o Zsh y no usa
eval:Ejecutar desde scripts de inicio de shell:
y:
Las indicaciones aquí son solo ejemplos. Definitivamente, uno puede hacer cosas mucho más difíciles.
Para obtener detalles sobre cómo configurar las funciones de solicitud, consulte: http://zsh.sourceforge.net/Doc/Release/Functions.html#index-precmd y http://www.gnu.org/software/bash/manual/bashref.html # Imprimiendo un mensaje .
Para obtener detalles sobre las expansiones rápidas, consulte http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html y http://www.gnu.org/software/bash/manual/bashref.html#Printing-a -Prompt .
fuente