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


22

Estou configurando uma nova máquina Linux que recebi de nosso departamento de TI e notei que .profilenão é carregado quando inicio uma nova sessão de terminal. O shell atual é o Bash , embora eu tenha mudado do sh padrão que ele veio. Como faço para carregar .profilena inicialização?

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


Mostre-nos o comando que você usa para iniciar seu shell.
N16 de

Respostas:


24

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

Quando é iniciado como um shell interativo sem logon, não é. Ele processa /etc/bash.bashrc(se esse arquivo ou um arquivo semelhante estiver ativado na sua versão do Bash) e ~/.bashrc.

Você pode adicionar o seguinte ao seu ~/.bashrc(mas tenha cuidado para que os loops ou valores sejam alterados inadvertidamente):

. $HOME/.profile

8
Se você deseja que o seu .bashrc forneça seu perfil .profile (que eu não recomendo), você deve proteger-se contra a dupla fonte. Defina alguma variável de guarda ou algo assim # [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka

2
Sim, eu também não recomendo.
Pausado até novo aviso.

12
Um shell de login tentará ~ / .bash_profile, ~ / .bash_login e ~ / .profile em ordem e abrirá apenas o primeiro que encontrar.
Beano

3
Como já foi dito, isso NÃO é recomendado, pois a maneira usual é o perfil e os "amigos" (.bash_profile) originarem o .bashrc, e não o contrário. Pode ser que o seu programa de terminal NÃO seja um shell de login, mas um shell interativo de não login. Freqüentemente, há uma preferência que você pode definir - torne-o um shell de login para executar .profile, .login e / ou .bash_profile.
rholmes

15

Depende de como você inicia seu shell. Como já foi dito, um shell de login carregará seu perfil (ele procurará .bash_profile primeiro e depois tentará .profile). Se encontrar um desses, carrega-os. Um shell sem logon (interativo ou não interativo) irá originar .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 criado para iniciar certas coisas (como verificar e-mails) no login 'principal' de um servidor, e apenas itens de configuração normais para outros shells. Na maioria dos Linux, você fará logon agora, não está realmente fazendo login em um shell, pois está acessando alguma interface gráfica (KDE, gnome, CDE 'shudder'). Os "processos de login de geração" agora são resolvidos pelo seu gerenciador de sessões. É muito menos relevante agora.

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

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

como a primeira linha do .bashrc, proteja-se de coisas estranhas que acontecem ao executar um script bash saltando cedo:

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

5
.profiledeve ser mantido agnóstico. Sugiro configurar .bash_profilepara carregar .profilee depois carregar .bashrc. coloque apenas coisas agnósticas .profile, como PATHe LC_*outras coisas. Coloque o resto .bashrc.
Lesmana

@ Rich Homolka Por que [-f $ HOME / .bashrc] está duas vezes sob seu comando? Como o comando que você postou é diferente de apenas '. $ HOME / .bashrc '?
21815 David Doria

11
Protip: não coloque nada no seu .bashrc que grave em stdout ou stderr, pois isso pode interromper clientes não interativos para coisas como SCP. Coisas com saída (por exemplo, eu gostaria de ser saudado com um biscoito da sorte e uptime) só deve ir em .profile / .bash_profile
Brian A. Henning

@Lotharyx true. Tivemos uma kshrc padrão-ish exportado para stdout, eclodiu Xserver (Hummingbird Exceed)
Rico Homolka
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.