ইমাকস এবং কমান্ড লাইন OS ওএসএক্সের উপর PATH মতবিরোধ


18

PATHইমাসকে সেটিংস নিয়ে কিছু সমস্যা রয়েছে যা আমার হাস্কেল পরিবেশকে প্রভাবিত করছে:

আমি জেডএসএইচ ব্যবহার করছি, এবং যখন আমি কমান্ড লাইনে গিয়ে কল echo $PATHকরি তখন তা ফিরে আসে:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

এটি .zprofileকনফিগারেশন থেকে আসছে যেখানে আমার রয়েছে:

# Set the list of directories that Zsh searches for programs.
path=(
  ~/Library/Haskell/bin
  /usr/local/{bin,sbin}
  $path
)

সুতরাং, কমান্ড লাইন থেকে which cabal, আমি যখন ফোন করি তখন আমি সঠিকভাবে পাই:/Users/g/Library/Haskell/bin/cabal

আমি যখন ইমাস শুরু করি shellএবং কলটিতে which cabalযাই, তখন আমি পাই: /usr/bin/cabalযা এটির একটি ভিন্ন সংস্করণ হওয়ায় আমাকে ইস্যু করছে।

আমি যখন ইমাস echo $PATHথেকে পরিদর্শন করি তখন আমি shellদেখতে পাই:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin

আমি জানিনা পৃথিবীতে পৃথিবী কীভাবে PATHআলাদা হতে পারে ...

যে কেউ আমার ZSHশেল এবং ইম্যাক্সের সাথে একমত হতে কীভাবে জানেন PATH? আমি সন্দেহ করি যা এখান থেকে cabalবোঝা হচ্ছে কোথায় তা নিয়ন্ত্রণ করছে।

আপডেট : echo $SHELLইমাস প্রিন্টগুলি থেকে চলছে :/bin/zsh

আপডেট 2 : এটি ওএসএক্স-এ রয়েছে

আপডেট 3 : আমি এক্সেল-পাথ-থেকে-শেল মডিউলটি ব্যবহার করার চেষ্টা করেছি এবং এটি কার্যকর হয় না। আমার এখনও একই সমস্যা রয়েছে এবং পার্শ্ব প্রতিক্রিয়া হিসাবে, এটি আমার টার্মিনাল থিমের রঙগুলিকে মেসেজ করে :(

আপডেট 4 : আমি এর মাধ্যমে ইম্যাক্স ইনস্টল করেছি brew install --cocoa --srgb emacsএবং আমি এই ভাবে সংযুক্ত ইম্যাকগুলি চালিয়েছি:

~ ❯❯❯ which emacs
/usr/local/bin/emacs
~ ❯❯❯ l /usr/local/bin/emacs
lrwxr-xr-x  1 g  admin    30B 29 Jan 18:34 /usr/local/bin/emacs -> ../Cellar/emacs/24.4/bin/emacs
~ ❯❯❯ l /usr/local/Cellar/emacs/24.4/bin/emacs
-r-xr-xr-x  1 g  admin    87B 29 Jan 18:34 /usr/local/Cellar/emacs/24.4/bin/emacs

আপনি কি লগইন শেল হিসাবে ZSH ব্যবহার করছেন?
wasamasa

লগইন শেলটি থেকে আপনি কী বোঝাতে চেয়েছেন তা নিশ্চিত নয় তবে আমার ধারণা আমি chsh...আমার ডিফল্ট শেলটি পরিবর্তন করতে আবার ফোন করেছি
গাল্ডার জামারিয়েও


2
স্পষ্টতই নয়, PATH এর মধ্যে ~/.profileবা /etc/profileতারপরে সংশোধন করুন ।
ওয়াসমাস

1
আপনার পরিবেশের ভেরিয়েবলগুলি এতে সেট করুন ~/.zshenv, যা ধারাবাহিকভাবে উত্সাহিত হবে তবে শেলটি শুরু হয়েছে (ইন্টারেক্টিভ বনাম অ-ইন্টারেক্টিভ)। যদি exec-path-from-shellআপনার টার্মিনাল থিম রং আপ তালগোল পাকানো হয়, তাহলে আপনি সেট করতে পারেন exec-path-from-shell-argumentsথেকে nilকল করার আগে exec-path-from-shell-initializeনিশ্চিত এটা আপনার zsh কনফিগ ইন্টারেক্টিভ অংশ চালাচ্ছে না।
স্যানিটিইঙ্ক

উত্তর:


14

আপনি এক্সিকিউট-পাথ-থেকে-শেল প্যাকেজ ইনস্টল করতে পারেন এবং এটি আপনার init ফাইলে যুক্ত করতে পারেন:

(exec-path-from-shell-initialize)

1
উদ্ধৃত প্যাকেজটির লিঙ্কের সাথে প্রশ্নটি আরও ভাল হবে ।
ড্র হয়েছে

আপনি ঠিক বলেছেন, আমি আমার উত্তরটি সম্পাদনা করেছি।
বাসাক

1
এটাই আমি চেয়েছিলাম।
djhaskin987

8

এটি একটি ওএসএক্স বিরক্তিকর পরিবেশগত সমস্যা, $PATHইমাক্সে উপস্থিত হওয়া /etc/pathsফাইল থেকে আসছে যা শেলটিতে যা কিছু সেট করেছিলাম তার সাথে যুক্ত হয়ে যায়। আমি ফাইলটির /Users/g/Library/Haskell/binশীর্ষে যুক্ত করেছি /etc/pathsএবং এটি তখন ভাল কাজ করেছে।

শামের মধ্যে গিয়ে ইমাকগুলিতে কল echo $PATHকরা এখন দেখায়:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin

আর cabal-এর সংস্করণ প্রকৃতপক্ষে cabal-install version 1.22.2.0: ডি

সবাইকে ধন্যবাদ!!


$PATHওএসএক্স পোস্টে তার ইঙ্গিতগুলির জন্য বিনকে ধন্যবাদ ।
গ্যাল্ডার জামারিয়েও

2
এর মধ্যে আরও ভাল সমাধান হ'ল পথটি সংশোধন করা ~/.zshenv। পরিবর্তন এ গিয়ে Emacs 'পাথ মধ্যে প্রতিফলিত হয়
Galder Zamarreño

আমি নিশ্চিত করতে পারি যে সহজভাবে করা echo export PATH=$PATH > ~/.zshenvইমাক্সটিকে M-x shellপরবর্তী অনুরোধে এটি তুলবে।
লিনাস আরভার

5

আপনি যদি আপনার জিইউআই এনভায়রনমেন্ট (জিনোম, কেডি, ...) থেকে ইমাস শুরু করেন তবে আপনার শেল প্রারম্ভিক স্ক্রিপ্টগুলি আপনার পরিবেশে উত্সাহিত হবে না। সুতরাং $PATHআপনি যা সাবধানে সেট করেছেন সেটি .zshলোড হবে না। জিইউআই পরিবেশগুলি সাধারণত এগুলি উত্স করে না, যদিও তারা আপনার ~/.profileফাইলটি লোড করতে পারে ।

আপনি এটিতে যুক্ত করার চেষ্টা করতে পারেন .pam_environment:

PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin

এটি লোড করার জন্য আপনাকে আপনার জিইউআই সেশনটি পুনরায় চালু করতে হবে।

এই দস্তাবেজটি আপনাকে আপনার $PATHভেরিয়েবলটি সঠিকভাবে সেট করতে সহায়তা করতে পারে :

https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables

আমি ~/.pam_environmentফাইলটি পরিচালিত পরিবেশের ভেরিয়েবলগুলিতে ব্যবহার করি যা আমার শেল বা ইম্যাকস প্রক্রিয়াগুলি থেকে অ্যাক্সেসযোগ্য হওয়া দরকার।

পিএস: একজন চমকপ্রদ মন্তব্যকারী আপনাকে সম্ভবত ম্যাকের দিকে নিয়ে যাওয়ার ইঙ্গিত দেয়। আমি আপনাকে $PATHম্যাক জিইউআইতে কীভাবে সেট আপ করব জানি না , তবে পয়েন্টটি এখনও আপনার শেলের পরিবেশ এবং জিইউআই পরিবেশের মধ্যে পার্থক্য সম্পর্কিত। আপনি $PATHজিইউআইয়ের জন্য কীভাবে সেট আপ করেন তা ওএস সংস্করণের উপর নির্ভর করে। তবে আপনি ব্যবহার করতে পারেন:

(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))

আপনার ~/.emacs.d/initযদি আপনি একটি সমাধান চান যা কাজ করা উচিত।

পিপিএস: আপনি যদি ইমাসে শেল চালাতে চান তবে আপনি সম্ভবত এটির ansi-termচেয়ে ভাল ব্যবহার করা ভাল shell


আমি সন্দেহ করি প্রশ্নটি লিনাক্স সম্পর্কে যা প্রশ্নকর্তা আইটার্ম 2 ব্যবহারের কথা উল্লেখ করেছেন ।
wasamasa

3

যদি PATH এর কিছু অংশ হারিয়ে যায় তবে আপনি এটি আপনার ~ / .emacs এ যুক্ত করতে পারেন

;;; We add /path/to/something/extra by appending it to the path
(setenv "PATH" (concat (getenv "PATH") ":/path/to/something/extra"))
;;; /path/to/something/extra is now at the end of the PATH.
;;; or you can use:
;(setenv "PATH" (concat "/path/to/something/extra:" (getenv "PATH")))
;;; /path/to/something/extra is now at the beginning of the PATH.

পথের সমস্যাগুলি এড়াতে, আমি সর্বদা the / .brcrc থেকে রফতানি করা PATH দিয়ে কমান্ড লাইন থেকে ইমাক শুরু করি।


2

এটি সম্পাদন করার আরেকটি উপায় হ'ল শেলটিকে এটি লগইন শেলটি জানানো যাতে এটি সমস্ত সঠিক ফাইলের উত্স করে। আমি সেট করে বাশের explicit-bash-argsজন্য এটি করি ("--noediting" "--login")। দেখে মনে হচ্ছে zsh এর সমতুল্য সেট explicit-zsh-argsহয়ে যাবে ("-l")

সুতরাং আমার মধ্যে .emacs:

(setq explicit-bash-args '("--noediting" "--login"))

আপনার মধ্যে, যেমন:

(setq explicit-zsh-args '("-l"))

আমি মনে করি এটি "--noediting"অপ্রয়োজনীয়, এবং zsh কে এই সম্পর্কে বলার কোনও উপায় বলে মনে হচ্ছে না, তবে এটি আশ্বাসের মতো কাজ করে না তবে এটি অনুসন্ধানের কিছু হতে পারে।


1
এটি ইমাসের অধীনে চালিত শেলের জন্য কাজ করে। কমান্ড যেমন মাধ্যমে হিসাবে, এ গিয়ে Emacs মধ্যে সরাসরি চালানোর জন্য এটা কাজ করে না M-x shell-command
Mernst

1

আপনি কোনও ওএস এক্স-প্রশস্ত ডিফল্ট পাথও সেট করতে পারেন উদাহরণস্বরূপ কোনও সম্পত্তি তালিকার সংরক্ষণ করে যেমন ~/Library/LaunchAgents/my.startup.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 PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

নতুন পাথটি শেলস, ইমাক্স এবং অন্যান্য অ্যাপ্লিকেশনগুলিতে আপনাকে লগ আউট এবং ফিরে আসার পরে দেখানো উচিত।

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

১০.৯ এবং এর আগে আপনি এর মতো একটি লাইনও যুক্ত করতে পারেন /etc/launchd.conf:

setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

তবে /etc/launchd.conf10.10 এর জন্য সমর্থন সরানো হয়েছে।

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