ওএসএক্স যোসোমেটে, আমি কেন জিইউআই অ্যাপ্লিকেশনগুলির জন্য অনেক পরিবেশের ভেরিয়েবল সেট করতে পারি, তবে নির্দিষ্ট ভেরিয়েবল PATH সেট করতে পারি না


16

মাভারিক্স রিলিজ হওয়া পর্যন্ত আমি ওএসএক্সের পাথ ইস্যুগুলি সমাধান করার পরে, সমস্যাগুলি ইয়োসেমাইটে ফিরে আসবে !!!

সুতরাং আমি কার্বন ইম্যাকস বা আরস্টুডিওর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)

উত্তর:


3

YOSMite এ PATH / etc / পাথ ফাইলে থাকা উচিত এবং সেট করা উচিত। এই ফাইলটির শেষে আপনার পথটি যুক্ত করুন:

/usr/bin
/bin
/your/custom/path

/ ইত্যাদি / মূল স্ক্রিপ্ট এনভায়রনমেন্ট স্ক্রিপ্ট জিইউআই অ্যাপ্লিকেশনগুলিতে প্যাথ ভেরিয়েবলের জন্য সমর্থন সরবরাহ করে (ইম্যাক্স দিয়ে পরীক্ষিত)।


5
এটি কেবল শেলগুলির জন্যই কাজ করে যা /usr/libexec/path_helperতাদের প্রারম্ভিক প্রক্রিয়া চলাকালীন কল করে। গুই অ্যাপ্লিকেশান না না অনুযায়ী পাথ পেতে /etc/paths- এবং আমি গুই অ্যাপ্লিকেশানগুলি সম্পর্কে বিশেষভাবে জিজ্ঞাসা।
হলিওলিও

আমি উত্তর আপডেট করেছি এবং জন্য / etc / আসল পোস্ট পরিবেশ স্ক্রিপ্ট
Ursa

এটি দুটি উত্তর যা আপনি দিচ্ছেন - ওপিও বলছে / ইত্যাদি / পরিবেশ কাজ করে না
মার্ক

এই প্রশ্নটি উত্থাপিত হওয়ার পরে @ চিহ্ন (1) আমি আপডেট করেছি / ইত্যাদি / এনভায়রনমেন্ট, এবং এখন এটি প্যাথ সমর্থন করে। (২) এখানে উত্তরটি হ'ল / ইত্যাদি / পাথগুলি ব্যবহার করুন
উর্সা

2
@ মার্ক হ্যাঁ, এবং এটি হ'ল আমার বক্তব্য, সমস্যা এবং প্রশ্ন: ফাইন্ডারের মাধ্যমে চালু করার সময় আমি কীভাবে জিইউআই অ্যাপ্লিকেশনগুলির পরিবেশ পরিবর্তনশীল PATH সেট করতে পারি? তবুও, দৃষ্টিতে
এটির

2

এটি আমাকে দীর্ঘকাল ধরে বিস্মিত করেছে (ভাল, শেষ কয়েক ঘন্টা)। শেষ পর্যন্ত আমি এই বাগের প্রতিবেদনে চলে এসেছি, যা আমার সমস্যার সাথে হুবহু বর্ণনা করে বলে মনে হচ্ছে (এটি আপনার সমস্যার সাথে সম্পর্কিত কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে পাথ এবং স্ক্রিপ্টগুলির সংমিশ্রণে যোসোমাইট / লঞ্চ করা হয়েছে বলে মনে হয়) অজগর হিসাবে:

http://www.openradar.me/18945659

সমাধানটি শেল স্ক্রিপ্ট শুরু করা বলে মনে হচ্ছে যা অজগর শুরু করে। আমি যা পছন্দ করি তা আসলে নয়, তবে এটিই এইভাবে ....


বাগ রিপোর্টের লিঙ্কটির জন্য ধন্যবাদ। ভাল এখন এটি একটি সত্য বাগ। আমি এর চারপাশে আরও একটি ছোঁয়া পেয়েছি; আমি এখানে এটি পোস্ট করব।
হলিউলিও

1

সমস্যাটি হ'ল লঞ্চটি পরিবেশের পরিবর্তনের পরিবর্তে আর একটি PATH পরিবর্তনশীল সংযোজন করে app বেশিরভাগ প্রোগ্রাম ব্যবহার করে getenvযা সর্বদা একটি ভেরিয়েবলের প্রথম উপস্থিতিটি ফেরত দেয়, শেলগুলি পরিবর্তে সমস্ত পরিবেশের ভেরিয়েবলের মাধ্যমে পুনরাবৃত্তি করে এবং স্থানীয় ভেরিয়েবল হিসাবে সেগুলি আমদানি করে যাতে শেষের সাথে পূর্ববর্তী উদাহরণগুলিকে ওভাররাইট করে।

এটি স্পষ্টতই প্রবর্তিত ত্রুটিযুক্ত, একটি প্রোগ্রামে পরিবেশিত ভেরিয়েবলগুলি অনন্য হওয়া উচিত।


1
কুল ব্যাকগ্রাউন্ডের উত্তর! আমার ধারণা অনুমানকটি শেলগুলির চারপাশে সত্যিকারের উপায় নয়, নাকি আছে?
হলিও

@ হ্যালোলিও আপনি কমান্ডটি চালু করতে পারেন sh -c 'YOUR ORIGINAL COMMAND'যা এটি শেল হয়ে যাওয়ার সাথে সাথে PATHসেটটি চালু করে প্রবর্তন করতে পারে।
স্টেনসফ্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.