Обтекание 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"
Источник: Создать chvwd Equivalent Hook in Bash из моей сущности.
Для всех, кто хочет получить ответ для ZSH. Используйте chpwd
крючок в ZSH. Не определяйте chpwd()
функцию напрямую. Более подробно здесь .
echo "Testing..."
чуть выше вывода if, но ничего. Нужно ли что-то делать, чтобы применить эти изменения?