.bashrc não executado ao abrir novo terminal

84

O código no .bashrc não é executado quando abro uma nova janela de terminal no Ubuntu 12.04. Notei isso ao criar um arquivo .bash_aliases. Os aliases não apareceram quando eu abri um novo terminal. No entanto, quando eu digito, source .bashrcos aliases apareceram.

.bashrc deve ser executado toda vez que abro uma nova janela do terminal, certo?

Como faço isso acontecer?

Selah
fonte
Tente .profile.
21128 jippie
4
@jippie Não, .profileé lido no momento do login, não quando você abre um novo terminal, a menos que haja uma configuração incorreta em algum lugar. Selah: você mudou alguma coisa na configuração padrão? Por favor, execute ps -o command $$ $PPIDum terminal e copie e cole a saída.
Gilles
1
Só para ter certeza, você está colocando .bashrcna sua pasta pessoal, certo?
Jjed
Pode querer verificar echo $SHELL. Isso aconteceu comigo e o shell foi / bin / sh em vez de bash. Corrija-o no / etc / passwd e no seu .bashrc em execução.
Joe Flynn

Respostas:

129

Não é necessariamente executado; no topo do padrão .bashrc está este comentário:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Eu acredito que existe uma opção para executar o terminal bash como um shell de login ou não. Com o Ubuntu, o gnome-terminal normalmente não é executado como um shell de login; portanto, o .bashrc deve ser executado diretamente.

Para shells de login (como os terminais virtuais), normalmente o arquivo ~/.profileé executado, a menos que você tenha um ~/.bash_profileou ~/.bash_login, mas eles não estão lá por padrão. Por padrão, o Ubuntu usa apenas .profile.

O padrão ~/.profiletem isso:

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

Isso executa .bashrc, se disponível, assumindo que $ BASH_VERSION esteja presente em seu ambiente. Você pode verificar isso digitando o comando echo $BASH_VERSIONe ele deve exibir algumas informações sobre o número da versão - não deve estar em branco.

Marty Fried
fonte
4
Depois de entender essas instruções, entrei no aplicativo de terminal e editei -> preferências de perfil -> Título e comando -> Executar comando como um shell de login. Eu desmarquei isso. Obrigado pela ajuda.
Selah
Você pode esclarecer quando o .profile (daí o .bashrc) é carregado / lido? Parece que isso é feito quando os usuários efetuam login na sessão da área de trabalho. A resposta sugere isso ocorre quando você inicia um novo terminal sessão / shell "Para os reservatórios de login (como os terminais virtuais), normalmente o arquivo ~ / .profile é executado ..."
ouriço
4
Ele é normalmente executado quando você inicia um novo shell de login (sessão não realmente desktop, porque você pode executar um novo shell de login da sessão de desktop). Como eu disse, é executado por padrão, mas não se você criou ~/.bash_profileou ~/.bash_login. Você pode testar marcando ou desmarcando a caixa de seleção Edit -> Profile Preferences -> Title and Command -> "Run command as a login shelle, em seguida, saia e execute novamente o terminal. Você pode repetir algo de .profile para testar.
perfil completo de Marty Fried
@Selah Seu comentário me ajudou mais do que a resposta real;) muito obrigado por fazer o comentário!
Aleks
Portanto, se você criou ~/.bash_profileou ~/.bash_loginem seu sistema e deseja mantê-los, mas ainda deseja ~/.profilee a partir daí ~/.bashrcexecutado, você pode obtê-lo por conta própria ~/.bash_profileou ~/.bash_logincom uma linha que contenha source "$HOME/.profile". Dá-lhe de volta a saída colorida de ls também nas conchas de login!
tanius
26

No meu caso, simplesmente as .bashrclinhas do carregador estavam ausentes no.bash_profile

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

Adicionei-o manualmente e funcionou com meu novo login

user3584014
fonte
3
.bash_profile? O Ubuntu usa um .profilepor padrão, não .bash_profile.
muru
O servidor ubuntu geralmente não capta .bashrc ... acima funciona assim ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Carrega o padrão
Scott Stensland
Isso resolveu para mim! Eu adicionei pcree parece que ele substituiu o perfil do bash em vez de adicioná-lo.
shapiro yaacov 03/02
7

.bash_profilemantém a configuração para o shell bash. Quando você abre um terminal, ele primeiro lê e executa comandos de ~/.bash_profile. Portanto, você pode adicionar o seguinte .bash_profilepara configurar o shell de acordo com o bashrc.

. ~/.bashrc
SD.
fonte
A menos que o seu terminal está executando um shell de login (o que não acontece por padrão no Ubuntu), ~/.bash_profilenão será lido (e que não existe por padrão no Ubuntu)
Muru
5

Se $BASH_VERSIONnão estiver definido, tente usar o chshcomando para definir seu shell /bin/bash.

Eu tive um problema semelhante com o 12.04 LTS, e a nova conta de usuário tinha o shell padrão definido /bin/sh, que foi a causa do problema.

evan_b
fonte
Essa foi a razão!
mulya 24/09/15
1

Accoding para o comentário em .profile

~ / .profile: executado pelo interpretador de comandos para os shell de login. 11 Este arquivo não é lido pelo bash (1), se ~ / .bash_profile ou ~ / .bash_login¬ 10 # existe

Então lá vai, se ~/.bash_profileou ~/.bash_login exists, esses serão executados em vez de~/.profile

se você deseja executar ~/.bashrcbasta adicionar a linha source ~/.bashrcembash_profile

Nic Wanavit
fonte
1
Eu experimentei exatamente o mesmo problema. Eu .bashrcestava sendo originado até criar um .bash_profilearquivo. Então, acrescentei a source ~/.bashrc linha no meu .bash_profilearquivo.
Lashae
0

Em vez de passar por tudo isso, basta ir Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"e, na caixa de comando Personalizada, escreva bashe feche-a. Na próxima vez que você abrir o terminal, ele também será executado automaticamente.

Furqan Ali
fonte
A qual GUI você está se referindo? gnomo ou unidade
Nic Wanavit