निर्भर करता है। में 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"
।