रैपिंग cd, एक मौजूदा कमांड, अनुशंसित नहीं है।
एक अधिक सार्वभौमिक समाधान chpwdबैश में एक कस्टम हुक को परिभाषित करेगा । (इस सवाल के टैग के अनुसार, मुझे लगता है कि आप बैश का उपयोग कर रहे हैं)
अन्य आधुनिक गोले की तुलना में बाश में डिजाइन किया गया एक पूर्ण हुक सिस्टम नहीं है। PROMPT_COMMANDचर का उपयोग एक हुक फ़ंक्शन के रूप में किया जाता है, जो मछली precmdमें ज़ेडएसएच में हुक के बराबर होता है fish_prompt। कुछ समय के लिए, 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बैश और chpwdज़ेडएस में हमारे कार्यान्वयन के बीच मुख्य अंतर PROMPT_COMMANDगैर-इंटरैक्टिव बैश शेल में समर्थित नहीं है।
प्रयोग
_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 समतुल्य हुक बनाएँ ।
किसी के लिए भी ZSH का जवाब चाहिए। chpwdZSH में हुक का उपयोग करें । सीधे कार्य को परिभाषित न करें chpwd()। यहाँ और अधिक विस्तार ।
echo "Testing..."if, लेकिन nothings आउटपुट के ठीक ऊपर जोड़ा है । क्या मुझे इन परिवर्तनों को लागू करने के लिए कुछ करने की आवश्यकता है?