La envoltura cd, un comando existente, no se recomienda.
Una solución más universal sería definir un chpwdenlace 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_COMMANDLa variable se utiliza como una función de precmdenlace, que es equivalente al enlace en ZSH, fish_prompten Fish. Por el momento, ZSH es el único shell que he conocido que tiene un chpwdgancho 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 chpwdenlace 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 PWDel cambio directamente, la solución trabaja con cd, pushdy popd.
Nota : La principal diferencia entre nuestra chpwdimplementación en Bash y chpwden ZSH es PROMPT_COMMANDque 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 chpwdgancho 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?. ~/.bash_profile/bin/cden mi CentOS, por lo que esta solución podría no funcionarcd -P public_htmlocd ~/public_htmlo tiene un comportamiento inesperado si no puedecdenpublic_html.