अपने नाम में जगह के साथ निर्देशिका में सीडी नहीं कर सकते, यहां तक ​​कि उद्धरण या भागने के साथ भी


0

MacOS मशीन पर एक बैश शेल में, मैं टाइप करके देख सकता हूं lsकि कोई निर्देशक है Application Support:

$ ls
Accounts                FontCollections     PreferencePanes
Application Scripts     Fonts               Preferences
Application Support     GameKit             Printers
Assistant               Google              PubSub
Assistants              Group Containers    Safari
Audio                   IdentityServices    SafariSafeBrowsing
Caches                  Input Methods       Saved Application State
Calendars               Internet Plug-Ins   Screen Savers
CallServices            Keyboard            Services
ColorPickers            Keyboard Layouts    Sharing
Colors                  KeyboardServices    Sounds
Compositions            Keychains           Spelling
Containers              LanguageModeling    Suggestions
Cookies                 LaunchAgents        SyncedPreferences
CoreFollowUp            Library             VirtualBox
Developer               Logs                Voices
Dictionaries            Mail                WebKit
F5Networks              Messages            com.apple.internal.ck
Family                  Metadata            iMovie
Favorites               Mobile Documents
FileProvider            Passes

हालाँकि, अगर मैं cdइस निर्देशिका में या तो उद्धरण या भागने के पात्रों का उपयोग करके कोशिश करता हूं, तो इसका वर्णन कैसे किया जाए कि कैसे एक निर्देशिका में सीडी है जिसमें इसके नाम में एक जगह है? , मुझे अभी भी एक त्रुटि मिलती है:

LM-SJN-21018636:Library kupeek$ cd "Application Support"
-bash: cd: Application: No such file or directory
LM-SJN-21018636:Library kupeek$ cd Application\ Support
-bash: cd: Application: No such file or directory

ऐसा लगता है कि बैश उद्धरण या भागने वाले पात्रों को 'नहीं' उठा रहे हैं और इसके बजाय "एप्लिकेशन" नामक एक निर्देशिका की तलाश कर रहे हैं। किसी भी विचार क्यों यह काम नहीं कर रहा है?


2
शायद आपके पास एक उपनाम है या इसके लिए समान है cdजो बुरी तरह से लिखा गया है। क्या command -v cdछपता है?
meuh

2
मुझे एक खराब लिखित कार्य पर संदेह होगा। और मुझे लगता command -v cdहै कि पहली टिप्पणी से command -V cd(राजधानी वी) होना चाहिए ; type -a cdकाम भी करना चाहिए।
कामिल मैकियोरोस्की

1
यदि आप टैब-कुंजी के साथ इसे "ऑटोफिल" करते हैं तो क्या होता है? वही त्रुटि?
औलिस रोंकेनैन

जवाबों:


5

आपका cdएक खराब परिभाषित फ़ंक्शन या अन्य नाम हो सकता है। type -a cdपता लगाने के लिए भागो ।

इस अन्य उत्तर में एक संभावित उपनाम बताया गया है । मेरा जवाब शेल फ़ंक्शंस पर केंद्रित है।

उदाहरण के लिए यदि फ़ंक्शन का उपयोग किया जाता है

  • command cd $*( commandBuiltin समझाया यहाँ ) या
  • command cd $@ या
  • command cd $1

सही के बजाय

  • command cd "$@" या
  • command cd "$1" (ऊपर के रूप में अच्छा नहीं है, फिर भी घातक नहीं है)

और आपका बैश फेक नहीं था too many arguments(प्री-4.4 वर्जन, इस सवाल को देखें ), व्यवहार ठीक वैसा ही होगा जैसा आपने बताया क्योंकि Application Supportफंक्शन के लिए एक ही आर्ग्युमेंट होना फंक्शन के अंदर शब्द स्प्लिटिंग से गुजरना होगा, इसलिए command cdइसे Applicationपहले लॉजिक के रूप में देखें ।

यदि आपका cdवास्तव में एक खराब परिभाषित फ़ंक्शन है, तो आपको उस स्थान को ट्रैक करना चाहिए जहां यह परिभाषित है और इसे ठीक करें। इस तरह से पहले शब्द जोड़ने के लिए एक तदर्थ समाधान होगा :commandcd

command cd "Application Support"

या

command cd Application\ Support

(यदि उर्फ ​​अपराधी है तो भी यह काम करेगा)।


1

एक से अधिक उद्धरणों का उपयोग करके देखें,

उदाहरण के लिए दोहरे उद्धरण चिह्नों के भीतर एकल उद्धरण में नाम रखें:

cd "'Application Support'"

"दोहरे उद्धरणों में संलग्न एक तर्क स्वयं को एक ही शब्द के रूप में प्रस्तुत करता है, भले ही उसमें व्हॉट्सएप विभाजक हों।" उन्नत बैश-स्क्रिप्टिंग गाइड

उद्धरण के दो सेट (उद्धरण के भीतर उद्धरण) का उपयोग करना एक व्यवहार्य समाधान है, यह मानते हुए कि यहां समस्या यह है कि मूल cdकमांड को बदल दिया गया है। निम्नलिखित परिभाषा

alias cd='eval command cd'

यहां बताई गई समस्या को पुन: उत्पन्न करेगा (बाश के पूर्व 4.4 संस्करण में, यह उत्तर देखें )। ऐसा होता है कि evalदूसरी बार कमांड लाइन को पार्स करता है और, पार्सिंग के पहले पास पर, उद्धरण की एक परत हटा दी जाती है। उद्धरणों के दो सेटों का उपयोग करना, क्योंकि, उद्धरणों के पहले सेट को हटा दिया जाता है, evalतर्क को उद्धरण के दूसरे सेट के साथ पास कर देगा cd

यदि ऐसा उपनाम है, तो सबसे अच्छा समाधान यह है कि इसे पहले स्थान पर ठीक किया जाए।


सरल। मेरा मानना ​​है कि समस्या यह है कि मूल "सीडी" कमांड को अलियास किया गया है। उपनाम को तर्क के रूप में पथ स्ट्रिंग मिलता है और यदि आप उद्धरण का पहला सेट लगाते हैं तो यह सही ढंग से हो जाता है। फिर इसे "सीडी" में पास कर दिया जाता है, लेकिन यह बिना उद्धरणों के वहां चला जाता है और विफल हो जाता है। यदि आप उद्धरण के दो सेट लगाते हैं, तो उपनाम पहले सेट के साथ स्ट्रिंग हो जाता है और फिर इसे उद्धरणों के दूसरे सेट के साथ "सीडी" में भेज दिया जाता है और ... मैजिक, यह काम करता है!
GiopperOne

आपके सुझाव के लिए धन्यवाद, मैंने अपना उत्तर संपादित किया और एक संदर्भ जोड़ा। मुझे यहाँ यह समझाने की ज़रूरत नहीं है कि एक "सीडी" उपनाम को कैसे संशोधित किया जाए, यह ऑफ-टॉपिक होगा। मैं इस प्रश्न का उत्तर दे रहा हूं "कोई भी विचार क्यों यह काम नहीं कर रहा है?", इसका उत्तर यह है कि अकेले एक उद्धरण का उपयोग करना। इसे दोहरे उद्धरण चिह्नों के भीतर रखें और यह काम करेगा।
GiopperOne

0

अधिक रिक्त या अन्य गैर-मुद्रण योग्य वर्ण हो सकते हैं जो आपको दिखाई नहीं देते हैं। कोशिश cd Application*Scrip*या समान।


1
यह किसी और मामले में हो सकता है, लेकिन इस विशेष में नहीं। संदेश को नोट करें -bash: cd: Application: No such file or directory, नहीं -bash: cd: Application Support: No such file or directory। आदेश पहली बार में पूरे तर्क स्ट्रिंग को नहीं देखता है।
कामिल मैकियोरोस्की

0

यदि आपकाcdकोई अजीब उर्फ ​​नहीं है, तो मैं बस आपकेTABलिए एक कार्यशील प्रारूप भरने के लिए बैश के स्वतः पूर्ण (यदि यह सक्षम है) का उपयोग करेगा।

टाइपिंग

सीडी एपTAB

ऐसा लगता है जैसे यह कुछ करने के लिए autofill चाहिए

cd Application\ S

(यदि आपके पास एक अजीब सीडी उर्फ ​​है, तो कामिल के टाइपिंग के जवाब को जोड़कर command cd A...TAB के साथ भी काम करना चाहिए)

और फिर आपके द्वारा वांछित नाम के अधिक प्रकार के लिए प्रतीक्षा करें (इसके बाद एनोटेर TABके साथ बाकी को स्वतः पूर्ण करें)। या बस TABएक या दो बार टाइप करने पर आपके उपलब्ध विकल्प प्रदर्शित होंगे।

(मैं प्रति पंक्ति केवल एक प्रविष्टि देखने के लिए सादे ls, लेकिन ls -laया शायद उपयोग नहीं करूँगा ls -1, आपका lsआउटपुट स्पष्ट नहीं है)


यह एक सामान्य मामले में एक अच्छी सलाह हो सकती है (यानी भविष्य में समान समस्याओं वाले उपयोगकर्ताओं के लिए), लेकिन मुझे संदेह है कि यह तुरंत ओपी की मदद करेगा। संदेश को नोट करें Application: No such file or directory, नहीं Application Support: No such file or directory। यदि कमांड लाइन में डायरेक्ट्री का नाम केवल वास्तविक नाम से मेल नहीं खाता है, cdतब भी पूरे तर्क के गलत होने का अनुपालन करेगा। मैं उन उत्तरों को अस्वीकार नहीं करता, जो बहुत ही समान समस्याओं पर लागू हो सकते हैं, फिर भी मैं यह नोट कर रहा हूं कि वे पूरी तरह से ओपी के मुद्दे पर फिट नहीं हैं और वे इसकी जड़ को स्पष्ट नहीं कर सकते हैं।
कामिल मैकियोरोव्स्की

मैंने भी ऐसा सोचा था, लेकिन यह थोड़ा कष्टप्रद है जब शीर्षक पूरी तरह से वास्तविक समस्या (" मेरा cdटूट गया है ") से मेल नहीं खाता है , और टैब पूरा केवल एक टिप्पणी में संक्षेप में उल्लेख किया गया था, इसलिए "शीर्षक समस्या" के लिए एक पूर्ण उत्तर उचित लगा।
Xen2050

-1

ऐसा इसलिए है क्योंकि आप एक शब्द से गायब हैं। प्रयोग करके देखें:

cd "Application Support GameKit"

मैं खुद को दोहरा रहा हूं: यह किसी और मामले में हो सकता है, लेकिन इस विशेष में नहीं। संदेश को नोट करें -bash: cd: Application: No such file or directory, नहीं -bash: cd: Application Support: No such file or directory। आदेश पहली बार में पूरे तर्क स्ट्रिंग को नहीं देखता है।
कामिल मैकियोरोस्की

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