पुशड और पॉपड कमांड आपकी हार्ड ड्राइव पर स्थानों के बीच त्वरित नेविगेशन के लिए निर्देशिकाओं को "बुकमार्क" करने में आपकी मदद करने के लिए बैश शेल की अंतर्निहित विशेषताएं हैं। आप पहले से ही महसूस कर सकते हैं कि टर्मिनल आपके कंप्यूटर को नेविगेट करने का एक असंभव तेज़ तरीका है; कुछ ही प्रेस में, आप अपनी हार्ड ड्राइव, अटैच्ड स्टोरेज, या नेटवर्क शेयर पर कहीं भी जा सकते हैं। लेकिन वह गति तब टूट सकती है जब आप खुद को निर्देशिकाओं के बीच आगे-पीछे करते हुए पाते हैं, या जब आप अपने फाइल सिस्टम में "खो" जाते हैं। ठीक यही समस्याएं हैं पुशड और पॉपड हल करने में आपकी मदद कर सकता है।
पुशड
सबसे बुनियादी तौर पर, पुशड बहुत कुछ cd . जैसा है . यह आपको एक डायरेक्टरी से दूसरी डायरेक्टरी में ले जाता है। मान लें कि आपके पास एक . नामक निर्देशिका है , जिसमें एक उपनिर्देशिका है जिसे दो . कहा जाता है , जिसमें एक उपनिर्देशिका है जिसे तीन . कहा जाता है , और इसी तरह। यदि आपकी वर्तमान कार्यशील निर्देशिका एक . है , फिर आप दो . पर जा सकते हैं या तीन या कहीं भी सीडी . के साथ आदेश:
$ pwd
one
$ cd two/three
$ pwd
three
आप पुशड . के साथ भी ऐसा ही कर सकते हैं :
$ pwd
one
$ pushd two/three
~/one/two/three ~/one
$ pwd
three
पुशड . का अंतिम परिणाम सीडी . के समान है , लेकिन एक अतिरिक्त मध्यवर्ती परिणाम है:पुशड अपनी गंतव्य निर्देशिका और अपने मूल स्थान को प्रतिध्वनित करें। यह आपका निर्देशिका स्टैक है , और यह वही है जो पुशड . बनाता है अद्वितीय।
ढेर
कंप्यूटर शब्दावली में स्टैक, तत्वों के संग्रह को संदर्भित करता है। इस आदेश के संदर्भ में, तत्व वे निर्देशिकाएं हैं जिन्हें आपने हाल ही में पुशड . का उपयोग करके देखा है आज्ञा। आप इसे इतिहास या ब्रेडक्रंब ट्रेल के रूप में सोच सकते हैं।
आप पुशड . के साथ अपने पूरे फाइल सिस्टम में स्थानांतरित कर सकते हैं; हर बार, आपके पिछले और नए स्थान स्टैक में जोड़े जाते हैं:
$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/five ~/one/two/three/four ~/one/two/three ~/one
स्टैक नेविगेट करना
एक बार जब आप एक स्टैक बना लेते हैं, तो आप इसे बुकमार्क्स या फास्ट-ट्रैवल वेपॉइंट्स के संग्रह के रूप में उपयोग कर सकते हैं। उदाहरण के लिए, मान लें कि एक सत्र के दौरान आप ~/one/two/three/चार/पांच के भीतर बहुत काम कर रहे हैं इस उदाहरण की निर्देशिका संरचना। आप जानते हैं कि आप एक . गए हैं हाल ही में, लेकिन आपको यह याद नहीं रहता कि यह आपके पुशड . में कहाँ स्थित है ढेर। आप +0 . के साथ अपना स्टैक देख सकते हैं (यह एक प्लस चिह्न है जिसके बाद एक शून्य है) तर्क, जो पुशड . बताता है अपने स्टैक में किसी निर्देशिका में नहीं बदलने के लिए, बल्कि पुशड . को भी संकेत देता है अपने वर्तमान स्टैक को प्रतिध्वनित करने के लिए:
$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five
वैकल्पिक रूप से, आप स्टैक को dirs . के साथ देख सकते हैं कमांड, और आप -v . का उपयोग करके प्रत्येक निर्देशिका के लिए अनुक्रमणिका संख्या देख सकते हैं विकल्प:
$ dirs -v
0 ~/one/two/three/four
1 ~/one/two/three
2 ~/one
3 ~/one/two/three/four/five
आपके स्टैक में पहली प्रविष्टि आपका वर्तमान स्थान है। आप इसकी पुष्टि कर सकते हैं pwd . के साथ हमेशा की तरह:
$ pwd
~/one/two/three/four
0 से शुरू (आपका वर्तमान स्थान और आपके स्टैक की पहली प्रविष्टि), दूसरा आपके स्टैक में तत्व ~/one . है , जो आपका वांछित गंतव्य है। आप +2 . का उपयोग करके अपने स्टैक में आगे बढ़ सकते हैं विकल्प:
$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/one
यह आपकी कार्यशील निर्देशिका को ~/one . में बदल देता है और स्टैक को भी स्थानांतरित कर दिया है ताकि आपका नया स्थान सामने हो।
आप अपने स्टैक में पीछे की ओर भी जा सकते हैं। उदाहरण के लिए, जल्दी से ~/एक/दो/तीन . तक पहुंचने के लिए उदाहरण आउटपुट को देखते हुए, आप पुशड . को ध्यान में रखते हुए एक-एक करके पीछे जा सकते हैं 0 से शुरू होता है:
$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
स्टैक में जोड़ना
आप इस तरह से अपने स्टैक को नेविगेट करना जारी रख सकते हैं, और यह आपकी हाल ही में देखी गई निर्देशिकाओं की एक स्थिर सूची बनी रहेगी। यदि आप एक निर्देशिका जोड़ना चाहते हैं, तो बस निर्देशिका का पथ प्रदान करें। यदि कोई निर्देशिका स्टैक में नई है, तो उसे सूची में वैसे ही जोड़ा जाता है जैसे आप अपेक्षा करते हैं:
$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
लेकिन अगर यह पहले से ही स्टैक में मौजूद है, तो इसे दूसरी बार जोड़ा जाता है:
$ pushd ~/one
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
जबकि स्टैक का उपयोग अक्सर उन निर्देशिकाओं की सूची के रूप में किया जाता है, जिन तक आप त्वरित पहुंच चाहते हैं, यह वास्तव में एक सच्चा इतिहास है कि आप कहां गए हैं। यदि आप स्टैक में अनावश्यक रूप से कोई निर्देशिका नहीं जोड़ना चाहते हैं, तो आपको +N . का उपयोग करना चाहिए और -N संकेतन।
निर्देशिका को स्टैक से हटाना
आपका ढेर, जाहिर है, अपरिवर्तनीय नहीं है। आप इसे पुशड . के साथ जोड़ सकते हैं या उसमें से popd . के साथ आइटम निकालें ।
उदाहरण के लिए, मान लें कि आपने अभी-अभी पुशड . का उपयोग किया है जोड़ने के लिए ~/एक अपने स्टैक में, ~/one . बनाना आपकी वर्तमान कार्यशील निर्देशिका। पहला (या "शून्य," यदि आप चाहें तो) तत्व को निकालने के लिए:
$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
$ pwd
~/one
बेशक, आप 0:
. पर अपनी गिनती शुरू करते हुए किसी भी तत्व को हटा सकते हैं$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/one
आप पॉपड . का भी उपयोग कर सकते हैं अपने स्टैक के पीछे से, फिर से 0 से शुरू करते हुए। उदाहरण के लिए, अपने स्टैक से अंतिम निर्देशिका को निकालने के लिए:
$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five
जब इस तरह उपयोग किया जाता है, पॉपड आपकी कार्यशील निर्देशिका को नहीं बदलता है। यह केवल आपके स्टैक में हेरफेर करता है।
पॉप के साथ नेविगेट करना
popd . का डिफ़ॉल्ट व्यवहार , बिना किसी तर्क के, अपने स्टैक से पहले (शून्य) आइटम को हटाना है और अगले आइटम को अपनी वर्तमान कार्यशील निर्देशिका बनाना है।
यह एक त्वरित-परिवर्तन कमांड के रूप में सबसे उपयोगी है, उदाहरण के लिए, जब आप दो अलग-अलग निर्देशिकाओं में काम कर रहे होते हैं और बस एक पल के लिए किसी अन्य स्थान पर जाने की आवश्यकता होती है। यदि आपको विस्तृत इतिहास की आवश्यकता नहीं है, तो आपको अपनी निर्देशिका स्टैक के बारे में सोचने की आवश्यकता नहीं है:
$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one
आपको पुशड . का उपयोग करने की भी आवश्यकता नहीं है और पॉपड तेजी से उत्तराधिकार में। यदि आप पुशड . का उपयोग करते हैं एक अलग स्थान पर जाने के लिए, फिर तीन घंटे के लिए एक बग का पीछा करते हुए या शोध करते हुए विचलित हो जाते हैं, आप पाएंगे कि आपकी निर्देशिका स्टैक धैर्यपूर्वक प्रतीक्षा कर रही है (जब तक कि आप अपना टर्मिनल सत्र समाप्त नहीं कर लेते):
$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one
पुश और वास्तविक दुनिया में पॉपड
पुशड और पॉपड आदेश आश्चर्यजनक रूप से उपयोगी हैं। एक बार जब आप उन्हें सीख लेते हैं, तो आप उन्हें अच्छे उपयोग में लाने के बहाने खोज लेंगे, और आप निर्देशिका स्टैक की अवधारणा से परिचित हो जाएंगे। पुशड . के साथ सहज महसूस करना क्या मुझे समझने में मदद मिली गिट स्टैश , जो पूरी तरह से पुशड . से संबंधित नहीं है लेकिन वैचारिक अमूर्तता में समान।
पुशड का उपयोग करना और पॉपड शेल स्क्रिप्ट में आकर्षक हो सकता है, लेकिन आम तौर पर, उनसे बचना शायद सबसे अच्छा है। वे बैश और ज़श के बाहर पोर्टेबल नहीं हैं, और जब आप किसी स्क्रिप्ट को फिर से पढ़ रहे हों तो वे मोटे हो सकते हैं (pushd +3 cd $HOME/$DIR/$TMP . से कम स्पष्ट है या समान)।
इन चेतावनियों के अलावा, यदि आप एक नियमित बैश या Zsh उपयोगकर्ता हैं, तो आपको पुशड आज़माना चाहिए और करना चाहिए और पॉपड ।