سؤال كيف أقوم بتعيين متغير بيئة PATH العالمي على OS X؟


أود الإلحاق بمتغير بيئة PATH العالمي على OS X حتى تحصل جميع قذائف المستخدم وتطبيقات GUI على نفس بيئة PATH.

أعلم أنه يمكنني إلحاق المسار في البرامج النصية لبدء تشغيل shell ، ولكن هذه الإعدادات غير موروثة بواسطة تطبيقات واجهة المستخدم الرسومية.

الطريقة الوحيدة التي وجدت حتى الآن هي إعادة تعريف متغير بيئة PATH في /etc/launchd.conf:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

لم أتمكن من معرفة طريقة لإلحاق PATH بها فعليًا launchd.conf.

أنا قلق بعض الشيء حول هذه الطريقة ، ولكن حتى الآن هذا هو الشيء الوحيد الذي يعمل. هل هناك طريقة أفضل؟


97
2018-05-31 19:08


الأصل


نرى: stackoverflow.com/questions/347286 - rjmunro
ل Yosemite ولاحقا ، انظر stackoverflow.com/questions/25385934/... - thSoft
أي من الإجابات هنا تتناول سؤال OP. لكن التعليق هنا من thSoft حق على المال! ربما ينبغي دمج هذا أو ربطه بالسؤال المشار إليه: stackoverflow.com/questions/25385934/... - Kevin Buchs


الأجوبة:


معلومات palmer في واجهة المستخدم الرسومية صحيح ، ولكن هناك طريقة أكثر قابلية للصيانة لتعديل المسار الذي تراه shell. مثل وقال mediaslave، يمكنك تحرير /etc/paths، ولكن حتى أفضل يمكنك إسقاط ملف نصي في /etc/paths.d/ يحتوي على مسار فيه وستقوم جميع الأصداف بإنشاء المسار بشكل صحيح.

على سبيل المثال ، على نظامي:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

70
2018-05-28 06:53



جميل شكرا! ملاحظة: هذا يتطلب منك تسجيل الخروج وتسجيل الدخول قبل أن يعمل. - weronika
weronika: وجدت أنه كان كافياً للانسحاب وإعادة إطلاقه X11 (أقل إيلامًا من تسجيل الخروج تمامًا). لم أحاول ذلك Terminal. - Peter Gluck
كنت أشير إلى المحطة - كنت على حق ، نسيت أن تحدد. - weronika
من الجيد معرفة ذلك ، ولكنه لا يجيب على سؤال OP في أن هذه الآلية لا تنطبق على تطبيقات واجهة المستخدم الرسومية. وكان البروتوكول الاختياري يبحث عن موحد الحل الذي يسمح له ألحق إلى الافتراضي $PATH. - mklement
ماذا تقصد ب "نظامي" هنا ،cogg؟ ألسنا جميعا باستخدام OS X هنا؟ عذرًا ، ما زلت جديدًا في OS X. أستخدم OS X 10.7 - ericn


/etc/launchd.conf

ال launchd.conf الملف هو ** الحل الكامل الوحيد الذي سيعمل على كل من سطر الأوامر وتطبيقات واجهة المستخدم الرسومية على OS X v10.8 (أسد الجبل) و v10.9 (مافريكس) ، واحدة من شأنها أن تعمل مع تطبيقات واجهة المستخدم الرسومية ، لجميع المستخدمين.

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

إضافة

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

في المثال أعلاه أضفتها /usr/local/bin إلى قيم البيئة الافتراضية لـ PATH.

ضع في اعتبارك أن هذا الملف ليس نصيًا ولا يتوفر لديك خيار استخدام التبديلات. أيضا ، لتطبيق هذه تحتاج إلى إعادة تشغيل الكمبيوتر.

تذكر أن جميع الحلول الأخرى هي حلول جزئية فقط:

  • environment.plist لا يعمل للتطبيقات التي يتم تشغيلها عبر Spotlight.
  • /etc/paths - فقط للكونسول
  • /etc/csh.cshrc أو /etc/bashrc - فقط لبعض القذائف

تعتمد هذه الإجابة على السؤال نفسه من ضبط متغيرات البيئة على نظام التشغيل Mac OS X.


47
2018-06-04 20:30



اكتشاف رائع ، ولكن السؤال يتحدث بالفعل launchd ويسأل عن كيفية القيام بذلك ألحق إلى الطريق في ذلك. - cregox
هل أضفت بالفعل تعليقًا على السؤال الأصلي الذي يشير إلى نفسك على أنه "الإجابة الحقيقية"؟ - TJ Luoma
انها ضمنية من خلال - مفيدة - الإجابة ، ولكن فقط لتوضيح ذلك: رغبة OP ل ألحق إلى المسار الافتراضي غير معتمد ، لأنه لا يمكنك الرجوع إلى متغيرات البيئة الأخرى في /etc/launchd.conf. - mklement
ليس عالميًا - ستتجاهل بيئة سطر الأوامر هذا عند / etc / profile calls_helper ويستعيد PATH من / etc / paths و /etc/paths.d/ - Dave X
بالنسبة الى apple.stackexchange.com/questions/106355/...، هذا لم يعد يعمل ل Yosemite أو في وقت لاحق - ericn


سيكون عليك ضبطها على أساس كل قذيفة على حدة ؛ لا تشترك قذائف Bash و csh-like في نفس ملفات التكوين وصيغتها لتعديل PATH.

تحاول القيام بذلك في launchctl لن تعمل ، لأنه يتم تعيين متغيرات البيئة على تسجيل الدخول ؛ لا يوجد نظام واسع في Unix خارج جلسة shell.

لذا سترغب في الإضافة

setenv PATH "$PATH:/add/my/extra/path"

إلى /etc/csh.cshrc و

export PATH="$PATH:/more/paths:/

إلى /etc/bashrc.

إذا كنت تريد متغيرات البيئة في تطبيقات واجهة المستخدم الرسومية ، فهذا أمر أكثر تعقيدًا. عليك إنشاء .MacOSX/environment.plist ملف في الدليل الرئيسي لكل مستخدم. ال .MacOSX من المحتمل ألا يكون الدليل موجودًا بشكل افتراضي ، لذا سيتعين عليك إنشائه.

يشبه تنسيق الملف كما يلي:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

أكثر على environment.plist  موجود على موقع Apple.


7
2018-06-01 12:24



لكن الإعدادات سارية المفعول عند تعيينها في /etc/launchd.conf ... هممم ... / أنا مشوشة. - Xerxes
هل حقا؟ ما هو متغير البيئة الذي تضعه هناك؟ - palmer
مجرد تحديث اعتبارا من OS X 10.8: ~/.MacOSX/environment.plist لم يعد النهج معتمدًا ولا يوجد بديل على مستوى المستخدم. على نطاق النظام يمكنك استخدامها /etc/launchd.conf (وهناك حل لكل تطبيق *). - mklement
لا يجيب على أسئلة OP. - Kevin Buchs


يمكنك تحرير المسار العام الخاص بك عن طريق إضافة خطوط إلى /etc/paths، مسار واحد لكل سطر.

sudo nano /etc/paths يجب أن ينقلك هناك.


3
2017-09-03 18:04



من الجيد معرفة ذلك ، ولكنه لا يجيب على سؤال OP في أن هذه الآلية لا تنطبق على تطبيقات واجهة المستخدم الرسومية. - mklement


هل كان لديك نظرة على صفحة الرجل ل path_helper الأداة المساعدة لسطر الأوامر على OS X؟ أجبت سؤال متعلق إلى حد ما على SO أعتقد أنك قد تجدها مفيدة.


1
2018-06-01 12:50





لست متأكدا إذا كان أي شخص مغطى الابسط وأكثر أنيق الطريقة. على الأقل في ماك OS X v10.6 (سنو ليوبارد).

العبث مع [/etc/|~/.] من [profile|bashrc] قد تعمل الملفات ، ولكنها نوعًا ما من الاختراق. ال /etc/paths.d/ الدليل هو الطريق للذهاب:

  • سودو إلى محرر المفضلة لديك.
  • قم بإنشاء ملف جديد باسم *name* (فقط لا اسم شيء موجود بالفعل) في /etc/paths.d/ مع مسار لكل سطر:

    /usr/X11/bin
    /Developer/usr/bin
    
  • ثم تضيف

    eval '/usr/libexec/path_helper -s`
    

    إلى profile أو bashrc، ويجب أن تكون على ما يرام.


1
2018-01-31 07:22



من الجيد معرفة ذلك ، ولكنه لا يجيب على سؤال OP في أن هذه الآلية لا تنطبق على تطبيقات واجهة المستخدم الرسومية. - mklement
هو اسم الملف حرفيا *name*؟ أو تقصد فقط name؟ - Peter Mortensen


لست متأكدًا من قبول launchd هذا ، ولكن حاول:

setenv PATH "$ PATH: / my / path"

0
2018-05-31 19:26



لسوء الحظ ، هذا لا يعمل. لا يبدو أن launchctl يمكنه الوصول إلى متغيرات البيئة بهذه السهولة. هناك أمر للحصول على متغيرات البيئة ، ولكن ليس هناك أي وثائق على الإطلاق حول كيفية استخدامها. - lajos