Qual é o propósito do .bashrc e como funciona?

Qual é o propósito do .bashrc e como funciona?

Encontrei o .bashrcarquivo e quero saber a finalidade/função dele. Além disso, como e quando é usado?

Responder1

.bashrcé uma festançascript de shellque o Bash é executado sempre que é iniciado interativamente. Ele inicializa uma sessão de shell interativa. Você pode colocar qualquer comando nesse arquivo que possa digitar no prompt de comando.

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

.bashrccorre emtodolançamento de shell interativo. Se você diz:

$ bash ; bash ; bash

e depois bater Ctrl-Dtrês vezes, .bashrcvai correr três vezes. Mas se você disser isso em vez disso:

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

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

Contrast .bash_profilee .profileque são executados apenas no início de um novo shell de login. ( bash -l) Você escolhe se um comando entra .bashrcvs .bash_profiledependendo se deseja que ele seja executado uma vez ou a cada início do shell interativo.

Como contra-exemplo para aliases, que prefiro colocar .bashrc, você deseja fazer PATHajustes .bash_profile, já que essas alterações normalmente não sãoidempotente:

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

Se você colocar isso .bashrcem vez disso, toda vez que você iniciar um sub-shell interativo, :/some/additionele será pregado no final do PATHnovo, criando trabalho extra para o shell quando você digitar um comando incorretamente.

Você obtém um novo shell Bash interativo sempre quecasca devicom :sh, por exemplo.

Responder2

O objetivo de um .bashrcarquivo é fornecer um local onde você possa configurar variáveis, funções e aliases, definir seu prompt (PS1) e definir outras configurações que deseja usar sempre que abrir uma nova janela de terminal.

Ele funciona sendo executado sempre que você abre um novo terminal, janela ou painel.

Um super mínimo pode ter o seguinte:

export CLICOLOR=1
export LANG="en_US.UTF-8"
alias cp="cp -i"
alias ls="ls --color=auto"
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "
export EDITOR="vim"

Isso é tudo que você realmente sabe para começar


Aqui está a versão "exagerada", útil para desenvolvedores experientes:

Um desenvolvedor experiente geralmente terá muito mais.
Você pode ver o meu aqui(foto com destaque 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/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[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. Configure meu arquivo de histórico para ignorar duplicatas e ser muito maior que o padrão.
-2. Opção de cor lsdependendo se você está usando Linux ou OSX
-3. Função " md" para criar 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 PS1 incrível, como em <code>20:00:43 durrantm Castle2012 /hom/durrantm/Dropnot/_/rails_apps/linker master \n $ _</code>
-10. Prompt PS2 aprimorado
-11. Defina vi como editor na linha de comando
-12. Defina vi como editor padrão
-13. execute meu .bash_aliasesarquivo se ele existir
-14. Execute meu script de conclusão da guia git (para controles remotos e filiais), se existir.
-15. Execute o salto automático se existir
-16. Permitir fazer cd sem digitar a parte do cd se a versão do bash >= 4
-17. Execute um script de conclusão bash se existir
-18. Use TMUX se estiver presente
-19. Adicione rvm ao meu PATH
-20. Use rvm se existir.

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

Isso também torna mais fácil usar o arquivo inteiro imediatamente em uma nova máquina, sem problemas que afetem a abertura de uma nova janela de terminal.

LEMBRETE - se você alterar seu .bashrc, certifique-se de iniciar uma nova janela de terminal para garantir que funcione ANTES de reiniciar (prática recomendada - faça isso imediatamente após a alteração). Se você bagunçar seu .bashrc e reiniciar, VOCÊ NÃO PODERÁ ENTRAR! Pessoalmente, também crio um segundo usuário 'admin' em máquinas pessoais para que, em tal emergência (login quebrado), eu possa fazer login nele e usar o sudo para corrigir meu outro arquivo .bashrc de login.

Responder3

É um basharquivo de configuração.

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

  • $HOME/.bashrc

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

  • /etc/profile(Sempre de origem)
  • $HOME/.bash_profile(o restante desses arquivos é verificado em ordem até que um seja encontrado e nenhum outro seja lido)
  • $HOME/.bash_login
  • $HOME/.profile

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

Eu adicionei um echoao meu .bashrce.bash_profile

Shell interativo versus shell de login

veja man bashpara mais informações

informação relacionada