Os scripts Bash executados no gnome / nautilus não possuem variáveis de ambiente

6

No meu ~ / .bashrc e ~ / .profile eu tenho algumas variáveis definidas para alguns caminhos de arquivos:

export MY_VAR1="/path/to/somewhere"

No meu ~ / bin / (que é adicionado ao meu PATH) eu tenho alguns scripts que dependem dessas variáveis sendo definidas.

Se eu executar esses comandos no terminal, eles funcionarão conforme o esperado.

No entanto, se eu tentar clicar duas vezes em um script no Nautilus e executá-lo, ele será executado como se essas variáveis não estivessem definidas.

A mesma coisa acontece se eu adicionar um dos scripts ao "Startup Applications" do Gnome usando o utilitário GUI ou se eu adicioná-los ao menu do Gnome usando o utilitário GUI "Main Menu".

Eu teria pensado que desde que eu incluí essas variáveis no meu ~ / .profile, que é executado no login que o gnome e o nautilus e os processos gerados por eles teriam acesso a essas variáveis.

O Gnome e o Nautilus são executados sob o meu usuário de login. Todos os meus scripts em ~ / bin têm o bash shebang no topo.

Eu sou novo no bash scripting, desculpe se estou perdendo algo óbvio. Eu estou usando o Debian Wheezy e o Gnome3.

    
por Felix Mc 26.11.2014 / 22:21

1 resposta

6

Isso porque uma sessão X inicial nunca lê seus ~/.bashrc e ~/.profile . Normalmente, o gerenciador de desktop é iniciado como root ou seu próprio usuário a partir de um script de inicialização. O processo resultante geralmente tem o ambiente do processo init quando atinge o script de inicialização do gerenciador de desktop. (Eu não vou falar sobre implementações de init menos estabelecidas neste momento.)

Após o login, ele gera um processo filho, que herda apenas esse ambiente. O processo filho descarta privilégios para o seu uid e executa /etc/X11/Xsession , que geralmente executa todos os scripts em /etc/X11/Xsession.d . Esses scripts geralmente definem variáveis de ambiente ou modificam especificamente a invocação do ambiente de área de trabalho.

Nesse diretório, você pode encontrar um arquivo como 40x11-common_xsessionrc nos sistemas Debian, que origina seu ~/.xsessionrc . O último arquivo em /etc/X11/Xsession.d iniciará seu ambiente de área de trabalho. Todos os seus processos de GUI serão criados a partir desse processo, portanto, herdam o ambiente configurado através de /etc/X11/Xsession.d e, consequentemente, seu ~/.xsessionrc .

~/.xsessionrc é um arquivo de script, que pode originar ~/.bashrc , mas esse é um estilo muito ruim, porque o seu DE o encanta, o processo do terminal herda esse ambiente e depois bate as fontes ~/.bashrc novamente, o que pode ter um lado indesejado efeitos.

No entanto, é totalmente aceitável ter um ~/.myenvironmentvariables , que contém definições de variáveis estritamente (ambiente) e é originado por ~/.bashrc e ~/.xsessionrc . Se você fizer isso, todos os seus processos herdarão as variáveis especificadas em ~/.myenvironmentvariables , especialmente os scripts de shell que você clica duas vezes no Nautilus.

    
por 26.11.2014 / 22:55