سؤال

تحديث:على الرابط أدناه لا إجابة كاملة.الحاجة إلى تحديد مسار أو متغير في مكانين (واحد واجهة المستخدم الرسومية واحد شل) ضعيف.

لا مكررة: إعداد متغيرات البيئة في OS X ؟


قادمة من خلفية ويندوز حيث أنه من السهل جدا لضبط و تعديل متغيرات البيئة (فقط اذهب الى خصائص النظام > خيارات متقدمة > متغيرات البيئة) ، فإنه لا يبدو أن يكون ذلك على التوالي إلى الأمام على نظام التشغيل Mac OS 10.5.معظم المراجع يقول يجب تحديث /etc/profile أو ~/.الملف الشخصي.هي تلك يعادل متغيرات النظام و المستخدم المتغيرات ؟ على سبيل المثال ، حيث يجب أن أضع بلدي JAVA_HOME متغير ؟


تحرير:

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

هل كانت مفيدة؟

المحلول

وليس هناك حاجة للتكرار. يمكنك تعيين متغيرات البيئة التي يستخدمها launchd (العمليات والطفل، أي شيء بدء من الضوء) باستخدام launchctl setenv.

وعلى سبيل المثال، إذا كنت تريد أن تعكس المسار الحالي في launchd بعد إعداده في .bashrc أو في أي مكان:

PATH=whatever:you:want
launchctl setenv PATH $PATH

لا يتم تحديث متغيرات البيئة تلقائيا في تشغيل التطبيقات. سوف تحتاج إلى إعادة إطلاق تطبيقات للحصول على متغيرات البيئة المحدثة (على الرغم من أنك يمكن أن مجرد تعيين متغيرات في قذيفة الخاص بك، على سبيل المثال PATH=whatever:you:want، وليس هناك حاجة لإعادة إطلاق محطة).

نصائح أخرى

هناك العديد من الأماكن حيث يمكنك تعيين متغيرات البيئة.

  • ~/.profile:استخدام هذه المتغيرات تريد تعيين في جميع البرامج التي أطلقت من محطة (ملاحظة أنه على عكس لينكس قذائف فتح في الطرفية.التطبيق تسجيل الدخول قذائف).
  • ~/.bashrc:هذا هو الاحتجاج على القذائف التي لا تسجيل الدخول قذائف.استخدام هذه الأسماء المستعارة وغيرها من الأمور التي تحتاج إلى تعريف في subshells ، وليس متغيرات البيئة التي ورثت.
  • /etc/profile:هذا هو تحميلها من قبل ~/.الشخصية ، أو ما يعادلها.استخدامه عندما تريد من المتغير إلى تطبيق برامج محطة أطلقت من قبل كل المستخدمين على الجهاز (على افتراض أنها تستخدم باش).
  • ~/.MacOSX/environment.plist:هذا هو قراءة loginwindow على تسجيل الدخول.وهو ينطبق على جميع التطبيقات ، بما في ذلك واجهة المستخدم الرسومية منها ، ما عدا تلك التي أطلقها الضوء في 10.5 (لا 10.6).فإنه يتطلب منك تسجيل الخروج ثم تسجيل الدخول مرة أخرى على التغييرات نافذة المفعول.هذا الملف لم يعد معتمدا من OS X 10.8.
  • المستخدم الخاص بك launchd على سبيل المثال:وهذا ينطبق على جميع البرامج التي أطلقت من قبل المستخدم, واجهة المستخدم الرسومية CLI.يمكنك تطبيق التغييرات في أي وقت باستخدام setenv القيادة في launchctl. في نظرية, ، يجب أن تكون قادرة على وضع setenv الأوامر في ~/.launchd.conf, ، launchd أن قراءتها تلقائيا عندما يقوم المستخدم بتسجيل الدخول ، ولكن في الممارسة دعم هذا الملف لم تنفذ أبدا.بدلا من ذلك يمكنك استخدام آلية أخرى إلى تنفيذ السيناريو في تسجيل الدخول ، ويكون هذا السيناريو الاتصال launchctl لإعداد launchd البيئة.
  • /etc/launchd.conf:هذا هو قراءة launchd عند بدء تشغيل النظام و عندما يقوم المستخدم بتسجيل الدخول.أنها تؤثر على كل عملية على النظام ، لأن launchd هو عملية الجذر.لتطبيق التغييرات على التوالي الجذر launchd يمكنك الأنابيب الأوامر إلى sudo launchctl.

الأشياء الأساسية لفهم هي:

  • متغيرات البيئة موروثة من خلال عملية أطفال في وقت هم متشعب.
  • الجذر هو عملية launchd سبيل المثال ، هناك أيضا منفصلة launchd سبيل المثال في جلسة عمل المستخدم.
  • launchd يسمح لك بتغيير الحالي متغيرات البيئة باستخدام launchctl;تحديث المتغيرات ثم ورثها جميع العمليات الجديدة كان شوك من ذلك الحين فصاعدا.

مثال على إعداد بيئة متغيرة مع launchd:

echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl

الآن إطلاق واجهة المستخدم الرسومية التطبيق الذي يستخدم متغير ، وفويلا!

كمحاولة للتغلب على حقيقة أن ~/.launchd.conf لا يمكنك وضع البرنامج النصي التالي في ~/Library/LaunchAgents/local.launchd.conf.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>local.launchd.conf</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl &lt; ~/.launchd.conf</string>    
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

ثم يمكنك وضع setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE داخل ~/.launchd.conf, و سيتم تنفيذه في كل تسجيل الدخول.

لاحظ أنه عند الأنابيب قيادة قائمة في launchctl في هذا الشكل, سوف لا تكون قادرا على تعيين متغيرات البيئة مع القيم التي تحتوي على مسافات.إذا كنت بحاجة إلى ذلك ، يمكنك الاتصال launchctl على النحو التالي: launchctl setenv MYVARIABLE "QUOTE THE STRING".

لاحظ أيضا أن البرامج الأخرى التي تعمل في الدخول قد نفذ قبل launchagent ، وبالتالي قد لا ترى متغيرات البيئة فإنه مجموعات.

وأعتقد أن ما تبحث البروتوكول الاختياري لهو حل بسيط ويندوز مثل.

وهنا يا الذهاب:

https://www.macupdate.com/app/mac/14617/rcenvironment

يمكنك الاطلاع على لينكس ، وهو قريب جدا إلى ما Mac OS X.أو يمكنك الاطلاع على BSD Unix الذي هو أقرب قليلا.معظم الاختلافات بين لينكس و BSD لا تصل إلى الكثير.

/etc/profile هي متغيرات بيئة النظام.

~/.profile المستخدم الخاصة متغيرات البيئة.

"أين يجب أن أضع JAVA_HOME متغير؟"

  • هل لديك العديد من المستخدمين ؟ لا نهتم ؟ هل الفوضى بعض المستخدمين الآخرين قبل تغيير /etc/profile?

عموما أنا أفضل لا تعبث مع النظام-إعدادات واسعة على الرغم من أنني الوحيد المستخدم.أنا أفضل أن تعديل إعدادات المحلية.

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

لتطبيقات انطلقت من محطة، يمكنك أيضا تحرير ~ / ملف .profile.

ومجرد فتح ملف ~/.profile، عبر nano في محطة واكتب هناك:

export PATH=whatever/you/want:$PATH

وحفظ هذا الملف (كمد + X و Y). بعد ذلك من فضلك خروج / تسجيل الدخول مرة أخرى أو مجرد فتح علامة تبويب جديدة في محطة ومحاولة استخدام المتغير الجديد.

ومن فضلك لا تنسى أن تضيف ": $ PATH". بعد كل ما / أنت / تريد، وإلا سوف يمحو جميع المسارات في المتغير PATH، والتي كانت هناك قبل ذلك

مزامنة OS X متغيرات بيئة سطر الأوامر واجهة تطبيقات من مصدر واحد مع osx-env-sync.

لقد نشرت أيضا إجابة على سؤال آخر ذو صلة هنا.

إذا كنت ترغب في تغيير متغيرات البيئة بشكل دائم على ماك, مجموعة منهم في /etc/paths. ملاحظة, هذا الملف للقراءة فقط بشكل افتراضي ، لذا عليك أن chmod للحصول على أذونات الكتابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top