निर्भर करता है। में zshआप कॉन्फ़िगर कर सकते हैं cdढेर स्वचालित रूप से निर्देशिका पर पुराने निर्देशिका पुश करने के लिए है, लेकिन यह डिफ़ॉल्ट सेटिंग नहीं है।
जहां तक मैं zshडिफ़ॉल्ट सेटिंग्स के साथ बता सकता हूं , इसके समान व्यवहार करता है bash:
cd somedir
- करने के लिए निर्देशिका बदलें
somedir
- में मूल निर्देशिका को बचाओ
OLDPWD
- सेट
PWD="somedir"
- निर्देशिका स्टैक के शीर्ष तत्व को बदलें (जैसा कि द्वारा दिखाया गया है
dirs) somedir(स्टैक पर तत्वों की संख्या नहीं बदलती है)।
cd -:
- करने के लिए निर्देशिका बदलें
$OLDPWD
- की अदला-बदली मूल्यों
PWDऔरOLDPWD
- प्रतिबिंबित करने के लिए निर्देशिका स्टैक के शीर्ष तत्व को संशोधित करें (नया)
PWD
pushd somedir:
- करने के लिए निर्देशिका बदलें
somedir
- में मूल निर्देशिका सहेजें
OLDPWD
- सेट
PWD="somedir"
somedirनिर्देशिका स्टैक पर धक्का (इसे एक तत्व द्वारा विस्तारित करना)
popd:
- में मूल निर्देशिका सहेजें
OLDPWD
- निर्देशिका स्टैक का पहला तत्व निकालें
- निर्देशिका स्टैक के नए शीर्ष तत्व के लिए निर्देशिका बदलें
PWDनिर्देशिका स्टैक के नए शीर्ष तत्व पर सेट करें
नोट: चाहे वर्तमान कार्यशील निर्देशिका निर्देशिका ढेर के बीच अलग है का एक तत्व माना जाता है zshऔर bash। मैंने bashउपरोक्त सूचियों के लिए संदर्भ के रूप में उपयोग किया ।
में bashवर्तमान कार्यशील निर्देशिका निर्देशिका ढेर के शीर्ष तत्व माना जाता है। man 1 bashकहते हैं:
pushd [-n] [dir]
[…] dirशीर्ष पर निर्देशिका स्टैक में जोड़ता है, यह नई वर्तमान कार्यशील निर्देशिका बनाता है जैसे कि यह cdबिलिन के तर्क के रूप में आपूर्ति की गई थी । [...]
मुद्रण DIRSTACK( echo ${dirstack[@]}) पुष्टि करता है कि पहला तत्व इसके समान है $PWD।
में zshवर्तमान कार्यशील निर्देशिका निर्देशिका ढेर का हिस्सा (लेकिन अभी भी साथ नहीं दिखाया है dirs)। man 1 zshbuiltinsकहते हैं:
pushd [ -qsLP ] [ arg ]
[…] वर्तमान निर्देशिका को बदलें, और निर्देशिका स्टैक पर पुरानी वर्तमान निर्देशिका को धक्का दें। पहले रूप में, वर्तमान निर्देशिका को arg में बदलें। [...]
मुद्रण dirstack( echo ${dirstack[@]}) और इसकी तुलना आउटपुट से dirsकरनी चाहिए , यह दर्शाता है कि यह PWD`प्यास का हिस्सा नहीं है।
दोनों गोले dirsमें वर्तमान कार्य निर्देशिका को पहले तत्व के रूप में प्रिंट करता है। इसके अलावा दोनों गोले में, सूचकांक के साथ निर्देशिका स्टैक तत्व 1उस निर्देशिका को संदर्भित करता है जो अंतिम से पहले चालू था pushd। ऐसा इसलिए है क्योंकि सरणियों में है zshआमतौर पर से गिने जा रहे हैं 1, जबकि वे से गिने जा रहे हैं 0में bash। इसलिए थोड़ा व्यावहारिक अंतर है
जैसा कि ऊपर कहा गया है, इस व्यवहार को संशोधित किया जा सकता है zsh।
यदि आप AUTO_PUSHDविकल्प सेट करते हैं तो zsh( setopt autopushd) cd somedirऐसा व्यवहार करता है pushd somedir, पिछली निर्देशिका को स्वचालित रूप से निर्देशिका स्टैक पर धकेल दिया जाता है। शायद आपकी मशीन पर भी यही स्थिति है। आप उन setoptविकल्पों की एक सूची प्राप्त करने के लिए दौड़ सकते हैं जो डिफ़ॉल्ट तरीके से सेट नहीं हैं। देखें, autopushdसूची में दिखाई देता है या नहीं ।
लेकिन यह ऐसा cd -व्यवहार करने के लिए संशोधित नहीं करता है popd। इसके बजाय यह सिर्फ $PWDडायरेक्टरी स्टैक पर धकेलता है और डायरेक्टरी को बदलता है $OLDPWD। इसका मतलब है कि बार-बार कॉल करने cd -से वास्तव में डायरेक्टरी स्टैक ( ($PWD $OLDPWD $PWD $OLDPWD $PWD …)) बढ़ेगा । यदि यह वास्तव में popdआपके सिस्टम पर ठीक वैसा ही व्यवहार करता है, तो मैं सुझाव cdदूंगा कि क्या वास्तव में बिलिन ( whence -v cd) है; यह संभव है कि इसकी जगह एक उपनाम या फ़ंक्शन हो।
चूंकि निर्देशिका स्टैक सक्षम होने के बजाय तेज़ी से बढ़ेगा AUTO_PUSHD, आप पैरामीटर DIRSTACKSIZEको इच्छित अधिकतम आकार में सेट करके इसके आकार को सीमित कर सकते हैं ।
आप PUSHD_IGNORE_DUPSविकल्प सेट करके डुप्लिकेट को भी रोक सकते हैं ।
अधिक विकल्पों के लिए मैनुअल पर एक नज़र है ।
cdशेल चर का उपयोगOLDPWDपिछली निर्देशिका में करता है, औरcd -अनुवाद करता हैcd "$OLDPWD"।