Обтікання cd
, існуюча команда, не рекомендується.
Більш універсальним рішенням було б визначення користувацького chpwd
гачка в Bash. (Відповідно до тегів цього питання, я припускаю, що ви використовуєте Bash)
Не існує повної системи гаків, розробленої в Bash, порівняно з іншими сучасними мушлі. PROMPT_COMMAND
змінна використовується як функція гака, що еквівалентно precmd
гачку в ZSH, fish_prompt
у Fish. На даний момент ZSH є єдиною відомою мені оболонкою, яка має chpwd
вбудований гачок.
PROMPT_COMMAND
Якщо встановлено, значення інтерпретується як команда для виконання перед друком кожного основного запиту ($ PS1).
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variables
chpwd
Гачок у Баші
Передбачається хитрість встановити chpwd
еквівалентний гак на Bash на основі 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}"
Оскільки ми виявлення PWD
зміни безпосередньо, рішення працює з cd
, pushd
і popd
.
Примітка . Основна різниця між нашою chpwd
реалізацією в Bash і chpwd
ZSH полягає в тому, що PROMPT_COMMAND
вона не підтримується в неінтерактивній оболонці Bash.
Використання
_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"
Джерело: Створіть з моєї суті еквівалентний гачок chpwd на Bash .
Для всіх, хто хоче відповідь на ZSH. Використовуйте chpwd
гачок у ZSH. Не визначайте chpwd()
функцію безпосередньо. Детальніше тут .
echo "Testing..."
трохи вище, ніж результат if, але nothings. Чи потрібно щось робити, щоб застосувати ці зміни?