Bash não carrega '.profile' em uma nova sessão no Linux

Aug 16 2010

Estou configurando uma nova máquina Linux que obtive de nosso departamento de TI e percebi que .profilenão está carregada quando inicio uma nova sessão de terminal. O shell atual é o Bash , embora eu o altere do sh padrão com o qual ele veio. Como faço para carregá-lo .profilena inicialização?

Eu acessar o shell via SSH : ssh myusername@remotemachine. Tenho privilégios de administrador nele.

Respostas

24 Pauseduntilfurthernotice. Aug 16 2010 at 14:38

Quando o Bash é iniciado como um shell de login interativo, um dos arquivos que ele pode processar é ~/.profile.

Quando ele começa como um shell interativo sem login, não o faz. Ele processa /etc/bash.bashrc(se esse arquivo ou um arquivo semelhante estiver ativado em sua versão do Bash) e ~/.bashrc.

Você pode adicionar o seguinte ao seu ~/.bashrc(mas tome cuidado com os loops ou valores sendo alterados inadvertidamente):

. $HOME/.profile
16 RichHomolka Aug 16 2010 at 17:28

Depende de como você inicia seu shell. Como já foi dito, um shell de login carregará seu perfil (ele procurará por .bash_profile primeiro e, em seguida, tentará .profile). Se encontrar um desses, ele os carrega. Um shell sem login (interativo ou não interativo) fornecerá .bashrc.

Eu sugiro colocar tudo em .bashrc. A divisão .profile / .bashrc era meio arbitrária e fazia mais sentido nos velhos tempos do UNIX, quando tty não era apenas um nome de dispositivo e significava um TeleType real. Ele foi feito para iniciar certas coisas (como verificar e-mails) no login 'principal' de um servidor, e apenas coisas de configuração normal para outros shells. Na maioria dos Linuxes você irá logar agora, você não está realmente logando em um shell, já que está logando em alguma interface gráfica (KDE, gnome, CDE 'shudder'). Os "processos de login de geração" agora são gerenciados pelo seu gerenciador de sessão. É muito menos relevante agora.

Minha sugestão: faça seu .profile consistir apenas em:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

como a primeira linha de .bashrc, proteja-se contra coisas estranhas que acontecem ao executar um script bash pulando antes:

[[ $- != *i* ]] && return