~ / .bashrc não autosourced em 12.04 lts

1

Como esta postagem diz, o ~/.bashrc é originado automaticamente no Ubuntu 12.04 Servidor LTS, que eu uso. Eu não sei de onde ele tirou essa informação, mas como ainda não está downvoted, acredito que seja verdade.

Eu usei este script para verificar se ele é originado:

if [ -f ~/.bashrc ]; then
   echo "Not sourced!";
fi

Apenas para informações: as permissões no momento são 775 e o proprietário sou eu.

Então, por que meu ~/.bashrc não é fornecido?

    
por Peter 24.02.2013 / 16:22

2 respostas

6

Como descobrimos, você não tem nenhum arquivo .profile em sua casa. Veja o manual do bash aqui para arquivos de inicialização do Bash.

Crie um perfil para você mesmo:

nano ~/.profile

Insira este texto no arquivo (copiado do Debian Squeeze):

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

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

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Dica: se você estiver criando um novo usuário, use a opção -m para torná-lo um diretório e coloque os arquivos padrão, por exemplo: sudo useradd example -m -d /home/example

    
por antivirtel 24.02.2013 / 16:53
0

Você pode ver exatamente o que é executado usando o modo verboso bash.

Para um shell sem login:

$ bash -v 2>&1 | less

Para um shell de login:

$ bash -vl 2>&1 | less

Eu não tenho um sistema 12.04 disponível para confirmar que o .bashrc é executado ao usar o shell de login. Tenho quase certeza de que é. Se não for, eu diria que você, ou o que estiver invocando o bash em seu nome, não está especificando um shell de login. Exemplos disso é a execução de comandos remotos via ssh.

ssh para obter um shell gera um shell de login

$ ssh remotehost

ssh para invocar um comando remoto não gera um shell de login

$ ssh remotehost remotecommand

Veja também a opção bash man page --norc que menciona que esta opção está ativada por padrão se bash é invocado como sh. Isso costumava ser importante, mas menos agora que o Ubuntu mudou para o sh em vez de bash.

    
por Jay _silly_evarlast_ Wren 24.02.2013 / 16:38