Diferença entre o lançamento de um aplicativo de um atalho de teclado vs o terminal?

5

O que tenho observado:

Quando digito emacs no gnome-terminal, ele é iniciado no mesmo ambiente, com as variáveis definidas em .bashrc . Se eu usar um atalho de teclado para o comando emacs , ele será aberto em um ambiente que não tenha essas variáveis.

Perguntas:

  1. Existe algum motivo para esse comportamento?
  2. Como posso obter o emacs para abrir em um ambiente com configurações de .bashrc ?
  3. Se eu tiver acesso root, posso definir essas variáveis "em todo o sistema"?

Plano de fundo adicional: eu preciso é poder acessar as variáveis de dentro de R, conforme descrito em uma pergunta SO relacionada ( Como acessar uma variável de ambiente bash de dentro de R no emacs ), e eu também preciso do caminho para minha distribuição texlive para a Auctex. A questão atual é diferente, em geral estou mais interessado na diferença entre lançar o emacs de dentro do terminal e iniciar o emacs no menu Aplicativos, o Gnome-do, ou atalho de teclado que chama emacs ou /usr/bin/emacs23 %F .

    
por Abe 13.06.2012 / 16:12

1 resposta

7

~/.bashrc é normalmente lido para shells interativos secundários após o login. Se você quiser inicializar seus parâmetros no login, use ~/.profile . Para aplicar os parâmetros em todo o sistema, use /etc/profile . É o primeiro arquivo lido pelo bash.

Para tornar as coisas mais claras, acho que vou explicar um pouco mais.

  • Quando você faz login, seu shell de login lê primeiro o% global/etc/profile, em seguida, ~/.profile e os parâmetros / variáveis mencionados nele são inicializados. No entanto, você não vê este shell como terminal porque a GUI do sistema X-window está em execução.
  • Após o login, quando você abre um terminal secundário / emulador de terminal, por ex. gnome-terminal ~/.bashrc é lido e os parâmetros / variáveis declarados estão disponíveis apenas para o terminal secundário. Note que este terminal secundário é um processo filho do seu shell de login.
  • Quando você inicia um aplicativo a partir do menu, ele é executado como um processo filho de seu shell de login e herda os parâmetros de seu processo ancestral. Mas .bashrc não estava disponível para o shell de login principal; por isso não está disponível para aplicativos também. Portanto, nada em .bashrc não estará disponível para esses aplicativos se for executado no menu. Mas quando você abre um comando gnome-terminal e executa a partir daí, os aplicativos são iniciados como filhos de gnome-terminal e herdam os parâmetros de .bashrc a partir dele.
por Samik 13.06.2012 / 16:37