Qual é o objetivo do .bashrc e como funciona?

111

Eu encontrei o arquivo .bashrc e quero saber o propósito / função dele. Também como e quando é usado?

    
por Pandya 13.05.2014 / 07:48

3 respostas

102

.bashrc é um script de shell que o Bash é executado sempre que é iniciado de forma interativa. Inicializa uma sessão de shell interativa. Você pode colocar qualquer comando nesse arquivo que você possa digitar no prompt de comando.

Você coloca comandos aqui para configurar o shell para uso em seu ambiente específico ou para personalizar as coisas de acordo com suas preferências. Uma coisa comum para colocar em .bashrc são aliases que você deseja estar sempre disponível.

.bashrc é executado em todos os lançamentos do shell interativo. Se você disser:

$ bash ; bash ; bash

e depois pressionar Ctrl-D três vezes, .bashrc será executado três vezes. Mas se você disser isso em vez disso:

$ bash -c exit ; bash -c exit ; bash -c exit

então .bashrc não será executado, pois -c torna a chamada Bash não interativa. O mesmo acontece quando você executa um script de shell a partir de um arquivo.

Contraste .bash_profile e .profile que são executados apenas no início de um novo shell de login. ( bash -l ) Você escolhe se um comando vai em .bashrc vs .bash_profile dependendo se você deseja que ele seja executado uma vez ou para cada início de shell interativo.

Como contraexemplo para aliases, que eu prefiro colocar em .bashrc , você deseja fazer PATH ajustes em .bash_profile , já que essas alterações normalmente não são idempotent :

export PATH="$PATH:/some/addition"

Se você colocar isso em .bashrc , toda vez que você lançar um sub-shell interativo, :/some/addition será colocado no final do PATH novamente, criando um trabalho extra para o shell quando você digitar um erro comando.

Você recebe um novo shell Bash interativo sempre que você shell de vi com :sh , por exemplo.

    
por 13.05.2014 / 08:02
19

A finalidade de um arquivo .bashrc é fornecer um local onde você possa configurar variáveis, funções e aliases, definir seu prompt (PS1) e definir outras configurações que você deseja usar a cada início de uma nova janela de terminal. .

Funciona sendo executado toda vez que você abre um novo terminal, janela ou painel.

Você pode ver o meu aqui (foto com realce de sintaxe) :

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)//'; }
HOST='3[02;36m\]\h'; HOST=' '$HOST
TIME='3[01;31m\]\t 3[01;32m\]'
LOCATION=' 3[01;34m\]'pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#_#g"''
BRANCH=' 3[00;33m\]$(git_branch)\[3[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[3[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

Explicação:

-1. Configurar meu arquivo de histórico para ignorar duplicatas e ser muito maior que o padrão.
-2. Opção de cor para ls dependendo se você estiver usando linux ou OSX
-3. Função " md " para fazer e cd em um diretório com um comando
-4. Encontre o branch git atual se estiver em um repositório git e ... -5. -9. Defina um prompt do PS1 incrível, como em -10. Prompt de PS2 aprimorado -11. Definir vi como o editor na linha de comando
-12 Definir o vi como editor padrão -13. execute meu arquivo .bash_aliases se ele existir -14 Execute meu script de conclusão de tabulação (para controles remotos e filiais), se existir.
-15 Execute o autojump se existir. -16. Permitir o cd'ing sem digitar a parte do cd se a versão bash > = 4
-17. Executar um script de conclusão bash se ele existir -18. Use TMUX se estiver presente
-19. Adicionar rvm ao meu PATH
-20. Use rvm se existir.

Eu fiz este portátil para que ele funcione em qualquer uma das minhas máquinas Linux ou OSX sem customização - portanto, vários testes de presença são feitos antes de usar certas funções e outros scripts.

Isso também facilita o uso de todo o arquivo imediatamente em uma nova máquina sem problemas que afetam abrindo uma nova janela de terminal.

    
por 14.05.2014 / 01:57
3

É um arquivo bash config.

Shells interativos (sem login), então a configuração é lida a partir desses arquivos:

  • $HOME/.bashrc

Para shells de login, a configuração é lida a partir desses arquivos:

  • /etc/profile (sempre originado)
  • $HOME/.bash_profile (o restante desses arquivos são verificados em ordem até que um seja encontrado, então nenhum outro é lido)
  • $HOME/.bash_login
  • $HOME/.profile

Ilustração simples de como / quando eles são carregados está na imagem abaixo.

Eu adicionei um echo ao meu .bashrc e .bash_profile

veja man bash para mais informações

    
por 15.09.2016 / 20:09

Tags