O terminal nativamente no Mac, ou seja, gerado pelo Spotlight ou Launchpad, adota as variáveis de ambiente desejadas, incluindo a personalização no ~/.bash_profile
. Mas quando eu corro Emacs ( Emacs.app
tirado de Emacs Para Mac OS X ) e shell desova dentro dele (usando shell
, eshell
ou term
), as conchas não adotar as mesmas variáveis de ambiente, como mencionado anteriormente.
Percebo que o shell adota seu ambiente a partir do processo que o inicia e é por isso que os valores do ambiente do shell variam os mesmos que os do Emac (por exemplo (getenv "PATH")
)
Se aventurar dentro do conteúdo Terminal.app
e Emacs.app
não me deu sorte.
Como posso obter automaticamente a mesma variável de ambiente que recebo no Terminal.app
shell gerado no Emacs? E eu não prefiro lançar o Emacs a partir do terminal.
(Eu percebo que isso é muito MacOSX-ish e as respostas podem propor soluções / ajustes totalmente fora do Emacs. Mas a pergunta diz respeito ao Emacs, portanto escolhi este site)
fonte
~/.bash_profile
é lido corretamente quando executoEmacs.app
assim/Applications/Emacs.app/Contents/MacOS/Emacs . &
usandoTerminal.app
.Respostas:
Recentemente, comecei a usar o emacs fora do terminal, o que estava me causando alguns problemas no PATH. Eu tentei configurá-lo adicionando
(getenv "PATH")
ao meu caminho executivo, entre outras coisas que, em última análise, nunca funcionaram.Acabei instalando o pacote exec-path-from-shell via melpa. Ele funciona usando a
$SHELL
variável de ambiente para solicitar ao seu shell que você imprima$PATH
e copie o resultado.Edit: Aqui está o código que eu uso
fonte
Dado o título real aqui "Como fazer com que o terminal / shell gerado no Emacs em execução no Mac herde as variáveis de ambiente do terminal nativo?" você não pode, pois o Emacs não terá o Terminal.app como um super processo em nenhum nível, portanto o Emacs não pode herdar nada do shell do Terminal.app. Você precisa tornar o ambiente o mesmo, fornecendo os mesmos arquivos.
Com base nesta resposta no AskDifferent
Você precisa observar quais são os arquivos de inicialização do bash. ~ / .bash_profile é lido em um shell de login ~ / .bashrc quando outro shell é iniciado.
O Cocoa Emacs é uma GUI e, quando executado, é executado em um subprocesso em que nada executou um shell de login, portanto, em seu ambiente, não há nada que tenha originado ~ / .bash_profile. O Emacs iniciará um shell sem login, para que qualquer coisa em ~ / .bashrc seja lida.
Esse tipo de coisa é por que é recomendado no manual do bash incluir isso em ~ /, bash_profile
e coloque suas configurações de ambiente em ~ / .bashrc
Por que razão /Applications/Emacs.app/Contents/MacOS/Emacs. trabalha no terminal. O Terminal.app padroniza a execução de um shell no modo de login e, portanto, o shell originou ~ / .bash_profile e o emacs é um subprocesso desse shell e, portanto, herda seu ambiente. Portanto, neste caso, você herda do shell no Terminal.app
Nota O X11 difere à medida que você o executa a partir de um shell, para que o shell tenha variáveis de ambiente, pois esse shell é iniciado como um login.
fonte
Como Mark disse, Terminal e iTerm 2 invoke conchas como shells de login, por padrão, de modo que lê Bash
~/.bash_profile
, mas não~/.bashrc
, masM-x shell
eM-x term
invocação de conchas como conchas não-login, para que lê Bash~/.bashrc
, mas não~/.bash_profile
. Adicione. ~/.bash_profile
a~/.bashrc
e continuar usando~/.bash_profile
como seu arquivo de configuração do Bash, ou adicionar. ~/.bashrc
para~/.bash_profile
e começar a usar~/.bashrc
como seu arquivo de configuração do Bash.Para criar
shell-command
eshell-command-on-region
ler~/.bash_profile
, adicione-l
ashell-command-switch
:Você pode definir um caminho padrão amplo para o OS X salvando, por exemplo, uma lista de propriedades como esta
~/Library/LaunchAgents/startup.plist
:O novo caminho deve ser mostrado nos aplicativos de terminal, no Emacs e em outros aplicativos após o logoff e o logon novamente. Esse método não altera o caminho nos aplicativos que são abertos como itens de logon ou que são reabertos no logon após um desligamento 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.
fonte