Mengalami beberapa masalah dengan PATH
pengaturan pada Emacs yang memengaruhi lingkungan Haskell saya:
Saya menggunakan ZSH, dan ketika saya pergi ke baris perintah dan menelepon echo $PATH
, ia kembali:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Ini berasal dari .zprofile
konfigurasi tempat saya memiliki:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Jadi, dari baris perintah, ketika saya menelepon which cabal
, saya mendapatkan:/Users/g/Library/Haskell/bin/cabal
Ketika saya memulai Emacs dan pergi ke shell
dan menelepon which cabal
, saya mendapatkan: /usr/bin/cabal
yang menyebabkan saya masalah karena ini versi yang berbeda.
Ketika saya memeriksa echo $PATH
dari Emacs shell
, saya melihat:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Saya tidak tahu bagaimana PATH
bisa berbeda ...
Adakah yang tahu bagaimana cara mendapatkan ZSH
shell saya dan Emacs untuk menyetujui hal yang sama PATH
? Saya menduga itulah yang mengendalikan dari mana cabal
sedang diambil.
UPDATE : Menjalankan echo $SHELL
dari cetakan Emacs:/bin/zsh
UPDATE 2 : Ini ada di OSX .
PEMBARUAN 3 : Saya telah mencoba menggunakan modul exec-path-from-shell dan tidak berfungsi. Saya masih memiliki masalah yang sama, dan sebagai efek samping, itu mengacaukan warna tema terminal saya :(
PEMBARUAN 4 : Saya telah menginstal Emacs via brew install --cocoa --srgb emacs
dan saya menjalankan emacs yang ditautkan dengan cara ini:
~ ❯❯❯ 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
sumber
chsh...
kembali pada hari itu untuk mengganti shell default saya~/.profile
atau/etc/profile
kemudian.~/.zshenv
, yang akan diambil secara konsisten namun shell dimulai (interaktif vs. non-interaktif). Jikaexec-path-from-shell
adalah mengacaukan warna tema terminal Anda, Anda dapat mengaturexec-path-from-shell-arguments
untuknil
sebelum memanggilexec-path-from-shell-initialize
untuk memastikan itu tidak berjalan bagian interaktif config zsh Anda.Jawaban:
Anda juga dapat menginstal paket exec-path-from-shell dan menambahkannya ke file init Anda:
sumber
Ini adalah masalah lingkungan OSX yang mengganggu,
$PATH
kemunculan di Emacs berasal dari/etc/paths
file, yang kemudian ditambahkan dengan apa pun yang saya atur di shell. Saya menambahkan/Users/g/Library/Haskell/bin
ke bagian atas/etc/paths
file dan kemudian berfungsi dengan baik.Masuk ke shell dan menelepon
echo $PATH
di Emacs menunjukkan sekarang:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
Dan
cabal
versi ini memangcabal-install version 1.22.2.0
: DTerima kasih semuanya!!
sumber
$PATH
di OSX post .~/.zshenv
. Perubahan di sana tercermin dalam PATH Emacsecho export PATH=$PATH > ~/.zshenv
Emacs akanM-x shell
mengambilnya pada doa berikutnya.Jika Anda memulai emacs dari lingkungan GUI Anda (gnome, kde, ...) skrip startup shell Anda tidak akan bersumber dari lingkungan Anda. Sehingga
$PATH
Anda hati-hati mengatur di Anda.zsh
tidak akan dimuat. Lingkungan GUI umumnya tidak sumber ini, meskipun mereka dapat memuat~/.profile
file Anda .Anda dapat mencoba menambahkan ini ke
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Anda harus memulai kembali sesi GUI Anda untuk memuatnya.
Dokumen ini mungkin membantu Anda
$PATH
mengatur variabel dengan benar:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Saya menggunakan
~/.pam_environment
file untuk variabel lingkungan terkelola yang saya perlukan agar dapat diakses dari proses shell atau emacs saya.PS: Seorang komentator yang cerdik menunjukkan bahwa Anda mungkin menggunakan Mac. Saya tidak tahu cara mengatur Anda
$PATH
di Mac GUI, tetapi intinya masih berdiri mengenai perbedaan antara lingkungan shell Anda dan lingkungan GUI. Bagaimana Anda mengatur$PATH
GUI tampaknya tergantung pada versi OS. Namun Anda dapat menggunakan:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
di Anda
~/.emacs.d/init
jika Anda hanya menginginkan solusi yang seharusnya bekerja.PPS: Jika Anda ingin menjalankan shell di emacs, Anda mungkin lebih baik menggunakan
ansi-term
daripadashell
.sumber
Jika beberapa bagian PATH hilang, Anda dapat menambahkannya di ~ / .emacs Anda
Untuk menghindari masalah PATH, saya selalu memulai emacs dari baris perintah dengan PATH diekspor dari ~ / .bashrc.
sumber
Cara lain untuk mencapai hal ini adalah dengan memberi tahu shell bahwa itu adalah shell login sehingga sumber semua file yang tepat. Saya melakukan ini untuk bash dengan mengatur
explicit-bash-args
ke("--noediting" "--login")
. Sepertinya persamaan untuk zsh akan diaturexplicit-zsh-args
ke("-l")
.Jadi di dalam saya
.emacs
:Di dalam kamu, sesuatu seperti:
Saya pikir
"--noediting"
itu tidak perlu, dan sepertinya tidak ada cara untuk memberitahu zsh tentang ini, tapi itu mungkin sesuatu untuk diselidiki jika ini tidak bekerja sebaik yang Anda harapkan.sumber
M-x shell-command
.Anda juga dapat menetapkan jalur default OS X-wide dengan misalnya menyimpan daftar properti seperti ini sebagai
~/Library/LaunchAgents/my.startup.plist
:Jalur baru harus ditampilkan di shell, Emacs, dan aplikasi lain setelah Anda logout dan kembali.
Metode ini tidak mengubah jalur dalam aplikasi yang dibuka sebagai item login atau ketika aplikasi dibuka kembali saat login setelah shutdown paksa. Jika Anda memiliki Emacs, aplikasi terminal, atau aplikasi lain di mana Anda ingin mengubah jalur dalam item login, Anda harus menghapusnya.
Di 10.9 dan sebelumnya Anda juga bisa menambahkan baris seperti ini ke
/etc/launchd.conf
:Namun dukungan untuk
/etc/launchd.conf
dihapus pada 10.10.sumber