मैं पुशड और पॉपड कमांड का उपयोग कैसे करूं?


332

दोनों के व्यावहारिक उपयोग क्या हैं pushdऔर popdजब इन दोनों आदेशों का उपयोग करने का एक फायदा है cdऔर cd -?

संपादित करें : मैं इन दोनों आदेशों के लिए उपयोग के कुछ व्यावहारिक उदाहरणों की तलाश कर रहा हूं या निर्देशिकाओं के साथ ढेर रखने के कारणों (जब आपके पास टैब पूरा होता है,, cd -छोटा करने के लिए उपनाम cd ..आदि)।

जवाबों:


304

pushd, popdऔर dirsशेल बिल्डिंग्स हैं जो आपको निर्देशिका स्टैक में हेरफेर करने की अनुमति देते हैं । इसका उपयोग निर्देशिकाओं को बदलने के लिए किया जा सकता है लेकिन उस निर्देशिका में वापस आ सकते हैं जहाँ से आप आए थे।

उदाहरण के लिए

निम्नलिखित निर्देशिकाओं के साथ शुरुआत करें:

$ ls
dir1  dir2  dir3

dir1 पर जोर देना

$ pushd dir1
~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir1 ~/somedir

dirsकमांड पुष्टि करती है कि स्टैक पर अब हमारे पास 2 निर्देशिकाएं हैं। dir1और मूल dir, somedir

pushd to ../dir3 (क्योंकि हम अभी अंदर dir1हैं)

$ pushd ../dir3
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ dirs
~/somedir/dir3 ~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir3

dirsदिखाता है कि स्टैक में अब हमारे पास 3 डाइरेक्टरी हैं। dir3, dir1और somedir। दिशा को नोटिस करें। हर नई निर्देशिका को बाईं ओर जोड़ा जा रहा है। जब हम निर्देशिका को बंद करना शुरू करते हैं, तो वे बाईं ओर से भी आएंगे।

निर्देशिकाओं को मैन्युअल रूप से बदलें ../dir2

$ cd ../dir2
$ pwd
/home/saml/somedir/dir2
$ dirs
~/somedir/dir2 ~/somedir/dir1 ~/somedir

अब डायरेक्टरी पॉप करना शुरू करें

$ popd
~/somedir/dir1 ~/somedir
$ pwd
/home/saml/somedir/dir1

सूचना हम वापस करने के लिए popped dir1

फिर से पॉप ...

$ popd
~/somedir    
$ pwd
/home/saml/somedir

और हम, जहां हम शुरू कर दिया वापस आ गए हैं somedir

थोड़ा भ्रमित हो सकते हैं, लेकिन स्टैक का प्रमुख वह निर्देशिका है जो आप वर्तमान में हैं। इसलिए जब हम वापस आते हैं somedir, तब भी dirsपता चलता है:

$ dirs
~/somedir

हमारा ढेर खाली है।

$ popd
bash: popd: directory stack empty

19
धन्यवाद, मैं पूरी तरह से स्टैक की अवधारणा को समझता हूं और यह कैसे काम करता है। हालांकि, मैं निर्देशिकाओं के साथ स्टैक रखने के लिए कुछ व्यावहारिक कारणों की तलाश कर रहा हूं (जब आपके पास टैब पूरा हो cd -,, उपनाम छोटा करने के लिए cd .., आदि)।
सिंटगमा

21
मैं अक्सर उपयोग pushdऔर popdलिपियों में / ग वे मेरे याद करने के लिए मैं कहाँ से आ रहा था होने से बचाने के लिए, मैं हमेशा बस कर सकते हैं ख popdमैं कहाँ आ गया से वापस पाने के लिए। मैं आमतौर पर popd >/dev/null 2>&1इसे चुप कराने के लिए करता हूं । मैं अपने खोल में cd- का उपयोग रोज करता हूं। इस लेख में कुछ और समय बचाने के टिप्स भी दिए गए हैं: thegeekstuff.com/2008/10/…
SLM

2
@ ग्रेट - कोई भी नहीं जो मैं गर्भ धारण कर सकता हूं।
slm

4
@Garrett @slm चूंकि cd -केवल अंतिम निर्देशिका को ट्रैक करता है, मुझे लगता है कि यदि आप किसी फ़ंक्शन को कहते हैं जो आंतरिक रूप से निर्देशिका को बदलता है, तो समस्याएँ होना संभव है। उस स्थिति में, फ़ंक्शन आपके वर्तमान निर्देशिका में रीसेट करना समाप्त कर देगा, वह निर्देशिका नहीं जिसे आप वापस पॉप करना चाहते हैं। pushd / popd सबसे सुरक्षित तरीका है। नोट: मैंने अपने सिद्धांत का परीक्षण नहीं किया है।
बाइनरी फ़ाइल

5
~/somedir/dir3पहले के बाद वापस क्यों नहीं जा रहे हैं popd?
ज़ियांग

198

नहीं है के लिए एक वास्तव में उपयोगी उपयोग के मामले pushdऔर popdआदेश एक साथ कई फ़ोल्डरों के साथ काम करने के लिए।

आप स्टैक को बहुत आसानी से नेविगेट कर सकते हैं, क्योंकि यह एनुमरेटेड है। मतलब, आपके पास काम के दौरान आपके निपटान में कई कार्यशील फ़ोल्डर हो सकते हैं।

नीचे एक साधारण उदाहरण देखें।


सबसे पहले, आइए उदाहरण फ़ोल्डर संरचना बनाते हैं।

    user@vb:~$ mkdir navigate
    user@vb:~/navigate$ mkdir dir1
    user@vb:~/navigate$ mkdir dir2
    user@vb:~/navigate$ mkdir dir3

तब आप अपने सभी फ़ोल्डरों को स्टैक में जोड़ सकते हैं:

    user@vb:~/navigate$ pushd dir1/
    ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir1$ pushd ../dir2/
    ~/navigate/dir2 ~/navigate/dir1 ~/navigate
    user@vb:~/navigate/dir2$ pushd ../dir3/
    ~/navigate/dir3 ~/navigate/dir2 ~/navigate/dir1 ~/navigate

आप इसे देख सकते हैं:

    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir2
     2  ~/navigate/dir1
     3  ~/navigate

सुरक्षित रूप से नेविगेट करने के लिए, आपको अंतिम (शून्य) फ़ोल्डर को दो बार जोड़ना होगा, क्योंकि यह हमेशा फिर से लिखा जाएगा:

    user@vb:~/navigate/dir3$ pushd .
    user@vb:~/navigate/dir3$ dirs -v
     0  ~/navigate/dir3
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

अब, आप इन फ़ोल्डरों के माध्यम से चारों ओर कूद सकते हैं और फ़ोल्डरों के लिए उपनाम के साथ स्टैक के साथ काम कर सकते हैं। मुझे लगता है कि निम्नलिखित भाग स्वयं व्याख्यात्मक है:

    user@vb:~/navigate/dir3$ cd ~4
    user@vb:~/navigate$ dirs -v
     0  ~/navigate
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate$ cd ~3
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate
    user@vb:~/navigate/dir1$ touch text.txt
    user@vb:~/navigate/dir1$ cp text.txt ~2
    user@vb:~/navigate/dir1$ ls ~2
    text.txt
    user@vb:~/navigate/dir1$ dirs -v
     0  ~/navigate/dir1
     1  ~/navigate/dir3
     2  ~/navigate/dir2
     3  ~/navigate/dir1
     4  ~/navigate

अतिरिक्त टिप के लिए कुछ उपनाम बनाने के लिए है dirs -v

उदाहरण के लिए:

# In ~/.bashrc
alias dirs="dirs -v"

28
और आप ढेर को साफ कर सकते हैंdirs -c
जून मुराकामी

19
वास्तव में कुछ व्यावहारिक उदाहरण देने के लिए +1। यह देखना आसान है कि मैन पेज से पुशड / पॉपड क्या करते हैं, लेकिन पहली बार डायर और सीडी ~ स्पष्ट नहीं हैं।
स्क्रिब्बलमेकर

आप भी इस तरह के वर्कफ़्लो के लिए fasd की तरह एक समाधान का उपयोग कर सकते हैं, हालांकि
WuTheFasThat

CDPATH की स्थापना की तुलना में अधिक क्षणिक उपयोग के मामले के लिए यह बेहतर है?
रफब्री

2
@ जान, एक शॉट में 3 डायरेक्टरी बनाने के लिए "mkdir dir {1,2,3}" है।
बुलट एम।

39

डायर स्टैक का उपयोग करने के लिए एक सरल उपयोग मामला जो आप सिर्फ सीडी द्वारा नहीं कर सकते हैं वह है:

pushd .dirsस्टैक के लिए वर्तमान निर्देशिका XX जोड़ता है । बाद में, आप का उपयोग कर के चारों ओर ले जा सकते हैं cd, और XX पर वापस जाने के लिए आप केवल इस बात की popdपरवाह किए बिना कि "बहुत दूर" आप निर्देशिका ट्री में हैं (कई स्तरों, बग़ल में आदि पर कूद सकते हैं)। विशेष रूप से बैश स्क्रिप्ट में उपयोगी है।


2
मुझे लगता है कि यह वह सुविधा है जिसका मैं सबसे अधिक बार लाभ उठाता हूं। क्योंकि pushd/ popdसे स्वतंत्र काम करते हैं cd, आप उनकी तुलना में अधिक स्थिर बुकमार्क के रूप में उपयोग कर सकते हैं cd -
गॉर्डन बीन

मेरे लिए यह सच नहीं है। हर बार जब मैं सीडी का उपयोग करता हूं तो मेरे स्टैक में बदलाव होता है।
हरेंद्र सिंह

ओह, जो zsh का उपयोग करने के लिए coz था, जब मैं बैश में बदलता हूं, तो यह ठीक काम करता है
हरेंद्र सिंह

4
यह केवल मूल उत्तर है क्योंकि cd -, IMO के साथ तुलना की जाती है। के रूप में कि क्या धक्का फू; <यादृच्छिक डायर बदलना>; popd = foo से अधिक सार्थक है; सीडी $ ए; <यादृच्छिक डायर बदलना>; cd $ a ... लिपियों के लिए मैं पूर्व (pushd) में एक छोटी सी वाक्यगत सुविधा देख सकता हूं, लेकिन बाद में स्पष्टता में भारी सुधार ([स्पष्ट] चर!)। एक संवादात्मक सत्र के लिए, मुझे लगता है कि मैं सिर्फ यह मानूंगा कि मेरी निर्देशिका पदानुक्रम पहले स्थान पर ठीक से आयोजित की गई थी, और अगर मैं बस खो गया cd ~ / back / to / स्पष्ट / पथ।
Jan Kyu Peblik

9

pushdऔर popdआप ढेर पर निर्देशिकाओं में हेरफेर करने की अनुमति देते हैं।

जब आप pushdनिर्देशिका करते हैं, तो आप वर्तमान निर्देशिका को स्टैक पर रखते हैं और निर्देशिका को पैरामीटर के रूप में निर्दिष्ट एक में बदलते हैं।

popd स्टैक पर निर्देशिका में वापस जाने की अनुमति देगा।

यदि आप दोहराते हैं, तो डायरेक्टरी ट्रैवर्सल संरक्षित की तरह हो जाएगा और आप जो उन्हें सहेजे थे, उससे उलटे क्रम में सहेजे गए डायरेक्ट्री पर वापस आ सकते हैं।


6

के लिए पार्टी , मूल रूप से: बजाय सीडी एक का उपयोग करने का उपयोग कर सकते हैं pushdका दौरा किया निर्देशिका के इतिहास सहेजा जाता है: व्यावहारिक उपयोग के साथ directorys बदलने के लिए, (सही: खड़ी) और एक उन दोनों के बीच स्विच कर सकते हैं

pushd /home; pushd /var; pushd log

स्टैक का उपयोग dirsऔर आसान नेविगेशन देखने के लिए ("स्टैक-एंट्रीज़" की संख्या का उपयोग करने के लिए:

dirs -v

आउटपुट:

me@myhost:/home$ dirs -v
 0  /home
 1  /var
 2  /tmp

अब इन नंबरों का उपयोग करें cdऔर ~जैसे:

cd ~1

लेकिन अब इन नंबरों को फिर से जोड़ दिया गया है और स्थिति "0" बदल जाएगी, इसलिए बस pushdशीर्ष स्थिति के लिए निर्देशिका को दो बार (या स्थिति 0 पर एक डमी का उपयोग करें):

me@myhost:/home$ dirs -v
 0  /home
 1  /home
 2  /var
 3  /tmp

अब 1..3 वहाँ स्थिति रखेगा

(वर्तमान निर्देशिका को स्टैक से जारी करने के लिए / इतिहास के उपयोग से हटाने के लिए popd)


5

एक व्यावहारिक उपयोग जो मैंने पाया है वह है पुशड और पॉपड का उपयोग करके निर्देशिकाओं के बीच टॉगल करना।

मान लीजिए कि हमारे पास दो निर्देशिकाएं dir1 और dir2 हैं और मुझे उनके बीच लगातार कुछ xyz कारणों से टॉगल करने की आवश्यकता है।

वर्तमान में मैं somedir में हूं, जिसमें दो निर्देशिकाएं हैं dir1और dir2:

alcohol@alcohol-machine:~/somedir$ ls
dir1  dir2
alcohol@alcohol-machine:~/somedir$ 

अब मैं स्विच ऑन करता हूं dir1

alcohol@alcohol-machine:~/somedir$ cd dir1
alcohol@alcohol-machine:~/somedir/dir1$ pwd
/home/alcohol/somedir/dir1

अब मैं dir1स्टैक में जोड़ूंगा और स्विच करूंगाdir2

alcohol@alcohol-machine:~/somedir/dir1$ pushd /home/alcohol/somedir/dir2
~/somedir/dir2 ~/somedir/dir1
alcohol@alcohol-machine:~/somedir/dir2$

जैसा कि आप देख सकते हैं, मेरे पास अब है dir2और dir1स्टैक पर और मैं वर्तमान में हूं dir2

अब वापस स्विच करने के लिए dir1, मैं चलाऊंगा pushd || popd

alcohol@alcohol-machine:~/somedir/dir2$ pushd || popd
~/somedir/dir1 ~/somedir/dir2
alcohol@alcohol-machine:~/somedir/dir1$ 

वोइला, मैं dir1 में हूं और मेरे पास dir1 और dir2 स्टैक पर हैं। Dir2 पर वापस जाने के लिए फिर से चलाएँpushd || popd

alcohol@alcohol-machine:~/somedir/dir2$ pushd || popd
~/somedir/dir1 ~/somedir/dir2
alcohol@alcohol-machine:~/somedir/dir1$ 

यह निर्देशिकाओं के बीच टॉगल करने का एक सरल तरीका है। अब, आप जान सकते हैं कि मुझे निर्देशिकाओं के बीच टॉगल करने की आवश्यकता क्यों है? वैसे एक उपयोग का मामला है, जब मैं वेब एप्लिकेशन पर काम करता हूं, तो मेरे पास एक निर्देशिका में मेरी फ़ाइल होती है और दूसरी निर्देशिका में मेरी लॉग फ़ाइल होती है। अक्सर एप्लिकेशन को डीबग करते समय, मुझे लॉग निर्देशिका के बीच स्विच करना पड़ता है, नवीनतम लॉग की जांच करने के लिए और फिर कुछ बदलाव करने और एप्लिकेशन बनाने के लिए वापस निर्देशिका में स्विच करना पड़ता है।


11
(1) सवाल पूछता है, " pushdऔर popdअधिक के फायदे क्या हैं cd -?" आपने स्पष्ट रूप से उस प्रश्न का उत्तर नहीं दिया है, जैसा आप बता रहे हैं कि वास्तव में क्या cd -होता है। (२) कहने की बात क्या है pushd || popd? हां, मुझे पता है कि cmdA || cmdBइसका मतलब रन है cmdAऔर अगर यह विफल रहता है, तो दौड़ें cmdB। मैं पूछ रहा हूं कि इस संदर्भ में क्या अच्छा है।  pushdबिना किसी तर्क के "निर्देशिका स्टैक पर शीर्ष दो तत्वों को स्वैप करें"; यदि निर्देशिका निर्देशिका स्टैक पर एकमात्र तत्व है तो यह विफल हो जाता है। उस स्थिति में, popdअसफल भी होगा।
जी-मैन

3
मैं विश्वास नहीं कर सकता कि किसी ने भी आपको उकसाया नहीं है Lifesaver! क्या अद्भुत हैक है। धन्यवाद। टॉगलिंग, मेरी राय में, के लिए उपयोग मामला pushdऔर popd
सन्नी

3
pushd || popdनिर्देशिकाओं के बीच टॉगल करने की तुलना में दो अलग-अलग तरीके हैं जिनकी आवश्यकता बहुत कम टाइपिंग के pushdसाथ होती है : कोई तर्क के साथ ऐसा नहीं करता है। cd -स्पष्ट रूप से अंतिम निर्देशिका पर वापस जाने के लिए पूरी तरह से मौजूद है। इसके अतिरिक्त, यह सवाल pushdओवर के लाभ के लिए पूछा गया cd -, जबकि यह उत्तर स्पष्ट रूप से नुकसान के अलावा और कुछ नहीं प्रदान करता है: अधिक टाइपिंग।
बेंजामिन रिग्स

बगैर किसी बहस के, पुशड शीर्ष दो निर्देशिकाओं का आदान-प्रदान करता है और रिटर्न 0. आपको || popdटॉगल की आवश्यकता क्यों है ? कृपया समझाएँ। (क्या अभी पर्याप्त धक्का नहीं है?)
जॉनी वोंग

@ सूनी बस cd -दो निर्देशिकाओं के बीच टॉगल करने के लिए उपयोग करें। इसके अतिरिक्त cdआपके घर निर्देशिका में कोई तर्क नहीं है।
स्टीव

2

सीधे शब्दों में कहें - जब आपको 2 से अधिक निर्देशिकाओं के बीच नेविगेट करने की आवश्यकता होती है, तो आमतौर पर कई बार आगे और पीछे, जैसे cd -कि इसे 2 फ़ोल्डरों से परे कुछ भी नहीं काटेंगे।

इसलिए, उदाहरण के लिए, अपने बफ़र के इतिहास को देखने या पिछले मार्ग को पूरा करने के बजाय पिछले लंबे रास्तों के साथ फिर से आने की कोशिश करने के बजाय, आप बस महत्वपूर्ण लोगों को ढेर कर देते हैं और यदि आवश्यक हो तो आप आसानी से अकेले उनकी संख्या से उन्हें स्थानांतरित कर सकते हैं। जटिल निर्देशिका संरचनाओं और लंबे रास्तों के बीच घूमने से स्लीक और तेज़ हो जाता है।

बिल्डिंस आपको स्टैक को फिर से ऑर्डर करने या उन निर्देशिकाओं को पॉप करने की अनुमति देता है जिनकी आपको अपने कार्य प्रवाह में लचीलेपन की अनुमति देने की आवश्यकता नहीं है।

कई निर्देशिकाओं के संचालन के लिए समान रूप से स्क्रिप्ट में स्टैकिंग का उपयोग किया जा सकता है।


1

मैंने dirs / popd / pushd के उपयोग को थोड़ा असहज पाया। मैं अपने व्यक्तिगत समाधान के साथ tcsh में आया, निम्न कोड को .ali में जोड़कर

  foreach b (. , - 0 1 2 3 4 5 6 7 8 9 )
    alias p$b       'set a=`pwd`; echo $a >! ~/.mydir'$b
    alias cd$b      'cd "`cat ~/.mydir'$b'`"'
    alias del$b     'rm -v ~/.mydir'$b
    alias home$b    'set a="~"; echo $a >! ~/.mydir'$b
  end
    alias cdl       'grep / ~/.mydir*'

इस तरह से, मैंने उदाहरण के लिए, "पी।" फ़ाइल में वर्तमान कार्यशील डायर बचाने के लिए ~ / .Mydir और "सीडी।" जब भी और जहां भी मुझे पसंद हो, उस डायर को पुनः प्राप्त करना। "डेल।" संबंधित फ़ाइल निकालता है; "घर।" घर की डायर को सेट करता है (सीडी के बराबर; पी।); "सीडीएल" सूचीबद्ध करता है कि सहेजे गए डायर क्या हैं। ध्यान दें कि अगर आप ~ / ड्रॉपबॉक्स / .mydir $ b (या किसी भी अन्य क्लाउड सेवा जैसे उदा। खुद का उपयोग करते हैं) ~ / /mydir $ b का उपयोग करते हैं, तो आपको विभिन्न खातों और मशीनों में अपने पसंदीदा डायरियों का उपयोग करने का एक स्मार्ट तरीका मिलता है।


0

मैं इसे अपने bash_profile और .bashrc में इस तरह उपयोग कर रहा हूं

vi .bash_profile
alias dirs="dirs -v"
source d.sh
:wq

vi .bashrc
alias dirs="dirs -v"
:wq

vi d.sh
pushd ~/Documents/GIT/seiso-data
pushd ~/Documents/GIT/ewe/EosRegistry
pushd ~/Documents/GIT_LODGING/site-cookbooks
pushd ~/Documents/CHEF_LODGING
pushd  .
:wq

यह मुझे अपने टर्मिनल पर हाल ही में उपयोग की गई निर्देशिकाओं के बीच कूदने में मदद करता है। :-) आशा है कि यह आप को धक्का का उपयोग करने में मदद करता है बल्कि मैं सीडी का उपयोग करता हूं ~ स्टैक्डनंबर


0

का उपयोग कर cdऔर cd -आप केवल अपने दो सबसे हाल ही में इस्तेमाल निर्देशिकाओं के बीच टॉगल करने की अनुमति देता है। आपका "डायरेक्टरी वर्किंग सेट" आकार दो है।

का उपयोग करते हुए pushd, आप अपने काम के सेट में एक बड़ी संख्या में निर्देशिका रख सकते हैं।

मैं pushdइसके बजाय ज्यादातर समय का उपयोग करता हूं cd। एक बार जब आप सक्रिय निर्देशिकाओं का ढेर बना pushd directory_nameलेते हैं, तो आप पूरे दिन उनके बीच कूद सकते हैं pushd ~#

pushd dir1
pushd ../dir2
pushd /full/path/to/dir3

# There are now three directories in the stack.

pushd ~3
pushd ~2

# The same three directories are still on the stack, 
# just in a different order.

मैं popdशायद ही कभी उपयोग करता हूं , केवल जब मैं एक निर्देशिका को स्टैक से निकालना चाहता हूं जब मुझे पता है कि मैं उस निर्देशिका का उपयोग कर रहा हूं।

निर्देशिका में जाएं और इसे स्टैक से निकालें:

popd ~2

वर्तमान निर्देशिका में रहें और दूसरी निर्देशिका को स्टैक से निकालें:

popd +2

आप एक कार्य शैली के साथ अंत करते हैं जो कई टर्मिनल विंडो या टैब खोलने के समान है (प्रत्येक निर्देशिका के लिए एक जिसमें आप सक्रिय रूप से काम कर रहे हैं), लेकिन सभी एक टर्मिनल में। यह स्क्रीन रियल एस्टेट, प्लस को बचाता है, क्योंकि निर्देशिका पथ सभी एक शेल में उपलब्ध हैं, आप निम्न कार्य कर सकते हैं:

  • उन निर्देशिकाओं के बीच फ़ाइलों की प्रतिलिपि बनाएँ जिनके साथ आप वर्तमान में काम कर रहे हैं
  • वहाँ जाने के बिना किसी अन्य निर्देशिका में फ़ाइलों को देखें या संपादित करें

उदाहरण:

cp ~2/myfile.txt ~4
less ~2/myfile.txt

इन tcsh(लेकिन नहीं bash), आप अपनी निर्देशिका स्टैक को एक फ़ाइल में सहेज सकते हैं और बाद में इसे पुनर्स्थापित कर सकते हैं।

सहेजें:

dirs -S ~/dirstack

पुनर्स्थापित करें:

dirs -L ~/dirstack

अन्यथा, केवल उपयोग के लिए उदाहरणों ~में प्रतिस्थापित करें ।bash=tcsh

pushd =2
popd =4
popd +1

0

पुशड / पोप एक ऐसी सरल अवधारणा है, जिसने मुझे समझने में थोड़ी देर लगाई, क्योंकि लोग इन आदेशों को परिभाषित करते हुए यह सिखाते हैं कि 'निर्देशिका स्टैक में हेरफेर करें' जो कि मेरी राय में भ्रमित करने वाला है।

मैं इसे एक अलग तरीके से देखता हूं:

pushd [folder_name] - cd [folder_name] पर जाएगा और गंतव्य का दस्तावेजीकरण करेगा जो [फ़ोल्डर_नाम] एक डायर स्टैक में है, जबकि स्टैक में शीर्ष निर्देशिका हमेशा वर्तमान dir होगी जिसमें आप हैं

popd - सबसे पहले आपको डायरेक्टरी रिकॉर्ड में cd देगा जो कि तब स्टैक के ऊपर होता है और इसे स्टैक से हटा देता है

dirs - dir स्टैक प्रिंट करेगा (dir Db के रूप में माना जा सकता है, जहां बाईं प्रविष्टि वर्तमान निर्देशिका है (स्टैक के ऊपर)

तो 2 सबसे लोकप्रिय उपयोग के मामले हैं:

केस 1 का उपयोग करें: पुशड और पोप का उपयोग करके नेविगेट करना

root@mypc:/main/$ ls
dir1  dir2  dir3  dir4

root@mypc:/main/$ dirs   # prints the current stack
/main

root@mypc:/main/$ pushd dir1    # Will cd to dir1 and document dir1 in dir stack, stack is now:
/main/dir1 /main 
root@mypc:/main/dir1$    # I am now in /main/dir1

root@mypc:/main/dir1$    # Now let's go wild and document whatever I want
root@mypc:/main/dir1$ pushd ../dir2 
root@mypc:/main/dir2$     # Woo I am in /main/dir2
root@mypc:/main/dir2$ pushd ../dir3 
root@mypc:/main/dir3$     # Woo I am in /main/dir3
root@mypc:/main/dir3$ pushd ../dir4 
root@mypc:/main/dir4$     # Woo I am in /main/dir4
root@mypc:/main/dir4$ dirs   # Now dir stack is:
/main/dir4 /main/dir3 /main/dir2 /main/dir1 /main

मान लीजिए कि मैंने ऊपर किया है क्योंकि मैं उन फ़ोल्डरों को वापस नेविगेट करना चाहता हूं जिन्हें मैंने दस्तावेज किया था!

ध्यान दें कि यदि मैं मैन्युअल रूप से cd करता हूं, तो मैं शीर्ष dir स्टैक प्रविष्टि को प्रभावित करूंगा (जो हमेशा वर्तमान dir है)

root@mypc:/main/dir4$ cd ..   # Now dir stack is:
# (note that /main appear in the leftmost as well which is the top of the stack)
/main /main/dir3 /main/dir2 /main/dir1 /main
root@mypc:/main$ 

अब पीछे की ओर नेविगेट करते हैं:

root@mypc:/main$ popd
root@mypc:/main$     # Still in /main since it was at the top of the dir stack
root@mypc:/main$ dirs    # Stack is now:
/main/dir3 /main/dir2 /main/dir1 /main

root@mypc:/main$ popd
root@mypc:/main/dir3$ popd    # Woo in dir3 now, about to navigate to dir2
root@mypc:/main/dir2$ popd    # Woo in dir2, about to navigate to dir1
root@mypc:/main/dir1$ dirs    # Stack is now:
/main

फिर से मैं जो भी डायर चाहता हूं उसे दस्तावेज कर सकता हूं और फिर मैन्युअल रूप से दूसरे डायर पर नेविगेट कर सकता हूं फिर मैं आसानी से डॉक्यूमेंटेड डायर में वापस आ सकूंगा।

केस 2 का उपयोग करें: न्यूमेरिक स्टैक इंडेक्स का उपयोग करके नेविगेट करना

कहते हैं कि मैंने पुश dir4 dir3 dir2 dir1 का उपयोग करके धक्का दिया, अब चल रहा dir -v दिखाएगा:

root@mypc:/main$ dirs -v
 0  /main/dir1  (this is the current dir you are in always)
 1  /main/dir2
 2  /main/dir3
 3  /main/dir4

अब आप कोई भी लिनक्स ऑपरेशन कर सकते हैं जिसमें स्टैक इंडेक्स का उपयोग करके निर्देशिकाएं शामिल हैं:

root@mypc:/main$ cp ~2/temp.txt ~3/new_temp.txt    # this will run in the background, something like:
# cp /main/dir2/temp.txt  /main/dir3/new_temp.txt

तुम भी डायर स्टैक से एक विशिष्ट प्रविष्टि को हटा सकते हैं:

root@mypc:/main$ popd ~4

आशा है कि "डॉक्यूमेंटिंग" शब्दों का उपयोग करते हुए या डीआईआर स्टैक के बारे में सोचें क्योंकि किसी प्रकार का डीबी अवधारणा को सरल करता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.