Tendo alguns problemas com as PATH
configurações no Emacs que estão afetando meu ambiente Haskell:
Estou usando o ZSH e, quando vou para a linha de comando e ligo echo $PATH
, ele retorna:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Isso vem da .zprofile
configuração em que tenho:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Então, na linha de comando, quando ligo which cabal
, recebo corretamente:/Users/g/Library/Haskell/bin/cabal
Quando inicio o Emacs e vou para o shell
e chamo which cabal
, recebo: o /usr/bin/cabal
que está me causando um problema, pois é uma versão diferente.
Quando inspeciono echo $PATH
no Emacs shell
, vejo:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Eu não tenho idéia de como na Terra isso PATH
pode ser diferente ...
Alguém sabe como fazer com que meu ZSH
shell e o Emacs concordem com o mesmo PATH
? Eu suspeito que é isso que está controlando de onde cabal
está sendo carregado.
ATUALIZAÇÃO : Correndo echo $SHELL
do Emacs imprime:/bin/zsh
ATUALIZAÇÃO 2 : Isso está no OSX .
ATUALIZAÇÃO 3 : Tentei usar o módulo exec-path-from-shell e ele não funciona. Ainda tenho os mesmos problemas e, como efeito colateral, atrapalha minhas cores de tema do terminal :(
ATUALIZAÇÃO 4 : Instalei o Emacs via brew install --cocoa --srgb emacs
e executei o emacs vinculado desta maneira:
~ ❯❯❯ 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
fonte
chsh...
de volta no dia de mudar o meu shell default~/.profile
ou/etc/profile
então.~/.zshenv
, que serão originadas de forma consistente, no entanto, o shell é iniciado (interativo versus não interativo). Seexec-path-from-shell
é bagunçar suas cores do tema do terminal, você pode definirexec-path-from-shell-arguments
paranil
antes de chamarexec-path-from-shell-initialize
para ter certeza que não está funcionando as partes interativas de sua configuração zsh.Respostas:
Você também pode instalar o pacote exec-path-from-shell e adicioná-lo ao seu arquivo init:
fonte
Este é um problema de ambiente irritante para o OSX, o
$PATH
aparecimento no Emacs é proveniente de/etc/paths
arquivo, que é anexado ao que eu tiver definido no shell. Eu adicionei/Users/g/Library/Haskell/bin
ao topo do/etc/paths
arquivo e funcionou bem.Entrar no shell e chamar o
echo $PATH
Emacs mostra agora:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
E
cabal
a versão é de fatocabal-install version 1.22.2.0
: DObrigado a todos !!
fonte
$PATH
no OSX .~/.zshenv
. Mudanças não são refletidas no PATH Emacs'echo export PATH=$PATH > ~/.zshenv
faz com que o Emacs atendaM-x shell
na próxima invocação.Se você iniciar o emacs a partir do seu ambiente GUI (gnome, kde, ...), os scripts de inicialização do shell não serão originados no seu ambiente. Portanto, o
$PATH
que você definiu cuidadosamente.zsh
não será carregado. Os ambientes da GUI geralmente não os originam, embora possam carregar seu~/.profile
arquivo.Você pode tentar adicionar isso ao seu
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Você precisará reiniciar sua sessão da GUI para carregá-la.
Este documento pode ajudá-lo a
$PATH
definir sua variável corretamente:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Eu uso o
~/.pam_environment
arquivo para gerenciar variáveis de ambiente que precisam estar acessíveis nos meus processos shell ou emacs.PS: Um comentarista astuto indica que você provavelmente está no Mac. Não sei como configurá-lo
$PATH
na GUI do Mac, mas o ponto ainda permanece em relação à diferença entre o ambiente do seu shell e o ambiente da GUI. Como você configura$PATH
a GUI parece depender da versão do sistema operacional. No entanto, você pode usar:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
no seu
~/.emacs.d/init
se você quiser apenas uma solução que funcione.PPS: Se você quiser executar um shell no emacs, você é provavelmente melhor fora de usar
ansi-term
, em vez deshell
.fonte
Se alguma parte do PATH se perder, você poderá adicioná-lo no seu ~ / .emacs
Para evitar problemas de PATH, eu sempre inicio o emacs na linha de comando com o PATH exportado de ~ / .bashrc.
fonte
Outra maneira de fazer isso é simplesmente dizer ao shell que é um shell de logon para que ele obtenha todos os arquivos corretos. Eu faço isso para o bash definindo
explicit-bash-args
como("--noediting" "--login")
. Parece que o equivalente a zsh seria definidoexplicit-zsh-args
como("-l")
.Então no meu
.emacs
:No seu, algo como:
Eu acho que isso
"--noediting"
é desnecessário e não parece haver uma maneira de dizer ao zsh sobre isso, mas isso pode ser algo para investigar se isso não funcionar tão bem quanto você esperaria.fonte
M-x shell-command
.Você também pode definir um caminho padrão para todo o OS X salvando, por exemplo, uma lista de propriedades como esta
~/Library/LaunchAgents/my.startup.plist
:O novo caminho deve ser mostrado nos shells, no Emacs e em outros aplicativos após o logout e o logon novamente.
Esse método não altera o caminho nos aplicativos que são abertos como itens de logon ou quando os aplicativos são reabertos no logon após um encerramento forçado. Se você possui o Emacs, um aplicativo de terminal ou outros aplicativos em que deseja alterar o caminho nos itens de login, será necessário removê-los.
No 10.9 e versões anteriores, você também pode adicionar uma linha como esta para
/etc/launchd.conf
:No entanto, o suporte para
/etc/launchd.conf
foi removido em 10.10.fonte