cd
ไม่แนะนำให้ใช้คำสั่งตัดคำที่มีอยู่
โซลูชันที่เป็นสากลมากขึ้นจะกำหนดchpwd
เบ็ดที่กำหนดเองใน Bash (ตามแท็กของคำถามนี้ฉันคิดว่าคุณกำลังใช้ Bash)
ไม่มีระบบเบ็ดที่สมบูรณ์ซึ่งออกแบบใน Bash เมื่อเทียบกับกระสุนสมัยใหม่อื่น ๆ PROMPT_COMMAND
ตัวแปรถูกใช้เป็นฟังก์ชั่น hook ซึ่งเทียบเท่ากับprecmd
hook ใน ZSH fish_prompt
ใน Fish ในขณะนี้ ZSH เป็นเปลือกเดียวที่ฉันรู้ว่ามีchpwd
เบ็ดในตัว
PROMPT_COMMAND
หากตั้งค่าค่าจะถูกตีความเป็นคำสั่งให้ดำเนินการก่อนพิมพ์พรอมต์หลักแต่ละรายการ ($ PS1)
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variables
chpwd
ตะขอในทุบตี
เคล็ดลับที่มีให้กับการติดตั้งตะขอเทียบเท่าในทุบตีอยู่บนพื้นฐานของchpwd
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
implementaion ของเราใน Bash และchpwd
ใน ZSH PROMPT_COMMAND
คือไม่ได้รับการสนับสนุนใน Bash shell ที่ไม่ต้องมีการโต้ตอบ
การใช้
_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 Equivalent Hook ใน Bashจากส่วนสำคัญของฉัน
สำหรับทุกคนที่ต้องการคำตอบสำหรับ ZSH ใช้chpwd
เบ็ดใน ZSH อย่ากำหนดchpwd()
ฟังก์ชั่นโดยตรง รายละเอียดเพิ่มเติมที่นี่
echo "Testing..."
ด้านบนของ if, แต่ไม่ได้เอาท์พุท ฉันต้องทำอะไรเพื่อใช้การเปลี่ยนแปลงเหล่านี้หรือไม่