zsh कुछ अच्छा प्रदान करता है हुक कार्यों सहित chpwd
एक समारोह चल उपयोगकर्ता निर्देशिका में परिवर्तन के बाद के लिए।
# zsh only
function greet() { echo 'hi'; }
chpwd_functions+=("greet")
cd .. # hi
pushd # hi
popd # hi
मुझे लगता है कि कोस में अनुकरण करने की कोशिश कर रहा हूँ।
प्रतिबंध:
- यह संवादात्मक और गैर-संवादात्मक दोनों प्रकार के गोले में काम करना चाहिए, जो मुझे लगता है कि इसका मतलब है कि यह किसी चीज़ पर भरोसा नहीं कर सकता है
$PROMPT_COMMAND
- इसे फिर से परिभाषित नहीं किया जा सकता है
cd
, क्योंकि मैं चाहता हूं कि यह किसी भी कमांड के लिए काम करे जो निर्देशिकाओं को बदलता है (उदाहरण के लिए,pushd
औरpopd
) - यह चलाना चाहिए के बाद , उपयोगकर्ता के आदेश तो
trap "my_function" DEBUG
, नहीं, काम करता है जब तक कि मैं किसी भी तरह वहाँ में कह सकते हैं "पहली चलाने$BASH_COMMAND
, हम फंस तो भी ऐसा कर ..." मुझे लगता है कि मैं स्वत: चल रहा से बचने कर सकते की$BASH_COMMAND
यदिextdebug
सक्षम किया गया है और ट्रैप फ़ंक्शन 1 लौटाता है, लेकिन मुझे नहीं लगता कि मैं मजबूर करना चाहता हूंextdebug
, और1
एक सफल (लेकिन संशोधित) कमांड के लिए वापस लौटना गलत लगता है।
अंतिम भाग - "उपयोगकर्ता की आज्ञा के बाद चलाएं" - जो वर्तमान में मुझे स्टम्प्ड किया गया है। अगर मैं प्रत्येक कमांड के बाद एक फ़ंक्शन चला सकता हूं , तो मैं यह जांच कर सकता हूं कि क्या हमने पिछली बार जांच के बाद निर्देशिका बदल दी है। उदाहरण के लिए:
function check_pwd() {
# true in a new shell (empty var) or after cd
if [ "$LAST_CHECKED_DIR" != "$PWD" ]; then
my_function
fi
LAST_CHECKED_DIR=$PWD
}
क्या मैं सही रास्ते पर हूँ, या एक बेहतर तरीका है? उपयोगकर्ता निर्देशिकाओं को बदलने के बाद मैं कैसे bash में कमांड चला सकता हूं?
cd
रूप से एक सिद्धांत के रूप में पुनर्परिभाषित नहीं किया है।
MYBIN=$( cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P )
कृपया उन विश्वसनीय यूनिक्स कमांड को न बदलें।
bash
, जो सभी ऑपरेटिंग सिस्टमों पर समान रूप से काम करता है।
cd
,pushd
औरpopd
? डायरेक्टरी बदलने के और कितने तरीके हैं?