এক্সিকিউট-পাথ এবং $ পথ


28

আমি অনলাইনে উদাহরণগুলি দেখেছি যেখানে লোকেরা ইমাসে ডিফল্ট পথে পাথগুলি যুক্ত করে:

(add-to-list 'exec-path "/usr/local/bin/")

আমি এলিস্পে নতুন এবং আমার মনে হয় উপরের বিবৃতিটি কী করে তা আমি বুঝতে পেরেছি, তবে আমার কয়েকটি প্রশ্ন রয়েছে:

  • ইন কি অর্ডার গিয়ে Emacs সঞ্চালনের পাথ মাধ্যমে অনুসন্ধান করে? উদাহরণস্বরূপ, এটি কি $PATHআদৌ (env। পরিবর্তনশীল) এর মান বিবেচনা করে (এবং যদি তা হয়, তার আগে বা পরে exec-path?)

  • আমি কীভাবে এই জাতীয় একাধিক পাথকে বাঁচাতে পারি আমি কি তাদের সাথে কথা বলতে পারি? যেমন

    (add-to-list 'exec-path "PATH1", "PATH2")
    

    বা আমার করা উচিত:

    (add-to-list 'exec-path "PATH1:PATH2:PATH3") 
    

আমি এই আকর্ষণীয় প্যাকেজটি গিটহাবের মধ্যেও পেয়েছি: এক্সেক-পাথ-থেকে-শেল । কেন এই জন্য একটি প্যাকেজ প্রয়োজন?

প্রেরণা

কখনও অনুসন্ধান করুন যে কোনও কমান্ড আপনার শেলটিতে কাজ করে তবে ইমাসে নয়?

এটি ওএস এক্সে অনেক ঘটে, যেখানে জিইউআই থেকে শুরু হওয়া একটি ইমাস ইনস্ট্যান্ট পরিবেশগত ভেরিয়েবলের একটি ডিফল্ট সেট উত্তরাধিকার সূত্রে প্রাপ্ত হয়।

এই লাইব্রেরিটি ব্যবহারকারীর শেল থেকে গুরুত্বপূর্ণ পরিবেশের ভেরিয়েবলগুলি অনুলিপি করে এই সমস্যাটি সমাধান করে: এটি আপনার শেলকে আগ্রহের ভেরিয়েবলগুলি মুদ্রণ করতে, এবং সেগুলি ইমাস পরিবেশে অনুলিপি করার মাধ্যমে কাজ করে।


3
ইম্যাকস এবং এলিস্পে আপনাকে স্বাগতম! আমি নিজেও এই বিষয়টি নিয়ে এখনও বেশ সতেজ এবং আপনার প্রশ্নের উত্তরগুলি জানি না, তবে আমি ভেবেছিলাম এমন কিছু উল্লেখ করব যা জীবনকে অনেক সহজ করে তুলেছে: বর্ণনাগুলি কার্যকরী করে। উদাহরণস্বরূপ (describe-function 'add-to-list)( C-h f) আপনাকে add-to-listফাংশনের জন্য ডকটি দেবে , পাশাপাশি উত্সের লিঙ্কগুলিও দেবে। এছাড়াও আছে (describe-variable 'exec-path)( C-h v)। এটি আরটিএফএম মন্তব্য হওয়ার অর্থ নয় - এই ডক্সগুলি আপনার তালিকাভুক্ত সমস্ত প্রশ্নের উত্তর দেয় না, কেবলমাত্র দরকারী কিছু।
জেটিমোলিয়া

ধন্যবাদ @ জিটমোলিয়া! আমি অবশ্যই ভবিষ্যতের প্রশ্নের জন্য এটি মনে রাখব।
আমেলিও ভাজকেজ-রেইনা

এছাড়াও C-h v exec-path, ম্যানুয়াল (গুলি) (ইম্যাকস এবং এলিস্প) ব্যবহার করুন। একটি ম্যানুয়ালটিতে i exec-pathআপনাকে একটি সহায়ক ব্যাখ্যার দিকে পরিচালিত করে। প্রথমে ইমাক্সকে জিজ্ঞাসা করুন - আপনি করেছেন বলে দুঃখিত হবেন না।
ড্রিউ

উত্তর:


23

1) PATHএবংexec-path

ইমাকস স্টার্টআপের exec-pathমান থেকে সেট করে PATHতবে পরে এটি আর দেখবে না। তবে আপনি যদি কোনও কমান্ড চালনা করেন তবে এটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে PATH, না exec-path, সুতরাং উপ-প্রক্রিয়াগুলি ইমাসের চেয়ে আলাদা কমান্ড খুঁজে পেতে পারে।

ফ্রান্সেসকো যেমন বলেছেন, এটি বিশেষত বিভ্রান্তিকর হতে পারে shell-command, কারণ এটি সরাসরি কোনও প্রক্রিয়া চালায় না, তবে এটি চালানোর জন্য একটি শেলকে ডেকেছিল, যা ব্যবহার করবে PATHনা exec-path

2) এতে একাধিক পাথ যুক্ত করা exec-path

শুধু add-to-listবারবার কল করুন :

(add-to-list 'exec-path "PATH1")
(add-to-list 'exec-path "PATH2")

মনে রাখবেন যে add-to-listতালিকার শুরুতে যোগ করে, তাই "PATH2"এটি exec-pathআগে থাকার সাথে শেষ হবে "PATH1"

আপনি আরও "নিম্ন-স্তরের" তালিকাতে অ্যাক্সেস ব্যবহার করতে পারেন:

(setq exec-path (append '("PATH1" "PATH2")
                        exec-path))

যোগ করবে "PATH1"এবং "PATH2"আপনার টু exec-path, যাতে।

3) ম্যাক ওএস 'পাথ

ম্যাক ওএস এক্সের সমস্যাটি হ'ল আপনি যখন গ্লোবাল ইউআই থেকে কোনও প্রোগ্রাম কল করবেন বা যখন আপনি শেল থেকে কল করবেন তখন ম্যাক ওএস পরিবেশটি একই রকম করে না। এর অর্থ হ'ল শেল থেকে ইমাক্স চালানোর ফলে আপনি যখন এটি অনুসন্ধানকারীর কাছ থেকে চালাবেন তার চেয়ে আলাদা পরিবেশের পরিবর্তনশীল সেট হয়ে যাবে set এটি বিশেষত বিরক্তিকর যদি আপনি পরিবেশের ভেরিয়েবলগুলিতে .bashrcবা অনুরূপ সেট করেন তবে এটি "গ্লোবাল" ইমা্যাকগুলিকে প্রভাবিত করবে না।

প্যাকেজটি দৃশ্যত একটি শেল শুরু করে এবং সেখান থেকে পরিবেশের ভেরিয়েবলগুলি আমদানি করে, বিশ্বব্যাপী শুরু হওয়া ইম্যাক্সের শেল থেকে আপনি যে পরিবেশটি পান তা নকল করে।


ধন্যবাদ জর্জেন Q3 সম্পর্কিত: আপনি কি জানবেন PATHযে গ্লোবাল UI (ডেস্কটপ এনভায়রনমেন্ট) থেকে শুরু হওয়া প্রোগ্রামগুলির জন্য ডিফল্টটি কোথায় সংজ্ঞায়িত হয়? আমি একই সমস্যা হচ্ছে না PYTHONPATHelpy:)। আমি যখন ডেস্কটপ থেকে ইমাস শুরু করি, ইম্যাকগুলি PYTHONPATHআমার .zshenvফাইলে (একটি init ফাইল zsh) আমার সংজ্ঞা সম্পর্কে অবগত নয় , যা খুব হতাশার কারণ, elpyআমার পাইথন প্যাকেজগুলি কোথায় পাবেন তা জানেন না। আমি এই PYTHONPATHসংজ্ঞাগুলি একটি অন্য শেল initফাইলে স্থানান্তরিত করতে পেরে খুশি (যদিও আদর্শিকভাবে আমি চাই চাই ইমাকরা আমার থেকে সংজ্ঞাগুলি ব্যবহার করতে পারে .zshenv)
আমেলিও ওয়াজকেজ-রেইনা

আমার ভয় আমি অনেক ম্যাক OS X একটি দ্রুত Google সম্পর্কে এ সব জানি না আমাকে পেয়েছিলাম am stackoverflow.com/questions/135688/... যা নির্দেশ করে launchd.conf সঠিক জায়গা বলে মনে হয়। আপনার যা দরকার তা হ'ল ইম্যাকস, আপনি অবশ্যই উভয় সেট করতে পারেন exec-pathএবং PATHআপনার .emacs। আপনি PATHব্যবহার করে সেট করতে পারেন (setenv "PATH" (format "%s:%s" "/new/path/element" (getenv "PATH")))
জর্জেন শ্যাফার 18

ধন্যবাদ। আমি জানি নিম্নলিখিত প্রশ্ন ওপি থেকে একটু অপসারী, কিন্তু এ গিয়ে Emacs মধ্যে উল্লেখ করার কোন উপায় আছে কি PYTHONPATHযে elpyব্যবহার করা উচিত?
আমেলিও ওয়াজকেজ-রেইনা

process-environmentউদাহরণস্বরূপ ব্যবহার করে আপনি পরিবর্তন করতে পারেন setenv। আপনি এটি এতে করতে পারেন elpy-mode-hook, তবে এটি একটি গ্লোবস্ল ভেরিয়েবল এবং এটিকে বাফার-লোকাল করা সহজেই বিভ্রান্তিকর আচরণের দিকে নিয়ে যেতে পারে।
জর্জেন শ্যাফার 21

9

যখন ইমাসগুলি আদিম ফাংশনগুলি যেমন call-processবা ব্যবহার করে একটি নতুন বাহ্যিক প্রক্রিয়া শুরু করে start-process, এক্সিকিউটেবল অনুসন্ধান করা হয় exec-path(এবং না $PATH)

যাইহোক, একটি ফাংশন যেমন shell-commandশেলটি একটি সাবপ্রসেস হিসাবে শুরু করে এবং এটি আপনাকে চালিত করতে চাইলে আদেশটি সরিয়ে দেয়। এই কমান্ডটি কার্যকর করতে, শেলটি তারপরে এক্সিকিউটেবল $PATH(এবং ইন না exec-path) খুঁজে পাওয়ার চেষ্টা করবে ।

সুতরাং, exec-pathযা বহিরাগত প্রক্রিয়াগুলির জন্য সর্বাধিক গণনা করা হয় যা ইমাস নিজেই শুরু করে থাকে, আপনি $PATHহ'ল উচ্চ-স্তরের ফাংশন দিয়ে নিজেকে পরিচালিত আদেশগুলি গণনা করে ( M-!উদাহরণস্বরূপ)


আপনি যদি একাধিক ডিরেক্টরি যুক্ত করতে চান তবে আপনার একাধিকবার exec-pathব্যবহার করা উচিত add-to-list

আপনি নিজেই এটি করতে পারেন

(add-to-list 'exec-path "dir1")
(add-to-list 'exec-path "dir2")

বা একটি লুপ ব্যবহার করে

(dolist (dir '("dir1" "dir2"))
  (add-to-list 'exec-path dir))

আপনার তৃতীয় প্রশ্ন সম্পর্কে, যদি ইমাসগুলি ডেস্কটপ পরিবেশ থেকে চালু করা হয়েছিল, তবে এটি পরিবেশ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত, এটি একটি পূর্ণ শেলের চেয়ে কম সম্পূর্ণ হতে পারে।

এর অর্থ হ'ল $PATHনিয়মিত শেল যা দেখছে তা ব্যবহারের জন্য কখনও কখনও ইমাক্সের মান পূরণ করা প্রয়োজন হতে পারে । এটি exec-path-from-shellআপনার উল্লেখ করা লাইব্রেরির উদ্দেশ্য ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.