कौन सी निर्देशिका लिनक्स में '//' का प्रतिनिधित्व करती है?


13

जब मैं टाइप करके लिनक्स में ऊपरी स्तर की निर्देशिका में वापस जाना चाहता हूं cd .., मैं टाइपो-एड cd //। मेरे महान आश्चर्य के लिए, कोई त्रुटि रिपोर्ट नहीं की गई है। क्या अधिक शीघ्र हो जाता है username@hostname://$ls इंगित करता है कि मैं अब रूट डायरेक्टरी में हूं।

यह एक बग या खोल की एक विशेषता है? यदि एक सुविधा है, है // का एक उपनाम /? मेरा खोल GNU बैश है, संस्करण 4.1.5 (1) -release (i686-linux-gnu)

धन्यवाद एवं शुभकामनाएँ।


जवाबों:


30

इसे या तो माना जा सकता है।

लिनक्स में, // कुछ भी नहीं का मतलब है - कई लगातार स्लैश एक के लिए ढह जाते हैं, कहीं भी शुरुआत सहित पथ में। निर्देशिका को बदलना // आपको अंदर डालता है /, जैसा चल रहा है readlink /proc/self/cwd बताएगा; इसी तरह, /usr//local///bin तक ढह गया है /usr/local/bin

हालाँकि, कुछ अन्य यूनिक्स जैसे सिस्टम, उदाहरण के लिए Cygwin या पुराने अपोलो डोमेन / OS, का उपयोग करते हैं // उपसर्ग जैसे नेटवर्क पथ के लिए //fileserver/path/to/data। POSIX इसे भी अनुमति देता है।

विभिन्न कारणों से, दे घुमा के शेल वर्तमान निर्देशिका को अपने आप पर (ओएस-प्रदान की गई ट्रैकिंग के अलावा) ट्रैक करता है और इसमें इसका कोड है जो प्रारंभिक को रोकता है // ढह जाने से, ऐसी प्रणालियों के साथ संगत बने रहने के लिए। "सुविधा" वह है दे घुमा के वर्तमान निर्देशिका की अधिक सहज ट्रैकिंग प्रदान करता है, उदाहरण के लिए, जब cd 'एक सिमिलिंक में शामिल है, दे घुमा के आपको वह रास्ता दिखाएगा जिसकी आप उम्मीद करते हैं, भले ही कर्नेल अन्यथा सोचता हो। "बग" वह है दे घुमा के परमिट // सिस्टम पर भी जो इसका उपयोग नहीं करते हैं।


दिलचस्प बात यह है zsh की अनुमति देता है cd //, लेकिन सिर्फ दिखाने के लिए काफी स्मार्ट है / शीघ्र स्ट्रिंग में।
new123456

@BinaryZebra Bitsavers में अपोलो के सहित पुराने यूनिक्स मैनुअल का एक संग्रह है - वहाँ बहुत सारे उदाहरण होने चाहिए। TUHS वेबसाइट में भी कुछ होना चाहिए।
grawity

बहुत धन्यवाद, मुझे बिट्सवर्स मैनुअल में // के लिए विवरण मिला।

9

POSIX pathname परिभाषा से:

पथनाम में वैकल्पिक रूप से एक या अधिक अनुगामी स्लैश हो सकते हैं। क्रमिक स्लैश को एक स्लैश के समान माना जाता है।

स्रोत

और अधिक सटीक रूप से नीचे दिए गए अपनी टिप्पणी में उल्लेख किया है 4.11 अध्याय Pathname संकल्प पर:

एक पाथनाम जो दो क्रमिक स्लैश के साथ शुरू होता है, एक कार्यान्वयन-परिभाषित तरीके से व्याख्या की जा सकती है, हालांकि दो से अधिक प्रमुख स्लैश को एक स्लैश के रूप में माना जाएगा।


1
एक अधिक उचित अनुभाग है 4.11 पथनाम संकल्‍प (अंतिम पैराग्राफ), क्योंकि प्रश्न में व्यवहार केवल दो के लिए प्रकट होता है प्रमुख स्लैश।
grawity

3

यह एक तरह की सुविधा है। यदि आपको शेल स्क्रिप्ट मिल रहा है और उपयोग हो रहा है find, उदाहरण के लिए सभी रास्तों के साथ उपसर्ग हैं। / आमतौर पर। फिर, यदि आप उस वास्तविक पथ पर व्यवहार करते हैं तो यह `/my/path/./appended/path हो जाता है, जो / मेरे / पथ / संलग्न / पथ का समाधान करता है। तो, अगर मैं गलत नहीं हूँ, // / / और इसलिए / के रूप में व्याख्या की है। यदि आप / घर / उपयोगकर्ता // पर गए हैं तो यह समान है, आप / घर / उपयोगकर्ता / में हवा करेंगे


1

मैं तुरंत "बग" प्रदर्शित करने के लिए जाऊंगा।

या तो पथ "/", "//", "////////////////////////", ... का एक ही अर्थ है: "/"। आप जितने भी "/" जोड़ सकते हैं, जहां भी आप एक यूनिक्स पथ में चाहते हैं, यह इसका अर्थ नहीं बदलता है।

"बग" यहां इस तथ्य से संबंधित है कि आपका प्रॉम्प्ट प्रदर्शन के लिए पथ में लिखे गए अंतिम वैध टाइप का उपयोग करता है, वास्तविक "पीडीएफ़" का नहीं।

वैसे भी मज़ेदार;)


सहमत - द // प्रॉम्प्ट में आपके प्रॉम्प्ट परिवेश चर का एक साइड इफेक्ट है ( $PS1 ) -- कैसे PS1 परिभाषित?
Doug Harris

@DougHarris द $PS1 चर के रूप में परिभाषित किया गया है [\u@\h \W]\$। सेटिंग के साथ कोई समस्या?
Summer_More_More_Tea

अजीब। यदि मैं उस PS1 को आज़माता हूं, तो मुझे केवल एक ही मिलता है / जब pwd = /। मुझे आश्चर्य हुआ कि क्या आप निर्देशिका प्राप्त करने के लिए कोई अतिरिक्त काम कर रहे हैं। है $PROMPT_COMMAND सेट?
Doug Harris

@DougHarris हाँ, यह चर सेट है, जिसका मूल्य है echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#HOME/~}"; echo -ne "\007"। आप pls थोड़ा विस्तार से बता सकते हैं? मैं इन दो चरों से बिल्कुल परिचित नहीं हूँ। धन्यवाद।
Summer_More_More_Tea

बैश मैन पेज पढ़ें और खोजें PS1 तथा PROMPT_COMMAND -- उपयोग man bash आपकी कमांड लाइन पर या ऑनलाइन पढ़ें
Doug Harris

1

इसकी एक विशेषता और सभी एकाधिक // को एक एकल / में बदल दिया जाएगा

यह उपयोगी है अगर आपके पास अंत में उदाहरण जैसे पथ के साथ चर हैं। तो आपके सीडी में कोई त्रुटि नहीं होगी और आपको कार्यक्षेत्र बदलना नहीं होगा चर।

MY_WORKSPACE=/home/your_username/workspace/
MY_NEW_PROJECT=$MY_WORKSPACE/my_proj/
cd $MY_NEW_PROJECT 

प्रोजेक्ट वैरिएबल की पूरी सामग्री है

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