gutocarvalho.net

cotidiano simples, vida feliz

osx, entendendo o carregamento de arquivos no bash login

By

ITerm2-icon

Se você veio do mundo linux como eu, acostumado a personalizar seu arquivo .bashrc para o dia-a-dia no seu console, deve estar se perguntando porquê esse arquivo não é carregado no MAC.

A explicação  – até onde pude entender – é a seguinte, por padrão quando executamos um aplicativo de terminal (terminal, iterm, iterm2, etc) o programa chama via shell o comando /usr/bin/login, transformando o shell em um login shell. Em ambientes UNIX o arquivo .bashrc não é utilizado na inicialização de um login shell conforme orienta a MANPAGE do BASH.

When bash is invoked as an interactive login shell, or as a non-interactive shell with the –login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The –noprofile option may be used when the shell is started to inhibit this behavior.

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the –norc option. The –rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

Logo podemos entender que, no caso de um login shell, o bash carrega os arquivos na seguinte ordem:

  1. /etc/profile
  2. /home/$USER/.bash_profile
  3. /home/$USER/.bash_login
  4. /home/$USER/.profile

Portanto, você pode orientar o carregamento do arquivo .bashrc no /etc/profile, caso ele exista.

[sourcecode language="bash"]

if [ -r $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
[/sourcecode]

Você pode chamar o arquivo .bashrc a partir do aquivo .bash_profile inserindo o código abaixo no final do arquivo

[sourcecode language="bash"]

if [ -r .bashrc ]; then
source .bashrc
fi
[/sourcecode]

Ou se preferir mova o .bashrc para .bash_profile e assim suas configurações irão funcionar normalmente.

Abaixo um exemplo de .bash_profile para mac.

[sourcecode language="bash"]
export PATH="$PATH:/usr/local/sbin"
export PS1=’\n[\[\033[0;32m\]\h\[\033[0m\]@\[\033[0;37m\]\u\[\033[0m\]\033[0;32m\] \A\033[0m\] \D{%y\%m\%d} \033[0;32m\]\w\033[0m\]]\$ ‘

HISTTIMEFORMAT="%F %T "; export HISTTIMEFORMAT
HISTSIZE=1200; export HISTSIZE
HISTFILESIZE=1200; export HISTFILESIZE

EDITOR=/usr/bin/vim; export EDITOR
LESS=-eiMqFWXR; export LESS
PAGER=/usr/bin/less; export PAGER

alias mtr="mtr –curses"
alias flushdns="dscacheutil -flushcache"
[/sourcecode]

Vale mencionar que ao se deslogar, o arquivo .bash_logout é lido, você pode então personalizar este arquivo se desejar.

[s]
Guto