Emacs ve komut satırı OSX'te $ PATH anlaşmazlıkları


18

PATHHaskell ortamımı etkileyen Emacs ayarları ile ilgili bazı sorunlar yaşıyorum:

ZSH kullanıyorum ve komut satırına gidip aradığımda echo $PATH, döndürür:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

Bu, .zprofilesahip olduğum yapılandırmadan geliyor :

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

Yani, komut satırından, aradığımda which cabal, doğru şekilde alıyorum:/Users/g/Library/Haskell/bin/cabal

Emacs'ı başlattığımda shellve aramaya which cabalgittiğimde, alıyorum: /usr/bin/cabalbu farklı bir sürüm olduğundan bana neden oluyor.

Ben incelediğinizde echo $PATHEmacs gelen shell, görüyorum:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin

Yeryüzünde nasıl PATHfarklı olabileceği hakkında hiçbir fikrim yok ...

Kabuğumun ZSHve Emacs'ın aynı fikirde olmasını nasıl bilen var PATH? Nereden cabalyüklendiğini kontrol eden şeyin bundan şüpheliyim .

GÜNCELLEME : echo $SHELLEmacs baskılarından çalıştırma :/bin/zsh

GÜNCELLEME 2 : Bu OSX'te .

GÜNCELLEME 3 : Ben exec-path-from-shell modülünü kullanmaya çalıştım ve çalışmıyor. Hala aynı sorunlarım var ve bir yan etki olarak, terminal tema renklerimi karıştırıyor :(

GÜNCELLEME 4 : Emacs'ı yükledim brew install --cocoa --srgb emacsve bu şekilde bağlanan emacs çalıştırıyorum:

~ ❯❯❯ 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

Giriş kabuğunuz olarak ZSH kullanıyor musunuz?
wasamasa

Giriş kabuğu ile tam olarak ne demek istediğinizden emin değilim, ama sanırım chsh...varsayılan kabuğumu değiştirmek için günü aradım
Galder Zamarreño

İTerm2 btw kullanıyorum ...
Galder Zamarreño

2
Görünüşe göre değil, içinde ~/.profileveya /etc/profilesonra PATH değiştirin .
wasamasa

1
Ortam değişkenlerinizi ~/.zshenv, kabuk başlatıldığı sürece sürekli olarak kaynaklanacak şekilde ayarlayın (etkileşimli ve etkileşimli olmayan). Eğer exec-path-from-shellterminal tema renkleri karıştırmasını, sen ayarlayabilirsiniz exec-path-from-shell-argumentsiçin nilçağırmadan önce exec-path-from-shell-initializeemin zsh config interaktif parçaları koşmuyor yapmak.
sanityinc

Yanıtlar:



8

Bu bir OSX sinir bozucu ortam sorunudur, $PATHEmacs'ta görünen /etc/pathsdosyadan geliyor ve daha sonra kabukta ayarladığım her şeye ekleniyor. /Users/g/Library/Haskell/binEn üste ekledim/etc/pathsDosyanın ve daha sonra iyi çalıştı.

Kabuğa girme ve arama echo $PATH Emacs'ı aramak şimdi gösteriyor:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin

Ve cabalsürümü gerçektencabal-install version 1.22.2.0 : D

Hepinize teşekkürler!!


$PATHOSX gönderisindeki ipuçları için beOn'a teşekkürler .
Galder Zamarreño

2
Daha iyi bir çözüm, içindeki yolu değiştirmektir ~/.zshenv. Oradaki değişiklikler Emacs 'PATH
Galder Zamarreño'da

Sadece yapmanın echo export PATH=$PATH > ~/.zshenvEmacs'ın bir M-x shellsonraki çağrıyı almasını sağladığını doğrulayabilirim .
Linus Arver

5

Emacs'ı GUI ortamınızdan (gnome, kde, ...) başlatırsanız, kabuk başlangıç ​​komut dosyalarınız ortamınıza kaynak oluşturulmaz. Böylece $PATHdikkatlice ayarladığınız .zshşey yüklenmeyecektir. GUI ortamları genellikle bunları kaynaklamaz, ancak~/.profile dosyanızı .

Bunu aşağıdakilere eklemeyi deneyebilirsiniz .pam_environment:

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

Yüklemek için GUI oturumunuzu yeniden başlatmanız gerekir.

Bu belge, $PATHdeğişkeninizi doğru şekilde ayarlamanıza yardımcı olabilir :

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

~/.pam_environmentDosyayı, kabuk veya emacs işlemlerimden erişebilmem gereken yönetilen ortam değişkenleri için kullanıyorum .

Not: Zeki bir yorumcu muhtemelen Mac'te olduğunuzu belirtir. $PATHMac GUI'nizde nasıl ayarlanacağımı bilmiyorum , ancak hala kabuğunuzun ortamı ve GUI ortamı arasındaki farkla ilgili nokta var. $PATHGUI için nasıl ayarladığınız OS sürümüne bağlı gibi görünüyor. Ancak şunları kullanabilirsiniz:

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

Gözlerinde farklı ~/.emacs.d/initsadece çalışması gerektiğini bir çözüm istiyorum.

PPS: Emacs içinde bir kabuk çalıştırmak istiyorsanız, muhtemelen ansi-termyerine kullanmaktan daha iyidir shell.


İTerm 2'nin kullanımından bahseden ankete katılan sorunun Linux ile ilgili olduğundan şüpheliyim .
wasamasa

3

PATH'ın bir kısmı kaybolursa, ~ / .emac'lerinize ekleyebilirsiniz.

;;; 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.

PATH sorunlarını önlemek için, her zaman ~ / .bashrc'den verilen PATH ile emac'ları komut satırından başlatırım.


2

Bunu gerçekleştirmenin bir başka yolu, kabuğa bir giriş kabuğu olduğunu ve böylece tüm doğru dosyaları kaynaklayacağını söylemektir. Ben ayarlayarak partisi yüzünden bunu explicit-bash-argsiçin ("--noediting" "--login"). Zsh eşdeğer setine olacak gibi görünüyor explicit-zsh-argsiçin ("-l").

Yani benim .emacs:

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

Sizinki gibi bir şey:

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

Bence bu "--noediting"gereksiz ve bu konuda zsh anlatmanın bir yolu yok gibi görünüyor, ama bu umduğunuz kadar iyi çalışmazsa araştırmak için bir şey olabilir.


1
Bu Emacs altında bir kabuk için çalışır. Via gibi doğrudan Emacs içinde çalışan komutlar için çalışmaz M-x shell-command.
mernst

1

Örneğin, aşağıdaki gibi bir özellik listesini kaydederek OS X çapında bir varsayılan yol da ayarlayabilirsiniz ~/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>

Yeni yol, oturumu kapatıp yeniden giriş yaptıktan sonra kabuklarda, Emac'lerde ve diğer uygulamalarda gösterilmelidir.

Bu yöntem, oturum açma öğesi olarak açılan uygulamalarda veya zorla kapatıldıktan sonra uygulamalar oturum açıldığında yeniden açıldığında yolu değiştirmez. Emacs, bir terminal uygulaması veya giriş öğelerindeki yolu değiştirmek istediğiniz başka uygulamalarınız varsa, bunları kaldırmanız gerekir.

10.9 ve önceki sürümlerde aşağıdakilere de böyle bir satır ekleyebilirsiniz /etc/launchd.conf:

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

Ancak, destek /etc/launchd.conf10.10'da kaldırıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.