.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?


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.


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


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

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.


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


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.


A qual GUI você está se referindo? gnomo ou unidade
Nic Wanavit
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.