2011-04-22

Perfil bash no OS X

GNU Um amigo meu sugeriu que eu escrevesse um artigo sobre como organizo meu perfil bash no Mac OS X. Eis aqui!

No OS X, assim como em qualquer sistema Unix-like, o bash lê o perfil basicamente de dois arquivos: /etc/profile e ~/.bash_profile (em muitos sistemas o /etc/profile carrega todos os scripts executáveis em /etc/profile.d/).

Só que deixar todas as configurações em um único arquivo pode torná-lo confuso. Para resolver esse problema, fiz o seguinte: criei um diretório ~/bin/profile e coloquei um código no ~/.bash_profile que carrega todos os scripts executáveis desse diretório.

O trecho de código é o seguinte:

for script in $HOME/bin/profile/*.sh
do
if [[ -x "$script" ]]
then
. "$script"
fi
done


Exemplo


Como exemplo, um de meus arquivos é o que ajusta as cores do terminal.

No OS X, o LSCOLORS é uma string de onze pares de caracteres. O primeiro carácter do par é a cor de frente (foreground) e o segundo a cor de fundo (background).

Os onze pares são em ordem:
  1. cores para diretório
  2. cores para ligação simbólica (symlink)
  3. cores para soquete
  4. cores para pipe
  5. cores para arquivo executável
  6. cores para arquivo especial de bloco
  7. cores para arquivo especial de carácter
  8. cores para executável com o bit setuid ajustado
  9. cores para executável com o bit setgid ajustado
  10. diretório gravável por outros, com stick bit ajustado
  11. diretório gravável por outros, sem stick bit ajustado


Os caracteres usados para ajustas as cores de cada parte (frente e fundo) de cada par são:
  • x o valor pré-definido
  • a preto
  • b vermelho
  • c verde
  • d marrom
  • e azul
  • f magenta
  • g ciano
  • h cinza


As mesmas letras em maiúsculas significam negrito.

Por exemplo, meu LSCOLORS é assim:
LSCOLORS=ExGxFxFxCxegedabagacad


Traduzindo:
  • Diretório Ex: frente azul em negrito, fundo padrão
  • Ligação simbólica Gx: frente ciano em negrito, fundo padrão
  • Soquete Fx: frente magenta em negrito, fundo padrão
  • Pipe Fx: idem ao anterior
  • Executável Cx: frente verde em negrito, fundo padrão
  • Especial de bloco eg: frente azul, fundo ciano
  • Especial de carácter ed frente azul, fundo marrom
  • Executável com setuid ab: frente preta, fundo vermelho
  • Executável com setgid ag: frente preta, fundo ciano
  • Diretório gravável por outros com stick bit ac: frente preta, fundo verde
  • Diretório gravável por outros sem stick bit ad: frente preta, fundo marrom


Mas é preciso ajustar também a variável de ambiente CLICOLOR e exportar tudo.

No final fica assim:
#-----------#
# LS colors #
#-----------#

LSCOLORS=ExGxFxFxCxegedabagacad
CLICOLOR=1
export CLICOLOR LSCOLORS

alias l='ls -lh -G'


Fazendo funcionar


Para fazer funcionar, o arquivo precisa ser executável. Meu arquivo de cores chama ~/bin/profile/colors.sh, portanto:
bash$ chmod +x ~/bin/profile/colors.sh


Outro exemplo


Outro exemplo é o arquivo que torna o Vim o editor padrão:
#-----#
# Vim #
#-----#

if [[ -z "$DISPLAY" ]]
then
EDITOR='/Applications/MacVim.app/Contents/MacOS/Vim'
else
EDITOR='/Applications/MacVim.app/Contents/MacOS/Vim -g --nofork'
fi
export EDITOR


Veja que a graça da brincadeira é a modularização, que deixa configurações de coisas diferentes em arquivos diferentes e configurações da mesma coisa encapsuladas.

**
Fica então mais esta dica!

[]’s
Cacilhας, La Batalema