Il wrapping cd
, un comando esistente, non è raccomandato.
Una soluzione più universale sarebbe la definizione di un chpwd
hook personalizzato in Bash. (Secondo i tag di questa domanda, suppongo che tu stia usando Bash)
Non esiste un sistema di aggancio completo progettato in Bash rispetto ad altri gusci moderni. PROMPT_COMMAND
variabile viene utilizzata come funzione hook, che equivale a precmd
hook in ZSH, fish_prompt
in Fish. Per ora, ZSH è l'unica shell che ho conosciuto che ha un chpwd
hook incorporato.
PROMPT_COMMAND
Se impostato, il valore viene interpretato come un comando da eseguire prima della stampa di ciascun prompt primario ($ PS1).
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variables
chpwd
Hook in Bash
Viene fornito un trucco per configurare un chpwd
hook equivalente in Bash basato su 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}"
Dal momento che stiamo rilevando PWD
direttamente il cambiamento, la soluzione funziona con cd
, pushd
e popd
.
Nota : la differenza principale tra la nostra chpwd
implementazione in Bash e chpwd
in ZSH PROMPT_COMMAND
non è supportata in una shell Bash non interattiva.
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"
Fonte: Crea chpwd Hook equivalente in Bash dal mio succo.
Per chiunque desideri una risposta per ZSH. Utilizzare il chpwd
gancio in ZSH. Non definire la chpwd()
funzione direttamente. Maggiori dettagli qui .
echo "Testing..."
output appena sopra l'if, ma niente. Devo fare qualcosa per applicare queste modifiche?