La envoltura cd
, un comando existente, no se recomienda.
Una solución más universal sería definir un chpwd
enlace personalizado en Bash. (Según las etiquetas de esta pregunta, supongo que estás usando Bash)
No hay un sistema de gancho completo diseñado en Bash en comparación con otros proyectiles modernos. PROMPT_COMMAND
La variable se utiliza como una función de precmd
enlace, que es equivalente al enlace en ZSH, fish_prompt
en Fish. Por el momento, ZSH es el único shell que he conocido que tiene un chpwd
gancho incorporado.
PROMPT_COMMAND
Si se establece, el valor se interpreta como un comando para ejecutar antes de la impresión de cada solicitud principal ($ PS1).
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variables
chpwd
Gancho en Bash
Se proporciona un truco para configurar un chpwd
enlace equivalente en Bash basado en PROMPT_COMMAND
.
# create a PROPMT_COMMAND equivalent to store chpwd functions
typeset -g CHPWD_COMMAND=""
_chpwd_hook() {
shopt -s nullglob
local f
# run commands in CHPWD_COMMAND variable on dir change
if [[ "$PREVPWD" != "$PWD" ]]; then
local IFS=$';'
for f in $CHPWD_COMMAND; do
"$f"
done
unset IFS
fi
# refresh last working dir record
export PREVPWD="$PWD"
}
# add `;` after _chpwd_hook if PROMPT_COMMAND is not empty
PROMPT_COMMAND="_chpwd_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}"
Ya que estamos detectando PWD
el cambio directamente, la solución trabaja con cd
, pushd
y popd
.
Nota : La principal diferencia entre nuestra chpwd
implementación en Bash y chpwd
en ZSH es PROMPT_COMMAND
que no es compatible con un shell Bash no interactivo.
Uso
_public_html_action() {
if [[ $PWD == */public_html ]]; then
# actions
fi
}
# append the command into CHPWD_COMMAND
CHPWD_COMMAND="${CHPWD_COMMAND:+$CHPWD_COMMAND;}_public_html_action"
Fuente: Crear chpwd Equivalent Hook en Bash desde mi esencia.
Para cualquiera que quiera una respuesta para ZSH. Use chpwd
gancho en ZSH. No defina la chpwd()
función directamente. Más detalles aquí .
echo "Testing..."
poco más arriba de la salida if, pero de nada. ¿Necesito hacer algo para aplicar estos cambios?