উত্তর:
এই বিষয়বস্তু দিয়ে একটি environment.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>Label</key>
<string>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv PRODUCTS_PATH /Users/mortimer/Projects/my_products
launchctl setenv ANDROID_NDK_HOME /Applications/android-ndk
launchctl setenv PATH $PATH:/Applications/gradle/bin
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
আপনি ব্লকের launchctl
ভিতরে অনেকগুলি কমান্ড যুক্ত করতে পারেন <string></string>
।
plist
সিস্টেম পুনরায় বুট করার পরে সক্রিয় হবে না। আপনি launchctl load ~/Library/LaunchAgents/environment.plist
এটি অবিলম্বে চালু করতে ব্যবহার করতে পারেন ।
[সম্পাদনা]
একই সমাধান এল ক্যাপিটনেও কাজ করে।
এক্সকোড 7.0+ ডিফল্টরূপে পরিবেশের ভেরিয়েবলগুলি মূল্যায়ন করে না। পুরানো আচরণ এই আদেশ দিয়ে সক্ষম করা যেতে পারে:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[সম্পাদনা]
বেশ কয়েকটি পরিস্থিতি যেখানে এটি বেশ কার্যকর হয় না। যদি কম্পিউটারটি পুনরায় চালু হয় এবং "উইন্ডোজগুলিতে আবার লগ ইন করার সময় পুনরায় খুলুন" নির্বাচন করা হয়, পুনরায় খোলা উইন্ডোজগুলি ভেরিয়েবলগুলি নাও দেখতে পারে (সম্ভবত এজেন্ট চালুর আগে সেগুলি খোলা হয়)। এছাড়াও, আপনি যদি ssh- এর মাধ্যমে লগ ইন করেন তবে ভেরিয়েবলগুলি সেট করা হবে না (সুতরাং আপনাকে সেগুলি ~ / .bash_profile এ সেট করতে হবে)। শেষ অবধি, এটি এল ক্যাপিটান এবং সিয়েরায় PATH এর পক্ষে কাজ করবে বলে মনে হচ্ছে না। এটি 'লঞ্চাক্টল কনফিগার ব্যবহারকারীর পাথ ...' এবং / ইত্যাদি / পাথের মাধ্যমে সেট করা দরকার।
UseSanitizedBuildSystemEnvironment
) 9 বার প্রদর্শিত হয় ।
[ আসল উত্তর ]: আপনি এখনও launchctl setenv variablename value
একটি ভেরিয়েবল সেট করতে ব্যবহার করতে পারেন যাতে এটি সমস্ত অ্যাপ্লিকেশন দ্বারা গ্রহণ করা হয় (টার্মিনালের মাধ্যমে শুরু হওয়া গ্রাফিকাল অ্যাপ্লিকেশনগুলি ডক বা স্পটলাইটের মাধ্যমে শুরু হয়েছিল)।
স্পষ্টতই আপনি লগইন করার সময় আপনি এটি করতে চাইবেন না।
[ সম্পাদনা ]: এটি এড়াতে, চালু করুন AppleScript Editor
, এই জাতীয় কমান্ড লিখুন:
do shell script "launchctl setenv variablename value"
(আপনি একাধিক ভেরিয়েবল সেট করতে চাইলে একাধিক লাইন ব্যবহার করুন)
এখন ফাইল ফর্ম্যাট হিসাবে ( ⌘
+ s
) সংরক্ষণ করুন : অ্যাপ্লিকেশন । অবশেষে System Settings
→ ব্যবহারকারী ও গোষ্ঠীগুলি → লগইন আইটেমগুলি খুলুন এবং আপনার নতুন অ্যাপ্লিকেশনটি যুক্ত করুন।
[ আসল উত্তর ]: একটি ছোট শেল স্ক্রিপ্টে আপনি যে সমস্ত ভেরিয়েবলগুলি সংজ্ঞায়িত করতে চান তা এই জায়গায় কাজ করতে, তারপরে MacOS লগইনে কীভাবে স্ক্রিপ্ট চালানো যায় সে সম্পর্কে পূর্ববর্তী উত্তরটি একবার দেখুন । এইভাবে স্ক্রিপ্টটি চালু করা হবে যখন ব্যবহারকারী লগ ইন করবেন।
[ সম্পাদনা ]: কোনও সমাধানই নিখুঁত নয় কারণ ভেরিয়েবলগুলি কেবলমাত্র সেই নির্দিষ্ট ব্যবহারকারীর জন্য সেট করা হবে তবে আমি আশা করছি / অনুমান করছি যা আপনার প্রয়োজন হতে পারে।
আপনার যদি একাধিক ব্যবহারকারী থাকে তবে আপনি নিজেই তাদের প্রত্যেকের জন্য একটি লগইন আইটেম সেট করতে পারেন বা একই শেল স্ক্রিপ্টের দিকে নির্দেশ করে তাদের প্রতিটি স্থানীয় লাইব্রেরী / লঞ্চআজেন্ট ডিরেক্টরিতে com.user.loginscript.plist এর একটি অনুলিপি রাখতে পারেন ।
মঞ্জুর, এই কাজের ক্ষেত্রগুলির কোনওটিই /etc/launchd.conf এর মতো সুবিধাজনক নয় ।
[ আরও সম্পাদনা ]: নীচের একজন ব্যবহারকারী উল্লেখ করেছেন যে এটি তার পক্ষে কাজ করে না। তবে আমি একাধিক ইয়োসেমাইট মেশিনে পরীক্ষা করেছি এবং এটি আমার পক্ষে কাজ করে। আপনার যদি সমস্যা হয় তবে মনে রাখবেন এটি কার্যকর হওয়ার জন্য আপনার অ্যাপ্লিকেশনগুলি পুনরায় চালু করতে হবে। অতিরিক্ত হিসাবে আপনি যদি টার্মিনালে ~ /। প্রোফাইল বা ~ / .bash_profile এর মাধ্যমে ভেরিয়েবল সেট করে থাকেন তবে শেল থেকে শুরু হওয়া অ্যাপ্লিকেশনগুলির জন্য তারা লঞ্চক্টেল সেটেনভের মাধ্যমে সেট জিনিসগুলি ওভাররাইড করবে ।
3 ফাইল + 2 কমান্ড সহ ম্যাক ওএস এক্স 10.10 ইয়োসেমাইটে পরিবেশের পরিবর্তনগুলি সেট করা সম্ভব।
পরিবেশের ভেরিয়েবল সংজ্ঞা সহ প্রধান ফাইল:
$ ls -la /etc/environment
-r-xr-xr-x 1 root wheel 369 Oct 21 04:42 /etc/environment
$ cat /etc/environment
#!/bin/sh
set -e
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - start"
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv MAVEN_HOME /opt/local/share/java/maven3
if [ -x /usr/libexec/path_helper ]; then
export PATH=""
eval `/usr/libexec/path_helper -s`
launchctl setenv PATH $PATH
fi
osascript -e 'tell app "Dock" to quit'
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - complete"
ব্যবহারকারীর অ্যাপ্লিকেশনগুলির জন্য পরিবেশের ভেরিয়েবলগুলি লোড করার পরিষেবা সংজ্ঞা (টার্মিনাল, আইডিই, ...):
$ ls -la /Library/LaunchAgents/environment.user.plist
-rw------- 1 root wheel 504 Oct 21 04:37 /Library/LaunchAgents/environment.user.plist
$ sudo cat /Library/LaunchAgents/environment.user.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>environment.user</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
রুট ব্যবহারকারী অ্যাপ্লিকেশনগুলির জন্য একই পরিষেবা সংজ্ঞা:
$ ls -la /Library/LaunchDaemons/environment.plist
-rw------- 1 root wheel 499 Oct 21 04:38 /Library/LaunchDaemons/environment.plist
$ sudo cat /Library/LaunchDaemons/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>environment</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
এবং অবশেষে আমাদের এই পরিষেবাগুলি নিবন্ধিত করা উচিত:
$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist
আমরা কী পাই:
সমস্যা / সমস্যা:
সিস্টেম পুনরায় বুট করার পরে অ্যাপ্লিকেশনগুলি দ্বারা আপনার এনভির ভেরিয়েবলগুলি সঠিকভাবে নেওয়া হয়েছিল যাতে আপনার প্রয়োজন হবে:
অ্যাপল লোড করা পরিষেবার সুস্পষ্ট অর্ডার অস্বীকার করার কারণে এটি ঘটে, সুতরাং এনভির ভেরিয়েবলগুলি "পুনরায় খোলা সারি" প্রক্রিয়াকরণের সাথে সমান্তরালে নিবন্ধিত হয়।
তবে প্রকৃতপক্ষে, আমি প্রতি বছর আমার সিস্টেমে কেবল কয়েকবার রিবুট করি (বড় আপডেটে), সুতরাং এটি কোনও বড় কথা নয়।
JAVA_HOME
) তবে PATH
ভেরিয়েবলের জন্য নয় ( আমার জিজ্ঞাসার প্রশ্নটি আলাদা করুন )।
launchd
, তবে বুট করার সময় (যেমন লগইন করার আগে) সেই ডেমনগুলি লোড করা কি সম্ভব হবে না? এটি আপনার উল্লেখ করা সমস্ত সমস্যার সমাধান করবে।
থেকে উদ্ধৃত
Apple Developer Relations
10-Oct-2014 09:12 PM
অনেক বিবেচনার পরে ইঞ্জিনিয়ারিং এই বৈশিষ্ট্যটি সরিয়ে নিয়েছে।
/etc/launchd.conf
সুরক্ষা কারণে ফাইলটি ইচ্ছাকৃতভাবে সরানো হয়েছে। কার্যকারণ হিসাবে, আপনিlaunchctl limit
বুটের প্রথম দিকে রুট হিসাবে চালাতে পারেন , সম্ভবত এ থেকেLaunchDaemon
। (...)
সমাধান:
/Library/LaunchDaemons/com.apple.launchd.limit.plist
বাশ-স্ক্রিপ্ট দ্বারা কোড রাখুন :
#!/bin/bash
echo '<?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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>core</string>
<string>unlimited</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>' | sudo tee /Library/LaunchDaemons/com.apple.launchd.limit.plist
/Library/LaunchDaemons
, এবং পরিবর্তে বলার launchctl
চালানোর জন্য limit
কমান্ড চালানো বলতে setenv
সঙ্গে কমান্ড PATH
এবং আর্গুমেন্ট হিসাবে একটি পাথ পংক্তি। launchd
এটি শুরুতে স্বয়ংক্রিয়ভাবে বাছাই করা উচিত এবং প্রায় তত্ক্ষণাত্ স্ব-সংশোধিত হওয়া বাছাই করা উচিত।
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
পুরানো আচরণ পুনরুদ্ধার করার জন্য এখানে আদেশগুলি দেওয়া হল:
# create a script that calls launchctl iterating through /etc/launchd.conf
echo '#!/bin/sh
while read line || [[ -n $line ]] ; do launchctl $line ; done < /etc/launchd.conf;
' > /usr/local/bin/launchd.conf.sh
# make it executable
chmod +x /usr/local/bin/launchd.conf.sh
# launch the script at startup
echo '<?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>launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>/usr/local/bin/launchd.conf.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
' > /Library/LaunchAgents/launchd.conf.plist
এখন আপনি setenv JAVA_HOME /Library/Java/Home
ইন কমান্ড নির্দিষ্ট করতে পারেন /etc/launchd.conf
।
এল ক্যাপিটনে চেক করা হয়েছে।
আমার জন্য কী কাজ করেছে (aax 'ধন্যবাদ থেকে অনুপ্রাণিত):
এটিকে / লাইবারি / লঞ্চডেমোনস / কম.এপল.লঞ্চড.লিমিট.প্লেস্টে পেস্ট করুন তারপরে পুনরায় বুট করুন:
<?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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>16384</string>
<string>16384</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
যদি আপনার এটি ধাপে ধাপে প্রয়োজন হয়:
⌘+v
)। এটি প্রতি প্রক্রিয়াতে 16384 ফাইল এবং মোট 16384 ফাইল সীমাবদ্ধ করতে বাধ্য করবেesc
তারপরে ব্যবহারটি ছেড়ে দিন:wq
আমি আশা করি এটি আপনাকে সাহায্য করেছে
আপনি https://github.com/ersiner/osx-env-sync ব্যবহার করে দেখতে পারেন । এটি একক উত্স থেকে কমান্ড লাইন এবং জিইউআই অ্যাপ্লিকেশন উভয়ই পরিচালনা করে এবং ওএস এক্স (ইওসোমাইট) এর সর্বশেষতম সংস্করণে কাজ করে ।
আপনি পাথের বিকল্পগুলি এবং অন্যান্য শেল ট্রিকস ব্যবহার করতে পারেন যেহেতু আপনি যা লেখেন তা নিয়মিত বাশ স্ক্রিপ্টটি প্রথমে ব্যাশের দ্বারা উত্সাহিত করা হয়। কোনও বিধিনিষেধ নেই .. ( osx-env-sync ডকুমেন্টেশন পরীক্ষা করে দেখুন এবং এটি কীভাবে এটি অর্জন করবে তা আপনি বুঝতে পারবেন))
আমি এখানে অনুরূপ প্রশ্নের উত্তর দিয়েছি যেখানে আপনি আরও পাবেন।
সমাধানটি হল আপনার ভেরিয়েবলটি এতে যুক্ত করা /etc/profile
। তাহলে প্রত্যাশার মতো সবকিছুই কাজ করে! অবশ্যই আপনি এটি sudo ন্যানো / ইত্যাদি / প্রোফাইল সহ একটি রুট ব্যবহারকারী হিসাবে করা উচিত। আপনি যদি অন্য কোনও উপায়ে এটি সম্পাদনা করেন তবে সিস্টেমগুলি ক্ষতিগ্রস্থ / ইত্যাদি / প্রোফাইলের সাথে অভিযোগ করবে, আপনি অনুমতিগুলি রুটে পরিবর্তন করলেও।
আমি নিম্নলিখিত উপায়ে vari / .bash_profile এ ভেরিয়েবলগুলি যুক্ত করেছি। আপনার কাজ শেষ হওয়ার পরে পুনরায় চালু / লগ আউট এবং লগ ইন করুন
export M2_HOME=/Users/robin/softwares/apache-maven-3.2.3
export ANT_HOME=/Users/robin/softwares/apache-ant-1.9.4
launchctl setenv M2_HOME $M2_HOME
launchctl setenv ANT_HOME $ANT_HOME
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/robin/softwares/apache-maven-3.2.3/bin:/Users/robin/softwares/apache-ant-1.9.4/bin
launchctl setenv PATH $PATH
দ্রষ্টব্য: পুনরায় আরম্ভ / লগ আউট এবং লগ ইন না করে আপনি এই পরিবর্তনগুলি ব্যবহার করে প্রয়োগ করতে পারেন;
source ~/.bash_profile