Esta pergunta foi feita no superusuário existe uma maneira de recarregar variáveis ​​de ambiente no emacs , mas nenhuma boa solução foi fornecida.
Estou usando o EmacsClient com frequentemente mais de 30 buffers abertos; se eu alterar uma variável de ambiente no shell, preciso sair do EmacsClient (e reabrir todos os buffers) ou preciso definir manualmente a variável de ambiente também no Emacs. Acho irritante não poder atualizar facilmente as variáveis ​​de ambiente no Emacs. Alguma sugestão?
Não há uma maneira direta de fazer isso, porque alterar uma variável de ambiente no processo pai não atualizará seu valor conforme exportado para um filho.
exec-path-from-shell fornece o exec-path-from-shell-copy-envcomando, que permite copiar o valor das variáveis ​​de ambiente nas sessões do Emacs. Por exemplo, M-x exec-path-from-shell-copy-env RET FOOdefine o valor de $FOOno Emacs também.
Observe que exec-path-from-shell-copy-envgera um novo shell para extrair o valor da variável de ambiente. Portanto, ele funcionará apenas para variáveis ​​definidas nos arquivos de configuração do shell (por exemplo .bashrc), mas não para variáveis ​​definidas apenas em uma sessão do shell em execução export. Extrair essas variáveis ​​geralmente é impossível sem hacks complicados que inspecionam /proc/ou API semelhante para processos em execução.
Com relação aos últimos valores / transitórios, se o Emacs estiver em execução como servidor, será fácil passar os valores atualizados para o emacsclient diretamente desse shell.
@phils Graças, veja a minha resposta atualizados ..
Como solução alternativa, é possível usar o seguinte (Linux, Bash):
Primeiro execute a printenv -0 > env.txtpartir da janela do terminal Bash,
Então, no Emacs, execute
Acontece que isso pode ser feito de maneira mais elegante usando a --evalopção do emacsclientcomando: Define a Bash script update_emacs_env:
Onde server_nameestá o nome do servidor Emacs e my-update-envé uma função definida pelo seu ~/.emacsarquivo:
Agora você pode simplesmente digitar update_emacs_envna linha de comando do shell para atualizar as variáveis ​​de ambiente do Emacs.
E você pode executar o "printenv" a partir de dentro da função também ...
@mankoff Na verdade, eu acho que você não podia .. :) (Seria imprimir os valores antigos então)
Você não pode gerar um shell com o sinalizador de login? Ou sourceo .bashrc, .bash_profile etc.?
Sim .. mas não ajudaria no caso especial se eu exportar no shell diretamente da linha de comando, usandoexport VAR=value