মাভারিক্স রিলিজ হওয়া পর্যন্ত আমি ওএসএক্সের পাথ ইস্যুগুলি সমাধান করার পরে, সমস্যাগুলি ইয়োসেমাইটে ফিরে আসবে !!!
সুতরাং আমি কার্বন ইম্যাকস বা আরস্টুডিওরlaunch.conf
মতো জিইউআই অ্যাপ্লিকেশনগুলিতে PATH পরিবেশের পরিবর্তনশীল পেতে, নতুন ম্যাক ওএসএক্স 10.10 ইয়োসেমাইট রিলিজের পুরানো বৈশিষ্ট্যটি নকল করতে চাই । আমি স্ট্যাকওভারফ্লো ব্যবহারকারী উরস এর দুর্দান্ত ধারণাটি একটি শেল স্ক্রিপ্ট সেটআপ করতে ব্যবহার করি যা এর মাধ্যমে পরিবেশের ভেরিয়েবলগুলি কনফিগার করে । (তার স্ট্যাকওভারফ্লো উত্তরটি এখানে দেখুন )) এটি বেশিরভাগ পরিবেশের ভেরিয়েবলের জন্য কাজ করে তবে PATH ভেরিয়েবলের জন্য নয় ।launchctl
1. আমি কি করেছি?
প্রথমে আমি /etc/environment.rc
স্ক্রিপ্টটি এমনভাবে লিখেছিলাম :
launchctl setenv PATH /Users/halloleo/bin:/usr/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv ENVIRONMENT_RC "yes"
তারপরে আমি প্লাস্টারগুলি তৈরি করেছি launchd
(নীচে পরিশিষ্টে এই এবং অন্যান্য উল্লিখিত স্ক্রিপ্টগুলির তালিকা)। তারপর আমি তাদের সাথে সক্রিয়
$ sudo launchctrl load ...
তারপরে আমি path_helper
শেল ইআরএন ফাইল /etc/
প্রোফাইলে ইউটিলিটি অক্ষম করে দিয়েছি যাতে environment.rc
সেটিংসটি ওভাররাইট না করে । এবং অবশেষে আমি মেশিনটি আবার চালু করলাম।
2. প্রভাব কি?
আমি যখন নতুন এনভায়রনমেন্ট ভেরিয়েবল টার্মিনাল আরম্ভ JAVA_HOME
এবং ENVIRONMENT_RC
হয় অনুযায়ী সেট environment.rc
, কিন্তু পাথ সেট করা হয়
, / Usr / বিন: / বিন
এটি নিশ্চিত করার জন্য, bash
বর্তমান পরিবেশের ভেরিয়েবলগুলি দেখানোর জন্য আমি কোনও অল্প অজগর স্ক্রিপ্ট লিখে তার পরিবর্তে (পরিশিষ্টে) কোনও পাই ফাইল পাইনি এবং আমি প্লাটিপাসের মোড়কে ডাবল ক্লিক করে সরাসরি এটি সম্পাদন করি। আবার নতুন ভেরিয়েবল সেট করা আছে, যখন PATH এর সিস্টেম ডিফল্ট রয়েছে।
সুতরাং কেন আমি অন্য ভেরিয়েবল সেট করতে পারেন, কিন্তু না পাথ পরিবর্তনশীল? এবং আমি কীভাবে এটি একীভূতভাবে সমাধান করতে পারি ?
হালনাগাদ:
পরিস্থিতিটি খুব আশ্চর্যের বিষয়: bash
টার্মিনাল বা ইমাক্সের শেলটি (আপনার কমপক্ষে) আপনার দ্বারা নির্ধারিত প্যাথটি তুলবে launchctl
, তবে অন্যান্য জিইউআই অ্যাপ্লিকেশনগুলি এটি করবে না eg পথ। এমনকি ইমাকস নিজেও সঠিক প্যাথটি জানেন না: আপনি যখন ইমাস কমান্ড জারি করবেন তখন আপনি এটি লক্ষ্য করুন M-x ispell-buffer
; ইমিক্স ispell
যে কলটি কল করার চেষ্টা করে তা ইউনিক্স সরঞ্জামটি পাওয়া যায় না যদি এটি কেবলমাত্র আপনার কাস্টম পথে রয়েছে।
উপাঙ্গ
net.halloleo.environment.plist
, চালু কনফিগারেশন ফাইল এতে /Library/LaunchDaemons/
:
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
net.halloleo.environment-user.plist
, চালু কনফিগারেশন ফাইল এতে /Library/LaunchAgents/
:
<?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>KeepAlive</key>
<false/>
<key>Label</key>
<string>net.halloleo.environment-user</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/etc/environment.rc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment.rc</string>
</array>
</dict>
</plist>
/etc/profile
, পরিবর্তিত বাশ স্টার্ট-আপ ফাইল:
# System-wide .profile for sh(1)
# if [ -x /usr/libexec/path_helper ]; then
# eval `/usr/libexec/path_helper -s`
# fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
show_environ.py
, স্ক্রিপ্টটি সমস্ত পরিবেশের ভেরিয়েবল প্রদর্শন করছে:
import os
print (os.environ)
/usr/libexec/path_helper
তাদের প্রারম্ভিক প্রক্রিয়া চলাকালীন কল করে। গুই অ্যাপ্লিকেশান না না অনুযায়ী পাথ পেতে/etc/paths
- এবং আমি গুই অ্যাপ্লিকেশানগুলি সম্পর্কে বিশেষভাবে জিজ্ঞাসা।