आप एक निर्देशिका कैसे दर्ज करते हैं जिसका नाम केवल एक ऋण है?


26

मैंने डाउनलोड lessn मेरी वेब सर्वर पर है और यह अनज़िप।

इसमें एक फ़ोल्डर का नाम है -। मुझे लगा कि मुझे पता है कि मुझे कैसे निपटना है, लेकिन मैं नहीं।

मैंने कोशिश की cd -- -, लेकिन उसका वांछित प्रभाव नहीं है। उद्धरणों का उपयोग करना इसे प्रभावित नहीं करता है। मैंने कोई फायदा नहीं होने के लिए सभी जगह स्लैश डाल दिए।

इस फ़ोल्डर में बदलने का उचित तरीका क्या है?

जवाबों:


34

आप इसे एक पैरामीटर होने से बचना चाहते हैं, इस प्रकार हम इसे कुछ करने की कोशिश करते हैं। वर्तमान निर्देशिका के साथ पहुँचा जा सकता है ., इस प्रकार सबफ़ोल्डर के -साथ वैकल्पिक रूप से पहुँचा जा सकता है ./-

cd ./-

कारण यह है कि cd -- -काम नहीं है, क्योंकि इस कार्यान्वित किया जाता है की तुलना में अलग ढंग से करता है, तो आप है rm(देखें man rmकरने के लिए) cd(देखें man bashया man cd), cdजो देखता है एक अलग व्याख्या है -एक पैरामीटर (देखें के रूप में man bashया man cd)।

यह भी ध्यान दिया जाना चाहिए कि cdएक शेल बिलिन फ़ंक्शन है, जैसा कि इस उत्तर में पढ़ा जा सकता है :

cdएक बाहरी कमांड नहीं है - यह एक शेल बिलिन फ़ंक्शन है। यह वर्तमान शेल के संदर्भ में चलता है, न कि, जैसा कि बाहरी कमांड करते हैं, कांटे / निष्पादित संदर्भ को एक अलग प्रक्रिया के रूप में करते हैं।

एक बाहरी cdकमांड है, लेकिन यह पूरी तरह से कुछ अलग करता है ।

यह बताता है कि कार्यान्वयन अलग क्यों है, क्योंकि बैश और कोरुटिल दो अलग चीजें हैं।

चलिए मान लेते हैं कि आपको इस बात पर विश्वास नहीं होगा, हम इसकी पुष्टि कैसे करते हैं? का उपयोग करें whichऔर type

 $ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
 $ which rm && type rm
/bin/rm
/bin/rm is /bin/rm

man whichअधिक जानकारी के लिए देखें , और man bashया के man typeलिएtype


4
नहीं, "-" सभी मानक उपयोगिताओं में लागू किया गया है, लेकिन विकल्प समाप्त करने के लिए है। "-" अकेले एक विकल्प के रूप में नहीं बल्कि पिछली निर्देशिका के रूप में पहचाना जाता है।
स्टीफन चेजेलस

4
सही समाधान, लेकिन स्पष्टीकरण गलत है। यह पूरी तरह से अप्रासंगिक है cdजो एक बिलिन है। कारण cd -- -काम नहीं करता है कि -एक ऑपरेंड है, एक विकल्प नहीं है।
गाइल्स का SO- बुराई पर रोक '23

1
Mac OS X पर cd -- -आपको -वर्तमान निर्देशिका में नामित निर्देशिका में बदल देगा । FWIW।
टिम केनेडी

अधिकांश टिप्पणियाँ मेरी पोस्ट के दूसरे भाग में परिलक्षित हुईं।
तमारा विज्समैन

22

एक माइनस (उर्फ डैश) अकेले एक विकल्प नहीं है, लेकिन एक ऑपरेंड (यानी एक तर्क जो एक विकल्प नहीं है)। इस वजह से, --इसे लगाने से पहले कोई प्रभाव नहीं पड़ता है। डैश एक ऑपरेंड है cd -और अभी भी इसमें एक ऑपरेंड है cd -- -। अन्य मानक उपयोगिताओं की तरह, cdएक ऑपरेंड को एक ऑपरेंड के रूप में मानते हैं चाहे --वह इससे पहले हो।

cdआदेश संकार्य करने के लिए एक विशेष अर्थ प्रदान करती है -। और कुछ भी करने के लिए स्विच करने के लिए एक निर्देशिका है। cd -- -aनिर्देशिका में स्विच किया जाता है -a, क्योंकि -aएक ऑपरेंड के रूप में विशेष नहीं है और इसे विकल्प के रूप में व्यवहार करने से --रोकता cdहै। यह -अकेले के लिए काम नहीं करता है जो एक विकल्प नहीं है।

चारों ओर उद्धरण डाल -मदद करने के लिए नहीं जा रहा है, क्योंकि वह अंततः ओपेरा को -वैसे भी पारित करेगा ।

इसलिए आपका एकमात्र सहारा उसी विचार को व्यक्त करने का एक और तरीका ढूंढना है, उसी निर्देशिका का दूसरा नाम। सौभाग्य से, वहाँ एक आसान है: यदि आप ./एक रिश्तेदार फ़ाइल नाम से पहले जोड़ते हैं , तो यह अभी भी उसी फ़ाइल का मतलब है। इससे ./फर्क पड़ता है जो हमारे मामले में अप्रासंगिक है: CDPATHजब निर्देशिका का नाम /, ./या के साथ शुरू होता है , तो परामर्श नहीं किया जाता है ../। इस प्रकार:

cd ./-

एक अन्य तरीका, चूंकि -एक निर्देशिका है, /इसके बाद जोड़ना है । /फ़ाइल नाम के अंत में जोड़ना यह सुनिश्चित करता है कि फ़ाइल को एक निर्देशिका के रूप में माना जाता है (विशेष रूप से, यह कमांड निर्देशिका पर ही काम करेगा और सिम्लिंक पर नहीं अगर फ़ाइल निर्देशिका का प्रतीकात्मक लिंक है), लेकिन अन्यथा बनाता है कोई फर्क नहीं। इस प्रकार:

cd -- -/

लेखन -/को पूरा करने के तरीके के अनुसार कोड का सुझाव दिया जाता है, लेकिन बैश में यह वास्तव में --इससे पहले ही काम करता है, बैश के लिए कोई विशेष मामला नहीं है cd -/(zsh do)।


यह मेरे दिमाग को उड़ा देता है, मैंने वास्तव में कोशिश की थी cd -- -/, लेकिन cd -उससे पहले अधिकार के बराबर चलने के कारण , निर्देशिका वास्तव में मौजूद नहीं थी और मैंने इसे एक और असफल प्रयास के रूप में व्याख्या किया।
डेर होकस्टापलर


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