$ पेट मुझे पागल कर रहा है


10

ठीक है, माफी माँगता हूँ अगर यह कुछ गूंगा है, लेकिन मैं विचारों से बाहर चल रहा हूं।

लक्ष्य: पहले जोड़ें /usr/local/binकरने के लिए$PATH

समस्या: $PATH मैं जो चाहता हूँ या उम्मीद नहीं करूँगा

मुझे यहां कैसे मिला: मैं प्रोग्राम सीखना शुरू करना चाहता हूं, इसलिए मैं हुड के नीचे आराम से गड़बड़ कर रहा हूं, लेकिन बहुत अनुभव नहीं है। मैंने fishशेल स्थापित किया (क्योंकि यह अनुकूल है!) का उपयोग करके homebrewऔर इसे मेरे डिफ़ॉल्ट शेल (अंडर system prefs>users & groups>advanced) के रूप में सेट करें । कुछ बिंदु पर, मैं भाग गया brew doctorदेखने के लिए अगर मेरी इंस्टॉल उन सभी कोषेर थे, और यह सुझाव दिया मैं ले जाने /usr/local/binके सामने से $PATHइतना है कि मैं की मेरी स्थापना इस्तेमाल कर सकते हैं gitप्रणाली की नकल के बजाय। ठीक है - लेकिन बीच path_helperऔर fish, कुछ ऐसा हो रहा $PATHथा जो मेरे नियंत्रण से बाहर था, और मुझे कभी भी सही तरीके से व्यवस्थित रास्ते नहीं मिल सकते थे।

पर्यावरण: OSX 10.8.2, साथ, 10.7ish से उन्नत बनाया xcodeहै, और DevTools स्थापित प्लस x11, homebrewऔरfish

: अधिक जानकारी मैं अपने उपयोगकर्ता के डिफ़ॉल्ट खोल वापस निर्धारित किया है bash, और गोले की एक किस्म की कोशिश की के माध्यम से terminal.app- bash, fish, sh। मैं /usr/local/binशीर्ष पर चला गया /etc/pathsलेकिन यह कुछ भी नहीं बदला। मैंने विभिन्न config.fishफाइलों को देखा और उन सामानों पर टिप्पणी की जो $ PATH के साथ खिलवाड़ कर सकते हैं, मदद नहीं की। मेरे पास निम्नलिखित फाइलें हैं /etc/paths.d/:

./10-homebrew युक्त /usr/local/bin

./20-fish युक्त /usr/local/Cellar/fish/1.23.1/bin

./40-XQuartz युक्त /opt/X11/bin

मैंने set +xअपने साथ जोड़ा profileऔर जब मैं शुरू करता terminal.appहूं तो मुझे मिलता है:

Last login: Mon Oct  1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4 
Chriss-iMac:~ c4$

तो ऐसा लगता है कि path_helper चलता है, लेकिन फिर echo $PATHमुझे नेट चलाता है /usr/bin:/bin:/usr/sbin:/sbin। तो, ऐसा लगता path_helperहै कि यह भी नहीं कर रहा है कि यह अब और क्या चाहिए?

मुझे यकीन है कि यहां कुछ अच्छी तरह से परिभाषित व्यवहार है जो मुझे समझ में नहीं आता है, या मैंने इसे ठीक करने की कोशिश करते हुए कुछ बोर्क किया है। कृपया सहायता कीजिए!


ध्यान दें, मैं इसके लिए काम करने के लिए प्राप्त कर सकते हैं fishबनाने के द्वारा ~/.config/fish/config.fishके साथ set PATH /usr/local/bin $PATHलेकिन मैं अभी भी की समस्या आ रही है path_helperजाहिरा तौर पर लगता है कि यह कार्य नहीं करने, और $PATHइस प्रकार अधूरा होने के। अभी भी $PATHस्क्रिप्ट के लिए अलग-अलग का मुद्दा है , जीयूआई, आदि से शुरू होने वाले ऐप्स
क्रिस

जवाबों:


5

समाधान:

चुनें कि क्या आप एक सिस्टम वाइड सेटिंग या एक उपयोगकर्ता विन्यास चाहते हैं और उचित विन्यास फाइल को संपादित करते हैं, मछली के साथ path_helper का उपयोग न करें।

अधिक

प्रणाली के लिए मछली स्रोत / आदि / प्रोफ़ाइल नहीं करती है, और उपयोगकर्ता विन्यास के लिए यह क्रमशः /etc/fish/config.con और ~ / .config / मछली / config.fish पढ़ेगा।

path_helper का उपयोग उन गोले के लिए होता है, जो एक सिस्टम वाइड प्रोफाइल फ़ाइल (sh, csh और उनके व्युत्पन्न) को स्रोत बनाते हैं। चूंकि 10.7 path_helper / etc / पथों में ऑर्डर का सम्मान करने के लिए लगता है, AFAIR में यह 10.6 में नहीं था और इसके साथ सामना करना कठिन था।

यदि आप वास्तव में मछली के साथ path_helper का उपयोग करना चाहते हैं, तो आपको इसके आउटपुट को पार्स करने की आवश्यकता होगी क्योंकि यह केवल -s और -c विकल्पों के साथ sh और csh सिंटैक्स प्रदान करेगा ।

कुछ इस तरह

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

काम करना चाहिए:

[१] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization


महान! मेरे पास अभी यही है: if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end- यहाँ मछली 2 और मैक ओएस
10.8.3 के

3

मुझे /etc/paths.d, path_helper, और c। के बारे में बिल्कुल पता नहीं है, जो सभी मुझे अत्यधिक जटिलताओं की तरह लगते हैं, लेकिन आपके ~ / .bashrc के अंत में निम्नलिखित आपको सही रखना चाहिए।

 PATH=/usr/local/bin:$PATH

उम्मीद है की यह मदद करेगा!


धन्यवाद हारून - path_helperएक OSX- विशिष्ट उपयोगिता है जो माना जाता है कि $PATHलॉगिन से /etc/pathsऔर फिर पढ़ने से /etc/paths.d/*। वैसे भी, मैं समझता हूं कि आपका सुझाव मुझे इसके लिए ठीक करना चाहिए bash, लेकिन मैं वास्तव में चाहता हूं कि यह fish(और पूरे सिस्टम में लगातार काम करे , अगर यह उम्मीद करने के लिए बहुत ज्यादा नहीं है)।
क्रिस

आह - इस बारे में क्षमा करें। मैं खुद एक ओएस एक्स उपयोगकर्ता नहीं हूं, और अधिक दया करता हूं, लेकिन Google के एक बिट से यह लगता है कि यह स्टैक ओवरफ्लो प्रश्न अधिक हो सकता है जैसे कि आप इसके बाद क्या हैं - यह कहा, फिर से, मैं एक नहीं हूं ओएस एक्स उपयोगकर्ता खुद, और केवल इसलिए जवाब दिया क्योंकि एक त्वरित (पढ़ें: लापरवाह) आपके प्रश्न को देखो मुझे लगता है कि आप केवल बैश में रुचि रखते थे, इसलिए नमक के कई अनाज के साथ यहां मेरी सलाह लें। आशा है कि यह मदद करता है, सभी एक ही -
हारून मिलर

3

जवाब देने के लिए और उन सभी के लिए धन्यवाद, जिन्होंने स्टैनेक्सचेंज साइटों पर इसी तरह के अन्य सवालों के जवाब दिए। पश्चाताप के लिए, यहाँ है जो मुझे पता लगा:

  1. path_helper/etc/profileसिंटैक्स द्वारा कहा जाता है eval '/usr/libexec/path_helper -s'(जहां प्रेरित वास्तव में बैकटिक्स हैं)। एक डमी की तरह, मुझे नहीं पता था कि कैसे बैकटिक्स ने काम किया है, और इसलिए उन्हें किसी कारण से उद्धरण में बदल दिया है। इससे मेरा profileलोडिंग टूट गया path_helper। बैक-टिक्स बदल दिया और अब यह काम करता है जैसे यह (निश्चित रूप से) होना चाहिए।
  2. set PATH /usr/local/bin $PATHअपने उपयोग में ~/.config/fish/profile.fishयह सुनिश्चित करता है कि मुझे अपने पसंदीदा शेल में सही ऑर्डर मिले, लेकिन जब तक path_helperकाम करता है यह बेमानी हो सकता है।
  3. यह सुनिश्चित करने के लिए कि $PATHस्क्रिप्ट, जीयूआई ऐप आदि के लिए पूर्ण उपलब्ध है, यह एक टॉस-अप launchd.confऔर environment.plist... अभी भी उस पर शोध कर रहा है।

1
मैं सिर्फ दूसरे दिन पढ़ता हूं (लेकिन मुझे स्रोत याद नहीं है) कि 10.8 अब सभी ऐप्स को एक रास्ता दिखाई नहीं देता है। मुझे विशेष रूप से याद है कि पर्यावरण.प्लिस्ट अब पढ़ा नहीं जाता है; मैं लॉन्चड.कॉनफ के बारे में पूरी तरह से वाकिफ हूं, ताकि काम हो सके, लेकिन मुझे लगता है कि लेख ने सुझाव दिया कि यह नहीं होगा।
इकोरिस्टोफ़र्सन

1
अधिक अनुवर्ती: यह मछली में path_helper काम करता है की तरह नहीं दिखता है; यह csh या bash syntax दोनों को आउटपुट करता है, जो दोनों असंगत हैं। इसके बजाय, आप बिल्ली /etc/paths.d/* को ~ / .config / मछली / config.fish (मछली स्टार्टअप स्क्रिप्ट) का उपयोग कर सकते हैं और उन्हें $ PATH में जोड़ सकते हैं। आशा है कि किसी की मदद करता है!
क्रिस

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