Como personalizar o Bash Linux

personalizar bash no linux

Que tal aprender como personalizar o Bash do Linux, deixando ao seu estilo e criando uma personalização ao seu gosto? Bash é o shell do Projeto GNU. Bash é o Bourne Again SHell. O Bash é um shell compatível com sh que incorpora recursos úteis do shell Korn (ksh) e do shell C (csh). Pretende-se que esteja em conformidade com a norma IEEE POSIX P1003.2 / ISO 9945.2 Shell and Tools. Oferece melhorias funcionais sobre sh para programação e uso interativo. Além disso, a maioria dos scripts sh pode ser executada pelo Bash sem modificação. O Bash é um interpretador de comandos, um entre os diversos tradutores entre o usuário e o sistema operacional conhecidos como shell.

Documentação oficial do Bash Linux

Para mais detalhes sobre o Bash e sua documentação, visite a página do projeto e do manual clicando nos botões abaixo.

Para quem deseja se aventurar, visite o Canivete Suíço do Shell (Bash) clicando no botão abaixo.

Identificando o arquivo de configuração do Bash

Na maioria das distribuições GNU/Linux o Bash já vem por padrão, logo, caso sua distribuição não tenha o Bash, você pode instalá-lo sem problema. Nesse tutorial veremos a personalização no sistema Debian.

Na imagem abaixo, vemos como está o Bash padrão após a instalação do sistema Debian.

Bash - padrão
Bash – padrão

Vemos que a linha padrão a espera da execução do comando tem a sintaxe usuário@host_máquina diretório_atual

Para que possamos personalizar o Bash, devemos editar o arquivo de configuração “.bashrc” que está localizado no diretório do usuário.

O arquivo .bashrc é oculto, lembrando que todo arquivo/diretório com o ponto ( . ) na frente é referenciado como oculto, assim com as teclas Ctrl+h é mostrado/ocultado os arquivos/diretórios ocultos.

Após mostrar os arquivos ocultos, ao localizar e abrir o arquivo .bashrc, vemos seu conteúdo abaixo:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'
    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Opções para personalizar o Bash Linux

Com o comando man bash você encontrará toda referência para utilizar e configurar o Bash, logo, vejamos abaixo alguns parâmetros para colocar em seu .bashrc:

  • \da data no formato “dia da semana mês data”
  • \h o seu hostname sem o grupo de trabalho
  • \Ho seu hostname com o grupo de trabalho
  • \nnova linha
  • \so nome do shell
  • \ta hora no formato (24 horas) HH:MM:SS
  • \Ta hora no formato (12 horas) HH:MM:SS
  • \@a hora no formato (12 horas) AM / PM
  • \Aa hora no formato (24 horas) AM / PM
  • \uo usuário que está usando o shell
  • \va versão do bash (ex. 4.4)
  • \Va versão + patch do bash (ex. 4.4.12)
  • \wo caminho completo do diretório atual, com $HOME abreviado com um ‘til’
  • \Wapenas o nome do diretório atual, com $HOME abreviado com um ‘til’
  • \$o simbolo # (caso root) ou $ (outros usuários)
  • \\uma barra invertida

Podemos também editar a cor da fonte, o atributo da fonte (negrito por exemplo) e a cor de fundo da fonte.

A sintaxe

'\e[COR_DE_FUNDO;ATRIBUTO_DA_FONTE;COR_DA_FONTEm \e[m'

Vejamos as opções que temos para editar.

Atributo da fonte

00 - Reset (Nenhum) 
01 - Negrito 
04 - Sublinhado 
05 - Piscante 
07 - Reverso 
08 - Oculto

Cor da fonte

30 - Preto
31 - Vermelho
32 - Verde
33 - Amarelo
34 - Azul
35 - Magenta (Rosa)
36 - Ciano (Azul Claro)
37 - Branco

Cor de fundo

40 - Preto
41 - Vermelho
42 - Verde
43 - Amarelo
44 - Azul
45 - Magenta (Rosa)
46 - Ciano (Azul Claro)
47 - Branco

Exemplo de uma linha da variável PS1 editada.

PS1='\e[41;01;32m\u \e[01;37m\h \e[01;33m\d \e[01;33m\W \$ \e[m'

Na linha acima temos como parâmetro a cor de fundo da linha como vermelho, o usuário com a cor verde, o host com a cor branca, a data, o diretório atual (home) e o símbolo do usuário logado com a cor amarela.

Bash - exemplo
Bash – exemplo

Configurar o Bash

Agora que já sabemos os parâmetros que podemos usar para personalizar o Bash, devemos encontrar a linha da variável PS1 referente ao shell, que no nosso caso no arquivo .bashrc acima fica na linha de número 69 que está destacado em negrito. Para não perdermos a configuração atual, vamos comentar essa linha da variável PS1 e acrescentar outra com a devida personalização ao estilo do usuário. Em nossa personalização, vamos comentar a linha abaixo colocando o carácter especial # na frente da linha.

#PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Bash - editando
Bash – editando

Abaixo da linha comentada, acrescentamos nossa linha personalizada, ficando a vocês personalizar de melhor forma possível ao seu estilo. No nosso caso, vamos deixar como a linha abaixo.

PS1="\e[01;31m??[\e[01;36m\u\e[01;31m]?\e[01;31m[\e[01;37m\h\e[01;31m]?
\e[01;31m[\e[01;35m\d\e[01;31m]?\e[01;31m[\e[01;32m\t\e[01;31m]?
\e[01;31m[\e[01;33m\w\e[01;31m]:\e[01;31m\n\e[01;31m???\e[01;36m >>>
\e[01;31m\$ \e[00m"
Bash - editado
Bash – editado
Bash - editado
Bash – editado

Após a personalização, localize o trecho do arquivo .bashrc e descomente (entre as linhas 80 e 85) retirando o carácter especial # da frente das linhas, ficando como o trecho abaixo.

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

Assim, quando logar como root, o símbolo de usuário $ mudará para o root #. Para deixar o Bash do root da mesma forma como personalizado para o usuário comum, vamos acrescentar o conteúdo abaixo no final da linha do arquivo /root/.bashrc.

######## ACRESCENTADO PARA PERSONALIZAÇÃO DO BASH DO ROOT ########

# If not running interactively, don't do anything
case $- in
    *i*) ;;
    *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    #PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    PS1='\e[01;31m??[\e[01;36m\u\e[01;31m]?\e[01;31m[\e[01;37m\h\e[01;31m]?\e[01;31m[\e[01;35m\d\e[01;31m]?\e[01;31m[\e[01;32m\t\e[01;31m]?\e[01;31m[\e[01;33m\w\e[01;31m]:\e[01;31m\n\e[01;31m???\e[01;36m >>> \e[01;31m\$ \e[00m'
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Pronto, Bash do root também personalizado.

Bash - root
Bash – root

Nesse tutorial mostramos como personalizar o Bash. Esperamos que o ajude a personalizar o Bash de forma eficaz. Ficamos por aqui e até o nosso próximo tutorial.