No Emacs no meu Mac, como 'Compile Command' pode ver o PATH definido em ~ / .bashrc?

0

No Emacs v23.4.1 no meu Mac OSX Mavericks, como Meta-x compile pode ver $PATH para o bash como definido no meu ~ / .bashrc? No momento, PATH=/usr/bin:/bin:/usr/sbin:/sbin , enquanto em uma shell normal, é PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/adt-bundle-mac-x86_64-20130522/sdk/tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/platform-tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/platform-tools

Surpreendentemente, passar bash -c "echo $PATH" para o Compile Command ainda dá /usr/bin:/bin:/usr/sbin:/sbin .

Por que o Emacs não está usando meu ~ / .bashrc para o comando compile e existe outro arquivo init que ele usa e que também é usado pelos shells normais do bash? O que há de diferente no shell criado pelo Compile Command .

    
por WilliamKF 20.03.2014 / 02:47

2 respostas

1

compile não invoca .bashrc porque a compilação usa um shell interativo e bash invoca .bashrc quando invocado como um interativo shell não-login .

Felizmente, bash tem um mecanismo para inicializar shells não interativos através da variável de ambiente BASH_ENV :

When Bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following command were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

but the value of the PATH variable is not used to search for the file name.

Portanto, se você definir a variável de ambiente BASH_ENV como $HOME/.bashrc , ela deverá invocar seu .bashrc no sub-shell compile .

Configurar variáveis de ambiente para aplicativos do OS X Mavericks parece ser uma aventura em si. Eu finalmente recorri a colocá-lo no meu arquivo .emacs , por exemplo:

(setenv "BASH_ENV" "$HOME/.bashrc")
    
por 09.05.2014 / 03:09
0

Meu trabalho atual é fazer:

Meta-x compile source ~/.bashrc; cd ~/myCode/src; make

Mas ainda gostaria de entender por que Meta-x compile não reflete o conteúdo de .bashrc .

    
por 20.03.2014 / 17:11