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.
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:
- \d – a data no formato “dia da semana mês data”
- \h – o seu hostname sem o grupo de trabalho
- \H – o seu hostname com o grupo de trabalho
- \n – nova linha
- \s – o nome do shell
- \t – a hora no formato (24 horas) HH:MM:SS
- \T – a hora no formato (12 horas) HH:MM:SS
- \@ – a hora no formato (12 horas) AM / PM
- \A – a hora no formato (24 horas) AM / PM
- \u – o usuário que está usando o shell
- \v – a versão do bash (ex. 4.4)
- \V – a versão + patch do bash (ex. 4.4.12)
- \w – o caminho completo do diretório atual, com $HOME abreviado com um ‘til’
- \W – apenas 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.
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"
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"
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.
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.