2012-05-04 19 views
24

मान लें कि मेरे पास मेरे घर फ़ोल्डर में फ़ोल्डरों ~/a/b हैं, और फ़ोल्डर बी में 'symlink' नामक '..' के लिए एक प्रतीकात्मक लिंक है। तब मैं बैश में निम्न कार्य:प्रतीकात्मक लिंक पर सीडी/बैश का व्यवहार

[email protected]:~$ cd a/b/symlink 
[email protected]:~/a/b/symlink$ pwd -P 
/home/hm/a 
[email protected]:~/a/b/symlink$ cd .. 
[email protected]:~/a/b$ pwd -P 
/home/hm/a/b 

pwd -पी वर्तमान कार्यशील निर्देशिका प्रिंट, सभी सांकेतिक लिंक अपसंदर्भन। अंत में कार्यशील निर्देशिका/घर/एचएम/ए/बी क्यों नहीं है, और नहीं/home/hm?

उत्तर

26

bash "दोस्ताना" है; जब आप cd /into/a/symlink/, खोल पुराने स्थान को याद रखता है ($OLDPWD में) और निर्देशिका का उपयोग करेगा जब आप इस धारणा है कि आप निर्देशिका आप बस में थे पर वापस आना चाहते तहत cd ..

आप उपयोग करना चाहते हैं असली.., तो आप भी cd -P का उपयोग करना चाहिए:

  The -P option says to use the physical directory 
      structure instead of following symbolic links (see 
      also the -P option to the set builtin command); 
      the -L option forces symbolic links to be followed. 
$ cd 
$ cd a/b/symlink 
$ cd -P .. 
$ pwd -P 
/home/sarnold 
$ 
+8

FYI करें, आप उपयोग कर सकते हैं '-ओ physical' सेट या' इस व्यवहार स्थायी बनाने के लिए -P' निर्धारित किया है। – Kevin

+1

.. मुझे यह उल्लेख करना चाहिए कि कार्यान्वयन शायद @ गीकोसौर के वर्णन के अनुरूप है; मैं अपने मूल्य के साथ 'OLDPWD' को ओवरराइट करने की अपेक्षा नहीं करता, वास्तव में 'cd ..' व्यवहार को प्रभावित करेगा। – sarnold

+0

मैं मानता हूं कि मुझे नहीं लगता कि OLDPWD वास्तव में यहां कुछ भी करता है। मैंने इसे "सीडी" द्वारा एक सिम्लिंक चेन को तीन स्तरों में गहराई से नीचे और फिर "सीडी .." कर कुछ बार परीक्षण किया। यह ठीक काम किया। यदि OLDPWD का उपयोग किया गया था, तो यह काम नहीं करेगा। OLDPWD केवल एक निर्देशिका को याद करता है, और एक से अधिक निर्देशिका वापस जाने के लिए उपयोग नहीं किया जा सका। इस प्रकार, OLDPWD का उपयोग नहीं किया जाता है। –

4

bash आपके प्रॉम्प्ट में दिखाए गए तार्किक वर्तमान निर्देशिका पथ का ट्रैक रखता है, और इसके अनुसार cd .. जैसी चीजों का व्याख्या करता है। यह चीजों को थोड़ा और संगत बनाता है यदि आप केवल cd (या pushd) में ऐसे पथों का उपयोग करते हैं, तो अप्रत्याशित चीजों की लागत पर यदि आप उम्मीद करते हैं कि कमांड तर्कों (या कमांड के अंदर; emacs और vim में पथों के साथ एक ही चीज़ होने की उम्मीद है) symlink हैंडलिंग के लिए अपने स्वयं के विन्यास योग्य नियम, लेकिन अधिकांश आदेश कर्नेल पर इसके साथ निपटने के लिए भरोसा करते हैं)।

संबंधित मुद्दे