एक प्रतीकात्मक लिंक का पालन करने के बाद 'सीडी ..' कार्यक्षमता को पुनर्स्थापित करें


13

अगर मैं टर्मिनल में एक कमांड के साथ एक प्रतीकात्मक लिंक बनाता हूं जैसे

ln -s /path/to/some/directory symbolicLink

और फिर के साथ लिंक का पालन करें

cd symbolicLink

टर्मिनल यह सोचता है कि cwd तब ~/symbolicLink/भी है जब यह वास्तव में दिख रहा है ~/path/to/some/directory/(यह मानते हुए कि लिंक को ~निश्चित रूप से बनाया गया था )। इसका मतलब यह है कि अगर मैं तब टाइप करता हूं तो cd ..मुझे वापस ले लिया जाता है ~, क्योंकि टर्मिनल 'सोचता है' यह cwd का जनक है।

मैं ऐसी है कि बदलने के लिए क्या आवश्यकता होगी cd ..बजाय करने के लिए मुझे ले जाएगा ~/path/to/some/, यानी असली की मूल ~/path/to/some/directory/?

जवाबों:


15

Https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links देखें ।

"वास्तविक" मूल निर्देशिका में जाने के लिए आप 'cd -P' का उपयोग कर सकते हैं। शीर्ष उत्तर पर पहली टिप्पणी देखें कि यह डिफ़ॉल्ट व्यवहार कैसे करें।


5

cd -Pव्यवहार में एक सूक्ष्म चेतावनी है (लंबाई के कारण उत्तर के रूप में पोस्ट किया गया):

$ dir1=$(mktemp --directory)
$ dir2=$(mktemp --directory)
$ ln -s -- "$dir1" /tmp/start
$ ln -s -- "$dir2" "$dir1"
$ cd "/tmp/start/"*
$ cd -P ..

pwdअब क्या छापना चाहिए ? तार्किक रूप से, यह या तो हो सकता है

  1. $dir1, अगर cd -P ..करता है cd ..पहली और cd -- "$(readlink -f)"बाद में, या
  2. /tmp, अगर पहले और बाद में cd -P ..करता है ।cd -- "$(readlink -f)"cd ..

वास्तव में यह उत्तरार्द्ध करता है, जिसका अर्थ है कि "माता-पिता" निर्देशिका की तुलना में pwdसहज रूप से दो स्तर अधिक है।


1
धन्यवाद! cd -Pअभी भी उस मुद्दे को हल करता है जो मैं सामना कर रहा था, लेकिन अभी भी जानना उपयोगी है।
Val


2

मुझे आपका दर्द महसूस होता है- bashइस व्यवहार के कारण मैं मूल रूप से इंटरैक्टिव उपयोग के लिए टूट गया हूं ।

tcshइंटरैक्टिव उपयोग के लिए एक अधिक उपयोगकर्ता के अनुकूल खोल है। bashप्रोग्रामिंग के लिए छोड़ दें (यदि आप कई स्क्रिप्टिंग भाषाओं के बीच बेहतर विकल्प होने पर शेल स्क्रिप्ट लिखने पर जोर देते हैं)।

किसी भी उपयोगकर्ता के लिए गोले बदलने के लिए, chshकमांड लाइन पर टाइप करें और संकेतों का पालन करें (फिर से, मैं अनुशंसा करता हूं /bin/tcshऔर उत्कृष्ट ओ'रिली पुस्तक का उपयोग करते हुए csh और tcsh का उपयोग करते हुए , अगले कुछ भी नहीं करने के लिए उपलब्ध है)।


जब से मैंने यह उत्तर लिखा है, मैंने इंटरैक्टिव उपयोग के लिए बैश की चिंता करना और प्यार करना बंद कर दिया है। लेकिन मैं अभी भी cdसहानुभूति के लिए डिफ़ॉल्ट व्यवहार से नहीं निपट सकता । मुझे set -o physicalअपने .bashrcया .bash_profileमेरे द्वारा उपयोग की जाने वाली प्रत्येक मशीन के लिए याद रखना होगा ।
dodgethesteamroller
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.