Wrapping cd
, perintah yang ada, tidak direkomendasikan.
Solusi yang lebih universal adalah mendefinisikan chpwd
pengait kustom di Bash. (Menurut tag pertanyaan ini, saya menganggap Anda menggunakan Bash)
Tidak ada sistem kait lengkap yang dirancang di Bash jika dibandingkan dengan kerang modern lainnya. PROMPT_COMMAND
variabel digunakan sebagai fungsi kait, yang setara dengan precmd
kait di ZSH, fish_prompt
di Fish. Untuk saat ini, ZSH adalah satu-satunya cangkang yang saya kenal yang memiliki chpwd
kait bawaan.
PROMPT_COMMAND
Jika diset, nilai ditafsirkan sebagai perintah untuk dijalankan sebelum pencetakan setiap prompt utama ($ PS1).
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Bash-Variables
chpwd
Hubungkan Bash
Trik disediakan untuk menyiapkan chpwd
kait setara di Bash berdasarkan 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}"
Karena kita mendeteksi PWD
perubahan secara langsung, solusi bekerja dengan cd
, pushd
, dan popd
.
Catatan : Perbedaan utama antara chpwd
implementasi kami di Bash dan chpwd
di ZSH adalah, PROMPT_COMMAND
tidak didukung dalam shell Bash non-interaktif.
Pemakaian
_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"
Sumber: Buat Hook Setara chpwd di Bash dari intisari saya.
Bagi siapa pun yang menginginkan jawaban untuk ZSH. Gunakan chpwd
kait di ZSH. Jangan mendefinisikan chpwd()
fungsi secara langsung. Lebih detail di sini .
echo "Testing..."
output tepat di atas if, tetapi tidak ada. Apakah saya perlu melakukan sesuatu untuk menerapkan perubahan ini?