A máquina Linux executando o Bash lê determinados arquivos quando você faz login para configurar seu ambiente shell. Mas quais arquivos são lidos e quando podem ser confusos, o que torna difícil saber se deve editar o arquivo .bashrc, o arquivo .bash_profile ou outro arquivo de configuração. Aqui está o que você deve saber.
Índice
Os diferentes tipos de casca
O ambiente que você obtém ao iniciar um shell é definido pelas configurações mantidas nos arquivos de configuração ou de perfil. Eles contêm informações que estabelecem coisas como as cores do texto, o prompt de comando, os aliases e o caminho que os arquivos executáveis são pesquisados quando você digita o nome de um programa.
Existem vários arquivos diferentes – em locais diferentes no sistema de arquivos – onde essas configurações são armazenadas. Mas antes de analisarmos quais arquivos são lidos quando você inicia um shell, precisamos deixar claro que tipo de shell você está usando.
Um shell de login é um shell no qual você faz login. Quando você inicializa o computador e faz login, abaixo do ambiente gráfico da área de trabalho há um shell de login. Se você se conectar a outro computador por meio de uma conexão SSH , também fará login em um shell de login.
O tipo de shell que você obtém ao abrir uma janela de terminal é um shell sem login. Você não precisa se autenticar para iniciar um shell quando já estiver logado. Shells de login e sem login são shells interativos. Você os usa digitando instruções, pressionando a tecla “Enter” e lendo as respostas na tela.
Existem também shells não interativos. Esses são os tipos de shells iniciados quando um script é executado. O script é iniciado em um novo shell. A coisa
#!/bin/bash
na parte superior do script indica qual shell deve ser usado.
#!/bin/bashecho -e "Olá, mundo!\n"
Este script será executado em um shell Bash não interativo. Observe que mesmo que o shell não seja interativo, o próprio script pode ser. Este script é impresso na janela do terminal e pode aceitar facilmente a entrada do usuário.
Shells não interativos
Os shells não interativos não leem nenhum arquivo de perfil quando são iniciados. Eles herdam variáveis de ambiente, mas não sabem nada sobre aliases, por exemplo, se estão definidos na linha de comando ou em um arquivo de configuração.
Você pode testar se um shell é interativo ou não observando as opções que foram passadas para ele como parâmetros de linha de comando. Se houver um “i” nas opções, o shell é interativo. O parâmetro especial Bash $-
contém os parâmetros de linha de comando para o shell atual.
[[ $- == *i* ]] && echo 'Interativo' || echo 'Não interativo'
Vamos criar um alias chamado xc
que significará “gato”. Também verificaremos se temos um $PATH
conjunto de variáveis.
alias xc=gato
echo $PATH
Tentaremos acessar ambos dentro deste pequeno script. Copie este script em um editor e salve-o como “int.sh”.
#!/bin/bashxc ~/text.dat
echo "Variável=$PATH"
Precisaremos usar parachmod
tornar o script executável.
chmod +x int.sh
Vamos executar nosso script:
./int.sh
Em seu shell não interativo, nosso script não pode usar o alias, mas pode usar a variável de ambiente . Os shells interativos são mais interessantes no uso de arquivos de perfil e configuração.
Shells de login interativos
Existem dois tipos de shells de login interativos. Um é o shell que permite fazer login no seu computador. Em desktops, geralmente é o shell subjacente ao seu ambiente de desktop. Quer você use um ambiente de área de trabalho em janela ou lado a lado , algo deve autenticá-lo no sistema Linux e permitir que você faça login.
Em servidores sem um ambiente de desktop instalado, você faz login diretamente em um shell interativo. Você pode fazer o mesmo em um computador desktop se sair do ambiente de desktop e acessar um terminal. No GNOME você pode fazer isso com a combinação de teclas Ctrl+Alt+F3. Para voltar à sessão do GNOME, pressione a combinação de teclas Ctrl+Alt+F2. O shell ao qual você se conecta por meio de um SSH também é um shell de login.
O perfil e os arquivos de configuração chamados podem ser definidos usando variáveis de ambiente, portanto podem variar de distribuição para distribuição. Além disso, nem todos os arquivos são usados por todas as distribuições. Em uma instalação genérica do Bash, os shells de login interativos leem o arquivo “/etc/profile”. Isso contém opções de configuração de shell para todo o sistema. Se existirem, este arquivo também lê arquivos como “/etc/bash.bashrc” e “/usr/share/bash-completion/bash_completion”.
Bash então procura um arquivo “~/.bash_profile”. Se não existir, o Bash procura um arquivo “~/.bash_login”. Se esse arquivo não existir, o Bash tenta encontrar um arquivo “.profile”. Depois que um desses arquivos é encontrado e lido, o Bash para de pesquisar. Portanto, na maioria dos casos, é improvável que “~/.profile” seja lido.
Freqüentemente, você encontrará algo assim em seu “~/.bash_profile” ou, como uma espécie de proteção, em seu arquivo “~/.profile”:
# se estiver executando o bashse [ -n "$BASH_VERSION"]; então
#inclua .bashrc se existir
se [ -f "$HOME/.bashrc"]; então
. "$HOME/.bashrc"
fi
fi
Isso verifica se o shell ativo é Bash. Se for, ele procura um arquivo “~/.bashrc” e o lê se for encontrado.
Shells interativos sem login
Um shell interativo sem login do Bash lê “/etc/bash.bashrc” e depois lê o arquivo “~/.bashrc”. Isso permite que o Bash tenha configurações específicas para todo o sistema e para o usuário.
Este comportamento pode ser alterado com sinalizadores de compilação quando o Bash é compilado, mas seria uma circunstância rara e peculiar encontrar uma versão do Bash que não origine e leia o arquivo “/etc/bash.bashrc”.
Cada vez que você abre uma janela de terminal em sua área de trabalho, esses dois arquivos são usados para configurar o ambiente desse shell interativo sem login. O mesmo acontece com shells iniciados por aplicativos, como a janela do terminal no IDE Geany .
Onde você deve colocar seu código de configuração?
O melhor lugar para colocar seu código de personalização pessoal é no arquivo “~/.bashrc”. Seus aliases e funções de shell podem ser definidos em “~/.bashrc” e serão lidos e disponibilizados para você em todos os shells interativos.
Se sua distribuição não lê seu “~/.bashrc” nos shells de login, e você gostaria que fizesse isso, adicione este código ao seu arquivo “~/.bash_profile”.
# se estiver executando o bashse [ -n "$BASH_VERSION"]; então
#inclua .bashrc se existir
se [ -f "$HOME/.bashrc"]; então
. "$HOME/.bashrc"
fi
fi
Modularidade é melhor
Se você tiver muitos aliases ou quiser usar os mesmos aliases em várias máquinas, é melhor armazená-los em seus próprios arquivos, e o mesmo com suas funções shell. Você pode chamar esses arquivos do seu arquivo “~/.bashrc”.
Em nosso computador de teste, os aliases são armazenados em um arquivo chamado “.bash_aliases” e um arquivo chamado “.bash_functions” contém as funções do shell.
Você pode lê-los em seu arquivo “~/.bashrc” assim:
# leia meus apelidosse [ -f ~/.bash_aliases ]; então
. ~/.bash_aliases
fi
# leia minhas funções do shell
se [ -f ~/.bash_functions ]; então
. ~/.bash_functions
fi
Isso permite que você mova facilmente seus aliases e funções entre computadores. Você só precisa adicionar as linhas acima ao arquivo “~/.bashrc” em cada computador e copiar os arquivos contendo seus aliases e funções de shell para o diretório inicial de cada computador.
Isso significa que você não precisa copiar todas as definições de “~/.bashrc” em um computador para os arquivos “~/.bashrc” em cada um dos outros computadores. Também é melhor do que copiar todo o arquivo “~/.bashrc” entre computadores, especialmente se eles estiverem executando o Bash em distribuições diferentes.
Resumindo
Os arquivos que você realmente precisa conhecer são:
- /etc/profile : definições de configuração de todo o sistema. Usado por shells de login.
- ~/.bash_profile : usado para armazenar configurações para usuários individuais. Usado por shells de login.
- ~/.bashrc : Usado para armazenar configurações para usuários individuais. Usado por shells interativos sem login. Também pode ser chamado a partir do arquivo “~/.bash_profile” ou “~/.profile” para shells de login.
Um método conveniente é colocar suas configurações pessoais em “~/.bashrc” e certificar-se de que seu arquivo “~./bash_profile” chame seu arquivo “~/.bashrc”. Isso significa que suas configurações pessoais são mantidas em um único arquivo. Você obterá um ambiente de shell consistente em shells de login e sem login. Combinar isso com o armazenamento de seus aliases e funções de shell em arquivos que não são do sistema é uma solução simples e robusta.