Arquivos de inicialização do Bash explicados

Veja esta postagem no meu blog .

Depois de passar algum tempo solucionando um problema no trabalho, decidi montar uma explicação rápida sobre os diferentes tipos de shells e quais arquivos de inicialização cada um deles chama.

Tipos de casca

Shells de login

Um shell de login (também um shell interativo) é o primeiro processo executado sob sua ID de usuário quando você efetua login para uma sessão interativa.

O Bash executa os seguintes scripts no login:

  • / etc / profile
  • O primeiro encontrado do perfil ~ / .bash, ~ / .bash login, ~ / .profile

Cascas Interativas

Um shell interativo lê comandos da entrada do usuário em um tty. Entre outras coisas, esse shell lê arquivos de inicialização na ativação, exibe um prompt e ativa o controle de tarefas por padrão. O usuário pode interagir com o shell.

Ao entrar em um terminal interativo, o Bash também executa:

  • /etc/bash.bashrc
  • ~ / .bashrc

Shells não interativos

Um shell executando um script é sempre um shell não interativo.

Shells não interativos geralmente não executam arquivos de inicialização, no entanto, shells diferentes agem de maneira diferente. O Bash sempre lê ~ / .bashrc quando é invocado por rshd ou sshd, mesmo se não for interativo (mas não se for chamado como sh). Zsh sempre lê ~ / .zshenv.

Observe também que os aliases não são expandidos quando o shell não é interativo, a menos que a opção de shell expand_aliases seja definida usando shopt

shopt -s expand_aliases

Exemplos

Todos os exemplos a seguir assumem que ~ / .bashrc é chamado de ~ / .bash_profile. Cada exemplo também mostra em que ordem os arquivos de inicialização são chamados.

Exemplo 1

su [user]

Executa o shell interativo como usuário. Não carrega variáveis ​​nem muda de diretório. <br>
1- Chama ~ / .bashrc

Exemplo 2

su - [user]<br>
su -l [user]

O mesmo que um shell de login <br>
1- Chama o perfil
~ / .bash <br> 2- Chama o perfil ~ / .bashrc (do perfil .bash )

Exemplo 3

sudo -i -u [user]

Executa um shell de login por padrão <br>
1- Chama o perfil
~ / .bash <br> 2- Chama o perfil ~ / .bashrc (do perfil .bash )

Exemplo 4

sudo -i -u [user] /bin/bash

Executa um shell de login conforme especificado <br>
1- Chama o perfil
~ / .bash <br> 2- Chama o ~ / .bashrc (do perfil .bash ) <br>
3- Chama o ~ / .bashrc

Exemplo 5

sudo -i -u [user] /bin/bash --norc

Executa um shell de login e não carrega ~ / .bashrc <br>
1- Chama o perfil
~ / .bash <br> 2- Chama ~ / .bashrc (do perfil .bash )

Exemplo 6

sudo -i -u [user] /bin/bash --rcfile [file]

Executa um shell de login e carrega o [arquivo] especificado em vez de ~ / .bashrc <br>
1- Chama o perfil
~ / .bash <br> 2- Chama o ~ / .bashrc (do perfil .bash ) <br>
3- Chama [ Arquivo]