এনভায়রনমেন্ট.প্লেস্টে ভেরিয়েবল সেট করা হচ্ছে


5

আমি সিয়েরায় চালু হওয়া অ্যাপ্লিকেশনগুলির মাধ্যমে পরিবেশের পরিবর্তনশীলগুলি কীভাবে সেট করতে হবে তার সাথে শর্তাবলীতে আসার চেষ্টা করছি, তবে আমি বিস্মিত।

অনলাইনে পাওয়া বিভিন্ন বিট পরামর্শের পরে, আমি একটি ফাইল তৈরি করেছি ~/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আদৌ কোনও ধারণা দেয়?

উত্তর:


3
  • লঞ্চ এজেন্টটি আনলোড করুন:

    launchctl unload ~/Library/LaunchAgents/environment.plist
  • Plist / env সেটিংস পরিবর্তন করুন ify
  • আবার লঞ্চ এজেন্ট লোড করুন:

    launchctl load ~/Library/LaunchAgents/environment.plist

টার্মিনাল শেলটিতে ভেরিয়েবলের নতুন মান পেতে আপনাকে টার্মিনালটি ছেড়ে দিতে হবে এবং পুনরায় চালু করতে হবে।

আমি এরকম কিছু ব্যবহার করার পরামর্শ দিই

<string>launchctl setenv FOO foo; launchctl setenv BAR bar; launchctl setenv SUP sup</string>

1
এটি কাজ করে না। আমি টার্মিনাল চালু করলাম; টাইপড echo $FOO; দেখেছি foo; এবং প্রস্থান টার্মিনাল। তারপরে আমি উপরে environment.plistআপনার launchctl unload ...কমান্ডটি আনলোড করেছি , সেই ফাইলের কমান্ডটি পরিবর্তন করেছি, ফাইলটি launchctl setenv FOO barসংরক্ষণ করেছি এবং আপনার launchctl load ...আদেশ দিয়ে ফাইলটি লোড করেছি । অবশেষে আমি আবার টার্মিনাল চালু করলাম, টাইপ করেছি echo $FOOএবং আউটপুটটি দেখেছি foo। ... আহ্, যদি আমি ডকটি মেরে killall Dockআবার চালু করি তবে টার্মিনালটি আবার চালু করুন, আমি শেষ পর্যন্ত এর আপডেট হওয়া মানটি দেখতে পাচ্ছি FOO। রক্তাক্ত নরক, কী বেদনা।
শান

@ সিয়ান নাও সিয়েরায় পরীক্ষিত এবং এটিও কার্যকর। কোনও অ্যাপ পুনরায় চালু করতে বা হত্যা করার দরকার নেই (টার্মিনাল যা পুনরায় চালু করতে হবে তা বাদে)। আমি একটি কাজের আশেপাশে বা আরও ভাল সমাধান যোগ করার চেষ্টা করব ...
ক্লানামথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.