O que é o arquivo .bashrc?

101

Os shell do Unix ao iniciar a leitura do .bashrcarquivo e executar os comandos escritos nele. O que é esse arquivo e o que ele executa?

abacaxi
fonte
2
Tente abrir o arquivo em um editor de texto - ele está em texto simples.
Will Bickford

Respostas:

68

Na verdade, é bashespecificamente o que lê .bashrc(e /etc/bash.bashrc). Existem muitas conchas diferentes.

A página de manual do bash (de Brian Fox e Chet Ramey; também a página de informações "Bash Startup Files" ) é a referência autorizada:

Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de ~/.bashrc, se esse arquivo existir. Isso pode ser inibido usando a --norcopção A --rcfileopção file forçará o bash a ler e executar comandos do arquivo em vez de ~/.bashrc.

Quando o bash é iniciado de maneira não interativa, para executar um script de shell, por exemplo, ele procura a variável BASH_ENVno ambiente, expande seu valor se aparecer lá e usa o valor expandido como o nome de um arquivo para ler e executar. O Bash se comporta como se o seguinte comando tivesse sido executado:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi  

mas o valor da PATHvariável não é usado para procurar o nome do arquivo.

O arquivo é apenas comandos de shell. É normalmente usado para alterar prompts, definir variáveis ​​de ambiente e definir procedimentos de shell. Tradicionalmente, o arquivo .profileé usado para esse fim, mas bashtem tantas extensões que precisa de seu próprio arquivo de inicialização para usuários que desejam colocar bashisms nos arquivos de inicialização.

" Não é um shell de login " significa coisas como o lançamento de scripts e, geralmente, janelas de terminal iniciadas pelos gerenciadores de janelas. Às vezes eu configuro sistemas * nix para ter .bashrce BASH_ENVapenas fonte .profile. Contanto que você não se desvie para fora dos comandos do shell POSIX, obterá a mesma inicialização em qualquer shell.

É particularmente valioso quando shé realmente bash, o que às vezes acontece. Para fazer isso, use:

. .profile

Uma razão pela qual tudo é tão complexo é porque, às vezes, as pessoas colocam coisas que produzem saída nos arquivos de inicialização do shell ou definem avisos incondicionalmente. Isso causa muitos problemas ao executar programas de shell e comandos de backtick em idiomas, sem mencionar os system(3)programas em C. A maneira como a bashinicialização foi projetada, eu acho, para ter um arquivo em que a saída e a configuração do prompt estão OK e um arquivo em que não está. Tradicionalmente, um teste em tempo de execução seria feito para distinguir a interatividade, por exemplo, verificando se o prompt está definido.

DigitalRoss
fonte
Boa resposta. Apenas algumas citações: O arquivo é apenas comandos shell. É normalmente usado para alterar prompts, definir variáveis ​​de ambiente e definir procedimentos de shell.
smwikipedia
2
Alguém sabe o que a parte rc de .bashrc / .zshrc significa?
WORMSS
4
@WORMSS: Boa pergunta! Você não é o único se perguntando sobre isso .
Caleb Xu
Talvez rc signifique configuração de tempo de execução.
Mike Diehn
12

Quando o Bash é iniciado, ele executa os comandos em uma variedade de scripts diferentes.

Quando o Bash é chamado como um shell de login interativo, ele primeiro lê e executa comandos do arquivo / etc / profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.

Quando um shell de login sai, o Bash lê e executa comandos do arquivo ~ / .bash_logout, se existir.

Quando um shell interativo que não é um shell de login é iniciado, o Bash lê e executa comandos de ~ / .bashrc, se esse arquivo existir. Isso pode ser inibido usando a opção --norc. A opção --rcfile file forçará o Bash a ler e executar comandos do arquivo em vez de ~ / .bashrc.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Aqui estão alguns truques e dicas:

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Vamos tentar definir o prompt para que ele possa exibir a data e o nome do host de hoje:

PS1="\d \h $ "
randomx
fonte
11
Por que é .profiledepois .bash_profile? Alguma lógica?
Pacerier
10

Ele deve conter vários comandos de "inicialização" para o seu shell, por exemplo:

  • Criando aliases úteis (por exemplo alias ll='ls -l').
  • Adicionando mais diretórios ao PATH.
  • Definindo novas variáveis ​​de ambiente.
Roman Zeyde
fonte
O que é uso de alias?
abacaxi
2
@ abacaxi: Um alias é uma maneira de executar um comando, que pode ser longo, com um mais curto. Por exemplo, o alias ll='ls -l'permite digitar llpara executar o ls -lcomando.
Wuffers