खोजक-लॉन्च किए गए एप्लिकेशन के लिए PATH कैसे सेट करें


70

खोजक के माध्यम से लॉन्च किए गए एप्लिकेशन PATH का सम्मान नहीं करते हैं जैसा कि सेट किया गया है .bash_profile। इसलिए जब मैं एक IDE (Intellij) से कोड चलाने की कोशिश करता हूं तो मेरे पास अब उन कार्यक्रमों तक पहुंच नहीं है /usr/local/bin, जो आम तौर पर टर्मिनल में मेरे पथ में जोड़े जाते हैं।

जाहिरा तौर पर ऐसा करने .MacOSX/environment.plist का तरीका हुआ करता था, लेकिन अब यह शेर में काम नहीं करता है।

मैं PATHखोजक-लॉन्च किए गए एप्लिकेशन के लिए कैसे सेट कर सकता हूं ?


क्या आप सुनिश्चित हैं कि आपका स्वीकृत समाधान 10.8 पर काम करता है?
सोरिन

1
@SorinSbarnea (मुझे पता है कि यह पुराना है, लेकिन) मैं सत्यापित कर सकता हूं कि ओएस एक्स 10.8.3 पर मेरे लिए वर्तमान में स्वीकृत जवाब काम करता है, जब मैं सुझाए गए डॉक पुनरारंभ हैक का उपयोग करता हूं । (मैं एक अलग वातावरण चर स्थापित कर रहा हूं, हालांकि ऐसा नहीं $PATHहै जो मायने रखता है।)
कैल्रियन

यह भी देखें < stackoverflow.com/questions/829749/… > यह बहुत अधिक एक डुप्लिकेट है।
फिलिप कुंज

जवाबों:


38

यदि आप 10.7 पर हैं और 10.8 नहीं, तो नीचे दिया गया समाधान अच्छी तरह से काम करता है:

मुझे ग्रहण के साथ भी यही समस्या थी, लेकिन अब मैंने उदा को अपने साथ जोड़ लिया है .bash_profileऔर फिर यह काम कर गया।

export PATH=some_path:another_path
launchctl setenv PATH $PATH

मामले में आप मूल पथ का उपयोग छोड़ना चाहते हैं

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

इसके बजाय (या सिर्फ launchctl setenv PATH /my/new/path:$(launchctl getenv PATH))।

नोट: जब तक डॉक "पुनरारंभ" नहीं हो जाता तब तक लॉन्च किए गए पाथ को बदलना प्रभावी नहीं होगा। एक नई डॉक प्रक्रिया स्वचालित रूप से चालू हो जाएगी जब एक कमांड के साथ मारा जाता है:

killall Dock

1
मैंने प्रयोग करके समाप्त किया: "लॉन्चक्टल सेटेनव पाथ $ पाथ"। मौजूदा लॉन्चक्टल पथ को "$ p" के माध्यम से लागू करने से हर बार जब आप खोल खोलते हैं तो पथ को दोहराते हैं।
कैफीन कोमा

4
यह OS X 10.8 पर काम नहीं करता है - ग्रहण और IntelliJ के साथ प्रयास किया गया है - set|grep PATHउनमें से चल रहा हमेशा वापस आ जाएगाPATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin

1
मेरी तो (10.8.1) के लिए काम नहीं करता है
nohillside

4
आप होने के बाद भी गोदी पुन: प्रारंभ कर सकता है launchctl: osascript -e 'tell app "Dock" to quit'। यह मेरे लिए इसे ठीक करने के लिए लग रहा था।
इवान आंद्रस

2
यह मेरे लिए 10.12 में काम करता है, लेकिन केवल एक बंद के रूप में। मशीन को पुनरारंभ करने के बाद प्रभाव खो जाते हैं।
Dover8

19

आपकी 'नई' समस्या के बारे में सवाल करने के लिए, मैंने एक और उत्तर लिखने का फैसला किया है - क्योंकि नमूनों के साथ समझाना आसान है।

पसंद के अपने टूल (आईडीई) के पर्यावरण चर को लोड करने का एक तरीका यह है कि यह ग्रहण के साथ किया जा सकता है - मुझे लगता है कि आपके उपकरण (आईडीई) में भी समान संरचना होनी चाहिए।

इसे ग्रहण में कैसे किया जा सकता है - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(पर्यावरण चर के बारे में थोड़ा फिर से लिखा गया है)

ग्रहण एप्लिकेशन बंडल निर्देशिका में "eclipse.sh" नामक एक खाली पाठ फ़ाइल बनाएं /Applications/eclipse/Eclipse.app/Contents/MacOS

एक पाठ संपादक में ग्रहण खोलें। निम्नलिखित सामग्री दर्ज करें:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

टर्मिनल में शेल स्क्रिप्ट एक्लिप्स के निष्पादन योग्य ध्वज को सेट करें। यानी:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

Eclipse.app Info.plist खोलें और ग्रहण से ग्रहण करने के लिए कुंजी CFBundleExecutable के लिए मान बदलें।

MacOS X स्वचालित रूप से पता नहीं लगाता है कि Eclipse.app की Info.plist बदल गई है। इसलिए आपको lsregister कमांड का उपयोग करके टर्मिनल में LaunchService डेटाबेस को अपडेट करने के लिए मजबूर करने की आवश्यकता है:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

अगली बार जब आप Eclipse.app लॉन्च करते हैं डॉक से या फाइंडर से पर्यावरण चर सेट किया जाना चाहिए।


एक स्पष्ट और सटीक स्पष्टीकरण के लिए +1, और इस तथ्य के लिए कि छह साल बाद, यह अभी भी हाई सिएरा, 10.13.x के साथ काम करता है।
dgnuff

16

OS X 10.10 योसेमाइट पर, मैंने इस कमांड का उपयोग किया:

sudo launchctl config user path <my path setting>

ज्ञात हो कि उनका लॉन्च सभी उपयोगकर्ताओं के लिए लॉन्च PATH है । इसने मेरे उपयोग के मामले में अच्छा काम किया। ध्यान दें कि आपको होल्ड करने के लिए अपनी मशीन को रिबूट करने के लिए कहा जाएगा।


ऐसा लगता है कि लॉगिन पर फिर से खुलने वाले अनुप्रयोगों के पैठ पर्यावरण चर पर कोई प्रभाव नहीं पड़ता है (जो बंद होने पर खुले थे)।
ब्रेख्त मचाइल्स

4
इस जवाब ने मेरे लिए काम किया। विशेष रूप से, ब्रू-प्रबंधित निष्पादन योग्य का उपयोग करने के लिए, मुझे sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinरिबूट करना पड़ा ।
JP

Homebrew आधारित अनुप्रयोगों के लिए / usr / स्थानीय / बिन को जोड़ने के लिए यह सबसे अच्छा उत्तर है। दोस्तों कृपया इस उत्तर को वोट करें! यह 10.11 और 10.12 में भी काम करता है (10.13 में खुद का परीक्षण नहीं किया गया है)। environment.plistज्यादातर मामलों में गड़बड़ करने की कोई जरूरत नहीं है ।
मार्क एडिंगटन

इसने मेरे लिए काम किया जबकि स्वीकृत उत्तर नहीं मिला
माइकल किरकिरे

11

माउंटेन लायन पर /etc/pathsऔर /etc/launchd.confसंपादन में कोई प्रभाव नहीं पड़ता है!

Apple के डेवलपर फ़ोरम कहते हैं:

".App के Info.plist को स्वयं बदलें" LSEnvironment "शब्दकोश जिसमें आप चाहते हैं पर्यावरण चर के साथ।

~ / .MOSOSX / environment.plist अब समर्थित नहीं है। "

इसलिए मैंने सीधे ऐप को संपादित किया Info.plist("AppName.app" पर राइट क्लिक करें (इस मामले में SourceTree) और फिर " Show package contents")

पॅकेज की विषय वास्तु दिखाओ

और एक नई कुंजी / तानाशाह जोड़ी को जोड़ा:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(देखें: Apple में LaunchServicesKeys प्रलेखन )

यहाँ छवि विवरण दर्ज करें

अब App (मेरे मामले में SourceTree) दिए गए रास्ते का उपयोग करता है और git 1.9.3 के साथ काम करता है :-)

पुनश्च: बेशक आपको अपने विशिष्ट पथ की जरूरतों के लिए पथ प्रविष्टि को समायोजित करना होगा।


क्या ये सच है? मुझे विरोधाभासी जानकारी के साथ बहुत सी पोस्ट दिखाई देती हैं, जिनमें से कुछ स्पष्ट रूप से पुरानी हैं, लेकिन जिनमें से कुछ हाल ही में प्रतीत होती हैं। मेरे पास (10.8.2 पर) /etc/launchd.confवैसे भी नहीं है। मुमकिन है, नियम कहते हैं कि क्षुधा नहीं है, भले ही चाहिए पथ के लिए उनके Info.plist फ़ाइलों का उपयोग, वे अभी भी अन्य फ़ाइलों का उपयोग किया जा सकता है - /etc/launchd.conf, /etc/paths/, या /etc/paths.d/*, या `~ / .MacOSX / environment.plist। यह तो कहना है कि, सुरक्षित है व्यवहार में , माउंटेन शेर में जीयूआई क्षुधा के लिए रास्तों इन फ़ाइलों में से किसी में सेट किया जा सकता है?
ओरोम

2
यह Info.plist एकमात्र ऐसी चीज थी जो मेरे लिए काम करती थी, मेरे Maverics और ग्रहण के साथ lauchd.conf, आदि / पथ आदि की कोशिश करने के बाद। वास्तव में यह तुरंत भी काम नहीं करता था, आपको दो चीजें याद रखने की आवश्यकता है: 1. /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.appएक और उत्तर में दिए गए अनुसार चलाएं , प्लिस्टिंग बदलने के बाद और 2. वहां पूर्ण पथ जोड़ें , आप अपनी प्रोफ़ाइल स्क्रिप्ट में मौजूदा पैट का उपयोग नहीं कर सकते।
जाकल

यह सिएरा (10.12) पर काम करता है। लेकिन यह अभी भी lsregisterकमांड को चलाने के लिए आवश्यक है , जैसा कि @JaLL ने नोट किया है।
अलास्टेयर हैरिसन

1

माउंटेन लायन (10.8.4) पर $PATHकिसी तरह विशेष व्यवहार किया जाता है। बाद में डॉक से या फाइंडर (जबकि ठीक काम करता है) से लॉन्च किए गए Terminal.app या Emacs.app उदाहरणों launchctl setenv PATH /your/path:/hereपर कोई प्रभाव नहीं पड़ता है । इसके अलावा काम नहीं करता है। एकमात्र तरीका है कि मैंने पाथ को हर जगह सही ढंग से सेट करने के लिए पाया है। दुर्भाग्य से, कोई भी इस तरह के वातावरण का उपयोग नहीं कर सकता है , इसलिए मेरे लैपटॉप पर सभी उपयोगकर्ताओं के पास है । वह केवल मैं ही हूं, इसलिए मुझे कोई फर्क नहीं पड़ता।$PATHlaunchctl setenv SPONG foo$HOME/.launchd.conf/etc/launchd.conf$HOME/Users/nb/bin$PATH


आपको पता होना चाहिए कि टर्मिनल प्रक्रिया PATHआपके द्वारा निर्धारित मूल्य को चुनती है , लेकिन: जब आप एक नया टर्मिनल बनाते हैं तो यह एक लॉगिन शेल शुरू करता है, जो कि यदि आप बैश का उपयोग कर रहे हैं-निष्पादित करता है /etc/profile, जो PATHकि लौटाए गए मूल्य से आरंभ करता है /usr/libexec/path_helper। यदि आप शैल> नया कमांड चुनते हैं ... और चलाएं env(शेल में नहीं) तो आपको यह पता लगाना चाहिए कि PATHआप लॉन्च के माध्यम से निर्धारित मूल्य है।
क्रिस पेज

-1

अपने ~ / .profile या ~ / .bash_profile या ~ / .zprofile (zsh के लिए) में पथ सेट करने का प्रयास करें। यह मेरे लिए विम के साथ काम करता है - यह गोदी से लॉन्च किए जाने के दौरान पेट नहीं पढ़ रहा था, लेकिन टर्मिनल से लॉन्च होने पर यह काम करता था। मैं रास्ते में OSX 10.11 पर चल रहा था।

मेरे पास इस पर एक अच्छा पर्याप्त हैंडल नहीं है कि आप इसे क्यों काम करते हैं, इसका एक बड़ा विवरण देने के लिए, विभिन्न कॉन्फ़िगरेशन फ़ाइलों के बारे में ऑनलाइन बहुत सारे स्पष्टीकरण हैं और वे क्या करते हैं: https://stackoverflow.com/questions/415403/ क्या-अंतर-बीच-bashrc-बैश प्रोफ़ाइल और पर्यावरण

इसी तरह की चर्चा यहाँ भी देखें: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893 # 24542893


सवाल पूछता है कि यह डॉक से लॉन्च किए गए ऐप के लिए कैसे करना है जो फाइंडर से लॉन्च के समान है जो आप कहते हैं कि आपका जवाब काम नहीं करता है - और हम ठीक से समझा सकते हैं कि यह काम क्यों नहीं करता है
user151019

-3

मैक ओएस एक्स 10.8.4, माउंटेन लायन पर, पथ पर्यावरण इस फ़ाइल में सूचीबद्ध पथों को शामिल करता है:

/etc/paths

आप कमांड लाइन टूल का उपयोग करके इस फाइल को संपादित कर सकते हैं, जैसे vimकि निम्न कमांड का उपयोग करना:

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