আমি সিয়েরায় চালু হওয়া অ্যাপ্লিকেশনগুলির মাধ্যমে পরিবেশের পরিবর্তনশীলগুলি কীভাবে সেট করতে হবে তার সাথে শর্তাবলীতে আসার চেষ্টা করছি, তবে আমি বিস্মিত।
অনলাইনে পাওয়া বিভিন্ন বিট পরামর্শের পরে, আমি একটি ফাইল তৈরি করেছি ~/Library/LaunchAgents/environment.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>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv FOO foo
launchctl setenv BAR bar
<!-- ... -->
launchctl setenv PATH /usr/local/opt/scala210/bin:/usr/local/bin:$PATH
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
আমার পরীক্ষা-নিরীক্ষা থেকে দেখা যাচ্ছে যে সিস্টেম রিবুটের চেয়ে কম কিছুই এই ফাইলটিতে পরিবর্তন আনবে। আমি এই আদেশের উল্লেখ পেয়েছি যা অনুমিতভাবে কৌশলটি করবে:
$ launchctl load ~/Library/LaunchAgents/environment.plist
... তবে আমি যখন এটি চালাচ্ছি আমি এই প্রতিক্রিয়াটি পেয়েছি:
[my home dir]/Library/LaunchAgents/environment.plist: service already loaded
এর জন্য ডকুমেন্টেশনে launchctlআমি একটি -Fপতাকা উল্লেখ করেছি যা প্রাসঙ্গিক বলে মনে হচ্ছে:
Force the loading or unloading of the plist. Ignore the Disabled key.
তবে, আমি যদি এই স্যুইচটি অন্তর্ভুক্ত করি তবে এতে কোনও তফাত আসে না; আমি একই আউটপুট পাই এবং ফাইলটি উপেক্ষা করা হবে।
যাইহোক, রিবুটিং পরিবর্তনগুলি কার্যকর করে তোলে (সম্ভবত লগ আউট এবং পিছনেও ফিরে আসবে? আমি চেক করিনি), তবে একটি ব্যতিক্রম সহ: PATHপরিবর্তনশীল। এই পরিবর্তনশীলটি কেবল একইভাবে থেকেছি যেভাবেই আমি এটি কীভাবে পরিবর্তন করেছি এবং রিবুটগুলি জুড়েই। অবশেষে আমি স্ট্যাক এক্সচেঞ্জের উত্তরে হোঁচট খেয়েছি যে অবাক হয়ে সতর্ক করেছিল যে PATHডক killall Dockকমান্ড দিয়ে পুনরায় চালু না করা পর্যন্ত এইভাবে পরিবর্তন করা উপেক্ষা করা হবে । সুতরাং আমি এটি করেছি, এবং রিবুট করেছি এবং শেষ পর্যন্ত আমার PATHসেটটি সঠিকভাবে হয়েছিল।
সুতরাং, যাইহোক, আমি মনে করি আমার মূল প্রশ্নটি হ'ল: উপরে বর্ণিত পদ্ধতির পরিবর্তে পরিবেশের পরিবর্তনশীলগুলি আপডেট করার জন্য আর কোনও ঝামেলা-মুক্ত উপায় আছে কি? এবং একটি সহায়ক সংস্থার প্রশ্ন হতে পারে: বিশেষ হ্যান্ডলিং কি PATHআদৌ কোনও ধারণা দেয়?
echo $FOO; দেখেছিfoo; এবং প্রস্থান টার্মিনাল। তারপরে আমি উপরেenvironment.plistআপনারlaunchctl unload ...কমান্ডটি আনলোড করেছি , সেই ফাইলের কমান্ডটি পরিবর্তন করেছি, ফাইলটিlaunchctl setenv FOO barসংরক্ষণ করেছি এবং আপনারlaunchctl load ...আদেশ দিয়ে ফাইলটি লোড করেছি । অবশেষে আমি আবার টার্মিনাল চালু করলাম, টাইপ করেছিecho $FOOএবং আউটপুটটি দেখেছিfoo। ... আহ্, যদি আমি ডকটি মেরেkillall Dockআবার চালু করি তবে টার্মিনালটি আবার চালু করুন, আমি শেষ পর্যন্ত এর আপডেট হওয়া মানটি দেখতে পাচ্ছিFOO। রক্তাক্ত নরক, কী বেদনা।