TL; DR: सुनिश्चित करें कि RVM अप-टू-डेट है कम से कम 1.26.11 को री-इंस्टाल या कमांड जारी करके rvm get head
, और इसे केवल एक बार प्रति टर्मिनल वातावरण में इनिशियलाइज़ किया जा रहा है।
परिणाम
आखिरकार मैं अपने वातावरण को ठीक करने में सक्षम हुआ। मैं कुछ की मदद करने के प्रयास में अपनी विशिष्ट समस्या से संबंधित कुछ जानकारी पोस्ट करूंगा, भले ही अन्य में एक ही लक्षण हो लेकिन एक और मूल कारण हो सकता है।
कारण
रूट समस्या का एक हिस्सा आरवीएम से आ रहा था, और यह मेरी कमांड लाइन के वातावरण के लिए कैसे आरंभ किया जा रहा था। मुझे ऐसा करने के लिए कुछ अलग तरीके मिले थे, खासकर जब से एक अतिरिक्त विधि विशेष रूप से fish
शेल पर्यावरण के लिए तैयार की गई थी ।
ऐसा लगता है कि मूल कारण या तो था:
- आरवीएम को एक से अधिक बार इनिशियलाइज़ करना, क्योंकि मेरे पास कई स्टेटमेंट्स थे, एक प्रति टर्मिनल कॉन्फ़िगरेशन फ़ाइल, और कैसे वे जंजीर थे, इसके कारण मुझे दूसरों के बारे में पता नहीं था जो स्वचालित रूप से जोड़े गए थे।
- या, किसी तरह बयान जोड़े गए थे कि एक टर्मिनल पर्यावरण के लिए इनिशियलाइज़ेशन को मिलाया, कहते हैं
fish
, और मेरे अन्य टर्मिनल वातावरण में चलाया जा रहा था bash
, या वर्सा लेना चाहिए। यह नीचे मेरे विवरण में देखा जा सकता है, जहां टूटे हुए bash
पथ में कुछ पथों को सी द्वारा सीमांकित किया गया है :
, लेकिन फिर अन्य को भी रिक्त स्थान द्वारा शामिल किया गया है, जो कि गलत सिंटैक्स है bash
, लेकिन इसके लिए सही है fish
।
- या दोनों हो रहे थे!
तब रूट की समस्या का दूसरा हिस्सा यह था कि ऐसा लगता है कि आरवीएम / डेरेनव संबंधित बग क्रेप्ड फंक्शन के संबंध में हाल ही में सामने आए थे। आरवीएम के अन्य समस्याग्रस्त रिलीज में से एक होने के कारण मुझे शायद फिर से इसका सामना करना पड़ा:
- एक फिर से स्थापना:
curl -sSL https://get.rvm.io | bash
- एक मैनुअल अपडेट:
rvm get head
- एक स्वत: अद्यतन (है कि मैं सिर्फ किया था) जोड़कर
rvm_autoupdate_flag=2
करने के लिए~/.rvmrc
इस समस्या को 30 मार्च, 2016 या 1.26.11 जारी किया जाना चाहिए।
कहानी
फ़ाइल सिस्टम की पूरी खोज करने के लिए GNU उपयोगिताओं के साथ लड़ने के बाद, फ़ाइल सामग्री के अंदर झांकते हुए, मैंने एटम को अधिक सफलता के लिए ऐसा करने के लिए उपयोग किया, और पाया कि केवल ज़ेन्ची द्वारा उल्लिखित फ़ाइल shell_session_update
में पाया गया था /etc/bashrc_Apple_Terminal
(इसके अलावा फ़ाइलों के अलावा) और ऐसा)। मुझे यह भी पता नहीं है कि मुझे क्यों चलाया जा रहा था क्योंकि मैं iTerm (2) का उपयोग कर रहा था, और $TERM_PROGRAM
उस मामले का मूल्य है iTerm.app
और नहीं Apple_Terminal
।
यह भी मदद नहीं करता है कि मैं, किसी कारण से, आरवीएम स्थापना को एक से अधिक बार प्रबंधित करना पड़ा, स्थापना प्रक्रिया से गुजरना, जो जाहिरा तौर पर पहले से ही कई 'डॉटफाइल्स' में कॉन्फ़िगरेशन जोड़ता है, जहां मैंने मैन्युअल रूप से कुछ या लाइनें भी जोड़ी थीं ।
इसके साथ ही मैंने एक .bashrc
फ़ाइल बनाई थी और इसे .bash_profile
अपने मैक से लिंक किया था, क्योंकि यह स्पष्ट रूप से डिफ़ॉल्ट रूप से मौजूद नहीं था। मैंने पहले एक लिनक्स सिस्टम पर पढ़ा था कि, कन्वेंशन द्वारा, .bash_profile
कुछ अनुकूलन के लिए अच्छा है, और .bashrc
दूसरों के लिए अच्छा है जैसे उपयोगकर्ता उपनामों और कार्यों को परिभाषित करना, या इसके विपरीत। इसलिए मैं .bash_profile
फ़ाइल के अंदर देखने का आदी नहीं था , और विशेष रूप से .profile
फ़ाइल नहीं , सभी उपयोगकर्ता निर्देशिका में, जो समान सिस्टम प्रतियां भी। चलो path_helper
मिश्रण में भी एक को मत भूलना (!), लेकिन किसी भी समस्या में योगदान नहीं दिया।
पर्यावरण को स्थापित करने के संभावित तरीके, जो सही हो सकते हैं या नहीं, इस प्रकार हैं:
अधिक जानकारी
अधिक अविश्वसनीय वर्बोसिटी के लिए, यहां कुछ उदाहरण पथ हैं जिन्हें मैंने विभिन्न वातावरणों के बीच समस्या को डीबग करते हुए कैप्चर किया है:
मूल (टूटी हुई) मछली PATH
/User/username/.rvm/gems/ruby-2.0.0-p648/bin/Users/username/.rvm/gems/ruby-2.0.0-p648@global/bin/Users/username/.rvm/rubies/ रूबी-2.0.0-p648 / bin /Users/username/.rvm/bin / usr / local / bin / usr / bin / usr / sbin / sbin / usr / local / munu /User/username/.rvm/ बिन
'स्वाभाविक रूप से' बेहतर मछली पाथ
/ usr / स्थानीय / ऑप्ट / coreutils / libexec / gnubin / usr / स्थानीय / ऑप्ट / findutils / बिन / usr / स्थानीय / बिन / usr / बिन / usr / sbin / sbin / usr / स्थानीय / munki
मूल (टूटा हुआ) बाट पाथ
/libexec/gnubin:/bin :/User/username/.rvm/gems/ruby-2.0.0-p648/bin/User/username/.rvm/gems/ruby-2.0-p648@global/bin/ उपयोगकर्ता /username/.rvm/rubies/ruby-2.0.0-p648/bin /Users/username/.rvm/bin / usr / local / bin / usr / bin / us / sbin / sbin / usr / लोकल / मुनकी : /Users/username/.rvm/bin
'मैन्युअल रूप से' फिक्स्ड बैश पैट
/libexec/gnubin:/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648/bin:/Users/username/.rvm/gems/ruby-2.0.0-p648@global/bin: /Users/username/.rvm/rubies/ruby-2.0.0-p648/bin:/Users/username/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin: /sbin:/usr/local/munki:/Users/username/.rvm/bin:/Users/username/.rvm/bin
'स्वाभाविक रूप से' बेहतर बैश PATH
/ Usr / स्थानीय / opt / coreutils / libexec / gnubin: / usr / स्थानीय / opt / findutils / बिन: / usr / स्थानीय / opt / coreutils / libexec / gnubin: / usr / स्थानीय / opt / findutils / बिन: / usr / स्थानीय / बिन: / usr / bin: / बिन: / usr / sbin: / sbin: / usr / स्थानीय / munki
टिप्पणियाँ:
- समस्या होने के दौरान कमांड लाइन दुभाषिया में 'मूल के ब्रांड नए वातावरण को शुरू करने से थे।
- 'मैनुअल' निश्चित रूप से तब होता है जब मैंने गलत पथ स्ट्रिंग लिया, वाक्यविन्यास त्रुटियों को ठीक किया, और दुभाषिया के अधिक उचित संचालन को देखा, इसलिए मुझे पता था कि जब मूल कारण को ठीक करना जारी रखना है तो क्या उम्मीद की जाए।
- 'नेचुरल' तब से थे जब मैंने पहली बार अपनी टर्मिनल एनवायरनमेंट कॉन्फिगरेशन फाइल्स जैसे कि लोडिंग को स्किप किया
.bashrc
था और आखिरकार प्रॉब्लम सॉल्व होने के बाद उन्हें चलाया था।
shell_session_update
ओएस एक्स द्वारा स्थापित एक बैश फ़ंक्शन है/etc/bashrc_Apple_Terminal
, इसलिए संभवतः बैश कमांड में कुछ ऐसा है कि आरवीएम रन इसे आउटपुट के रूप में बना रहा है।