Comandos personalizados no Linux
Criação de comandos personalizados no Linux utilizando o arquivo .bashrc.
O Linux permite diversas modificações para auxiliar e simplificar o dia a dia do seu usuário. Uma forma de criar comandos customizados no Linux é por meio da modificação do arquivo .bashrc.
O .bashrc é um arquivo de script que é executado toda vez que um novo terminal é iniciado no Linux. Neste arquivo existem diversas configurações da sessão atual do terminal.
Além das configurações já existentes também é possível adicionar novos comandos, que variam de acordo com a necessidade do usuário. Alguns exemplos de comandos podem ser:
-
Apresentar o nome da branch do projeto GIT no terminal;
-
Comando para descompactar um arquivo;
-
Comandos para simplificar o uso do GIT;
Modificando o arquivo .bashrc
Para os comandos personalizados funcionarem eles devem ser adicionados no arquivo .bashrc. Esse arquivo está localizado na pasta: /home/<seu-username>/
Obs: Os comandos abaixo usam
~para apontar para sua pasta pessoal, independentemente do diretório atual. O.bashrcé carregado por sessões interativas do Bash, não por todos os terminais ou shells.
Existem diversas formas de alterar esse arquivo, uma das formas mais simples é utilizando o vscode. Para abrir o arquivo no vscode você pode utilizar o seguinte comando:
code ~/.bashrc
Após realizar as modificações no arquivo, para o terminal aberto entender as alterações você pode utilizar o seguinte comando:
Obs: Caso você feche o terminal e abra um novo, as modificações realizadas também serão identificadas. Entretanto, é interessante utilizar o comando source antes pois ele informará se existe algum problema no código inserido.
source ~/.bashrc
Outro detalhe importante é tomar cuidado para não modificar ou remover as linhas já existentes no .bashrc, apenas faça isso se você souber o que está fazendo.
Criação de abreviações (aliases)
O alias serve para evitar a repetição de um mesmo comando sempre que for necessário a sua utilização. Em vez de digitar todo o comando, é possível criar uma abreviação e então chamar o comando a partir da abreviação.
Por exemplo, o primeiro alias do bloco de código abaixo, é um alias para encontrar o IP do computador. Ou seja, toda vez que for digitado no terminal ip a resposta será o IP do computador. Além disso, a partir do comando xclip o IP é automaticamente copiado para a clipboard / área de transferência.
Obs: Quando uma linha inicia com hashtag (
#) significa que essa linha é um comentário.
# alias para mostrar o ip do computador
alias ip="echo $(hostname -I | awk '{print $1}') | xclip -sel clip && echo $(hostname -I | awk '{print $1}')"
# alias para aprimorar o comando já existente ls (listar os arquivos de uma pasta)
alias ls='ls -CF --color=auto'
alias la='ls -ACF --color=auto'
alias ll='ls -ACFl --color=auto'
# alias para docker-compose
alias dc='docker-compose'
# alias para utilizar por padrão o python e o pip na versão 3
alias python='python3'
alias pip='pip3'
GIT aliases
Exemplos de aliases para facilitar a utilização do GIT:
alias ga='git add'
alias gl='git pull'
alias gp='git push'
alias gs='git status'
alias gstash='git stash'
alias glog='git log'
Criação de constantes
O script permite a criação de constantes para simplificar a construção dos comandos, como apresentado no bloco de código abaixo, no qual foi construído constantes de cores para personalizar o retorno dos comandos.
Obs: Cada cor possui duas constantes, a diferença é que quando a constante está em letras maiúsculas significa que além da cor é aplicado negrito para o retorno.
# some colors
red="\[\033[0;31m\]"
RED="\[\033[1;31m\]"
green="\[\033[0;32m\]"
GREEN="\[\033[1;32m\]"
yellow="\[\033[0;33m\]"
YELLOW="\[\033[1;33m\]"
purple="\[\033[0;35m\]"
PURPLE="\[\033[1;35m\]"
white="\[\033[0;37m\]"
WHITE="\[\033[1;37m\]"
blue="\[\033[0;34m\]"
BLUE="\[\033[1;34m\]"
cyan="\[\033[0;36m\]"
CYAN="\[\033[1;36m\]"
NO_COLOR="\[\033[00m\]"
Criação de funções
As funções são semelhantes aos aliases e são chamadas no terminal da mesma forma, contudo são utilizadas para comandos mais complexos e permitem a passagem de parâmetros.
Iniciar uma aplicação Python
O bloco de código abaixo é um exemplo de função, nesta função primeiramente é limpado o terminal, em seguida é alterado o diretório atual para a pasta /python-flask-api-rest, é aberto o vscode com base no diretório atual e em seguida é iniciado a venv do python e iniciado aplicação em python.
start-api() {
clear
cd ~/projects/python-flask-api-rest/
code .
source venv/bin/activate && python app.py
}
Parar todos os containers em execução na máquina
docker-stop-all() {
docker stop $(docker ps -aq)
}
Baixar um arquivo a partir da URL
Essa função recebe dois parâmetros: o nome do arquivo para salvar e a URL para download.
download() {
wget -O ~/Downloads/$1 "$2"
}
Descompactar um arquivo
Essa função recebe um parâmetro: o nome do arquivo para descompactar (deve estar na pasta atual).
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
Remover branches que não possuem mais uso
Após atualizar as referências remotas, tenta remover as branches locais cujas branches remotas foram deletadas (status gone).
Obs: Essa função não afeta as branches remotas. A opção
-Dsó remove branches já integradas; branches com trabalho não integrado são preservadas e exigem revisão manual. Revise as branches listadas antes de executar a função.
git-clean() {
git fetch -p
for branch in $(git branch -vv | grep ': gone]' | awk '{print $1}'); do
git branch -D $branch
done
}
Nome da branch no terminal
Caso você trabalhe com GIT, uma ótima customização é apresentar o nome da branch atual no terminal.
Obs: O nome da branch somente aparecerá se você estiver dentro de um projeto GIT.
# show the branch name in the terminal
get-branch-name() {
branch=$(git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
# -n => the length of STRING is nonzero
if [[ -n "$branch" ]]; then
echo -e "\033[1;37m(\033[01;33m$branch\033[1;37m)"
fi
}
# custom terminal with new colors and branch name if exists
PS1="▫️ $PURPLE\u$CYAN\w\$(get-branch-name)\n$WHITE>$NO_COLOR "
Após inserir o código acima no arquivo .bashrc o resultado esperado é o seguinte:

Autor
Mathias Artur Schulz
Engenheiro de Software Sênior
Bacharel em Ciência da Computação e Pós-graduado em Engenharia de Software
Email:mathias@schulz.net.br