Como executar uma função ~ / .bashrc como um item de login da GUI

3

Estou usando o Debian Stretch com o Xfce. Meu diretório ~/bin tem muitos scripts. Isso, claro, está no meu $PATH , e eu executo scripts de lá, às vezes, quando eu faço login no Xfce via Session e Startup > Autostart de aplicativo. No meu arquivo ~/.bashrc , tenho meus aliases e funções personalizados. Eu uso as funções no arquivo ~/.bashrc para os bits de código mais curtos que eu prefiro não criar um script inteiro em ~/bin . No entanto, às vezes, gostaria de executar uma função do meu arquivo ~/.bashrc como um item de login da GUI.

Eu criei uma função de teste em ~/.bashrc . Em seguida, defino essa função para executar a partir de ~/.profile . A função é executada com êxito quando eu faço o seguinte: - Executar bash -l de um terminal - Faça o login na sessão tty

No entanto, ele não é executado quando eu efetuo login no meu ambiente gráfico do Xfce a partir do LightDM. A função não é executada quando adicionada em Sessão e inicialização > Autostart de aplicativo no Xfce. Para testar mais, adicionei um comando diretamente em ~/.profile . Ele é executado quando eu faço o login no Xfce.

Não consigo executar a função ~/.bashrc ao fazer login em um ambiente gráfico. Isso é bug? Uma configuração deve estar habilitada para executar funções no login da GUI? Ou o meu sistema acabou de ser projetado dessa maneira? Obrigado

    
por jbrock 27.02.2017 / 23:06

1 resposta

2

O padrão ~/.profile sources ~/.bashrc apenas se BASH_VERSION não for vazio, ou seja, (do padrão .profile ):

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Sob o Lightdm, os scripts de inicialização são executados por /bin/sh , que no Debian é um link simbólico para /bin/dash . Isso significa que quando ~/.profile é originado na inicialização, BASH_VERSION está vazio e, portanto, ~/.bashrc não é originado.

Soluções possíveis

  1. Execute as funções de ~/bin

  2. Outra solução (se você precisar de mais do que uma na inicialização) é ter um arquivo separado, digamos ~/.startup_functions onde você mantém todas as suas funções, fonte o arquivo de .profile e executar as funções daqui. Observe que, desde que você está executando -los com /bin/dash , você tem que verificar a compatibilidade.

Caso contrário, se você quiser usar bash como shell e origem de inicialização .bashrc na inicialização, uma coisa que você pode fazer é definir bash como padrão /bin/sh , por exemplo, executar

$ dpkg-reconfigure dash 

e siga as instruções.

Se você quiser definir as funções em .bashrc e executá-las na inicialização, observe que .profile carrega .bashrc apenas se o shell for interativo, se (como padrão) você tiver o seguinte teste em .bashrc

# If not running interactively, don't do anything
case $- in
    *i*) ;;
    *) return;;
esac

o que significa que você teria que remover este teste ou definir as funções necessárias antes, de qualquer forma, eu continuaria executando a função de ~/bin .

    
por 14.04.2017 / 22:05