Gói cd
, một lệnh hiện có, không được khuyến khích.
Một giải pháp phổ quát hơn sẽ là xác định một chpwd
móc tùy chỉnh trong Bash. (Theo các thẻ của câu hỏi này, tôi giả sử bạn đang sử dụng Bash)
Không có một hệ thống móc hoàn chỉnh nào được thiết kế ở Bash khi so sánh với các loại đạn pháo hiện đại khác. PROMPT_COMMAND
biến được sử dụng như một hàm hook, tương đương với precmd
hook trong ZSH, fish_prompt
trong Fish. Hiện tại, ZSH là lớp vỏ duy nhất tôi biết có tích hợp chpwd
móc.
PROMPT_COMMAND
Nếu được đặt, giá trị được hiểu là một lệnh để thực thi trước khi in từng dấu nhắc chính ($ PS1).
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variabled
chpwd
Móc ở Bash
Một mẹo được cung cấp để thiết lập một chpwd
hook tương đương trong Bash dựa trên 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}"
Kể từ khi chúng tôi phát hiện PWD
sự thay đổi trực tiếp, giải pháp làm việc với cd
, pushd
và popd
.
Lưu ý : Sự khác biệt chính giữa chpwd
triển khai của chúng tôi trong Bash và chpwd
trong ZSH là, PROMPT_COMMAND
không được hỗ trợ trong trình bao Bash không tương tác.
Sử dụng
_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"
Nguồn: Tạo chpwd Hook Equivalent Hook trong Bash từ ý chính của tôi.
Đối với bất cứ ai muốn một câu trả lời cho ZSH. Sử dụng chpwd
móc trong ZSH. Đừng xác định chpwd()
chức năng trực tiếp. Chi tiết hơn ở đây .
echo "Testing..."
ngay phía trên if, nhưng thông báo đầu ra. Tôi có cần làm gì để áp dụng những thay đổi này không?