Aliases e funções no Bash que todo dev deveria ter

1. Fundamentos: Por que aliases e funções são essenciais para devs

1.1. Redução de digitação repetitiva e prevenção de erros

Todo desenvolvedor que passa horas no terminal sabe o quanto comandos repetitivos consomem tempo e aumentam a chance de erros de digitação. Aliases e funções no Bash resolvem esse problema ao transformar sequências longas de comandos em atalhos de poucos caracteres. Um git log --oneline --graph --decorate --all vira simplesmente glg. Além de agilizar o trabalho, você reduz drasticamente erros como esquecer flags importantes.

1.2. Diferença entre alias simples e funções complexas no Bash

Aliases são ideais para substituições diretas de comandos com parâmetros fixos. Já funções permitem lógica condicional, loops, parâmetros posicionais e processamento mais elaborado. A regra prática: se você precisa de argumentos variáveis ou múltiplos comandos encadeados, use função. Caso contrário, um alias resolve.

# Alias simples - substituição direta
alias ll='ls -lahF'

# Função - aceita argumentos e executa lógica
mkcd() {
    mkdir -p "$1" && cd "$1"
}

1.3. Onde armazenar: .bashrc, .bash_aliases e boas práticas de organização

O arquivo ~/.bashrc é carregado em todo shell interativo. Para manter a organização, crie um arquivo separado ~/.bash_aliases e inclua no .bashrc:

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

Isso mantém seus atalhos isolados e fáceis de versionar com Git.

2. Aliases indispensáveis para navegação e manipulação de arquivos

2.1. ll, la, lt e variações personalizadas do ls

alias ll='ls -lahF'
alias la='ls -A'
alias lt='ls -ltrh'  # ordenado por data, mais recentes no final
alias ldot='ls -ld .*'  # apenas arquivos ocultos

2.2. Atalhos para cd com histórico (.., ..., back)

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias back='cd "$OLDPWD"'  # volta ao diretório anterior

2.3. Comandos protegidos: cp -i, mv -i, rm -i e rm -rf com confirmação

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

# Para rm -rf com prompt de segurança
alias rmrf='rm -rfv'
alias rmsafe='rm -rfv --interactive=once'

3. Aliases e funções para versionamento com Git

3.1. Atalhos para git status, git log e git diff com formatação visual

alias gs='git status -sb'
alias gl='git log --oneline --graph --decorate --all'
alias gd='git diff --color-words'
alias gds='git diff --staged'
alias gtree='git log --graph --oneline --all --pretty=format:"%C(yellow)%h%C(cyan)%d%Creset %s %C(green)(%cr)%Creset"'

3.2. Função para criar branch com push automático e checkout rápido

gcb() {
    if [ -z "$1" ]; then
        echo "Uso: gcb nome-da-branch"
        return 1
    fi
    git checkout -b "$1" && git push -u origin "$1"
}

3.3. Alias para git add --all + git commit -m em um só comando

gacm() {
    if [ -z "$1" ]; then
        echo "Uso: gacm \"mensagem do commit\""
        return 1
    fi
    git add --all && git commit -m "$1"
}

4. Funções para gerenciamento de processos e busca

4.1. find e grep com cores, recursão e exclusão de diretórios

alias grep='grep --color=auto'
alias grepr='grep -r --color=auto --exclude-dir={.git,node_modules,vendor}'

# Busca recursiva ignorando binários
alias grept='grep -rI --color=auto'

4.2. Função psgrep para localizar e matar processos pelo nome

psgrep() {
    if [ -z "$1" ]; then
        echo "Uso: psgrep nome-do-processo"
        return 1
    fi
    ps aux | grep -i "$1" | grep -v grep
}

pskill() {
    if [ -z "$1" ]; then
        echo "Uso: pskill nome-do-processo"
        return 1
    fi
    ps aux | grep -i "$1" | grep -v grep | awk '{print $2}' | xargs -r kill -9
}

4.3. Alias para monitoramento rápido: htop, top e df -h com parâmetros frequentes

alias mem='free -h'
alias disk='df -h --total | grep -v tmpfs'
alias ports='ss -tulanp'
alias myip='curl -s ifconfig.me'

5. Funções avançadas para automação de tarefas do dia a dia

5.1. Função para criar diretórios e entrar neles em um passo (mkcd)

mkcd() {
    if [ -z "$1" ]; then
        echo "Uso: mkcd nome-do-diretorio"
        return 1
    fi
    mkdir -p "$1" && cd "$1"
}

5.2. Extração de arquivos compactados com detecção automática de formato (extract)

extract() {
    if [ -f "$1" ]; then
        case "$1" in
            *.tar.bz2)   tar xjf "$1"     ;;
            *.tar.gz)    tar xzf "$1"     ;;
            *.bz2)       bunzip2 "$1"     ;;
            *.rar)       unrar e "$1"     ;;
            *.gz)        gunzip "$1"      ;;
            *.tar)       tar xf "$1"      ;;
            *.tbz2)      tar xjf "$1"     ;;
            *.tgz)       tar xzf "$1"     ;;
            *.zip)       unzip "$1"       ;;
            *.Z)         uncompress "$1"  ;;
            *.7z)        7z x "$1"        ;;
            *)           echo "Formato nao reconhecido: $1" ;;
        esac
    else
        echo "Arquivo nao encontrado: $1"
    fi
}

5.3. Função para backup rápido de arquivos com timestamp (bak)

bak() {
    if [ -z "$1" ]; then
        echo "Uso: bak arquivo"
        return 1
    fi
    cp -r "$1" "${1}.bak.$(date +%Y%m%d_%H%M%S)"
}

6. Segurança, logs e debugging de aliases e funções

6.1. Como evitar conflitos com comandos nativos (uso de unalias e command)

Para desabilitar temporariamente um alias e usar o comando original:

# Desabilita alias temporariamente
\ls
command ls
/bin/ls

# Remove alias permanentemente no shell atual
unalias ll

6.2. Testando aliases em subshell e depurando com set -x e type

# Verifica o que um alias expande
type ll
type mkcd

# Depura execução de função
set -x
mkcd /tmp/teste
set +x

# Testa em subshell sem modificar o shell atual
bash -c 'source ~/.bash_aliases; ll'

6.3. Carregamento condicional: aliases específicos por host ou projeto

# Aliases específicos para servidor de produção
if [[ "$HOSTNAME" == "prod-server" ]]; then
    alias deploy='cap production deploy'
    alias logs='tail -f /var/log/app/production.log'
fi

# Aliases específicos para projetos com Docker
if [ -f "docker-compose.yml" ]; then
    alias dc='docker-compose'
    alias dcu='docker-compose up -d'
fi

7. Bônus: Como criar seu próprio arsenal personalizado

7.1. Estrutura de arquivo .bash_aliases modular e comentado

# ==========================================
# NAVEGAÇÃO
# ==========================================
alias ..='cd ..'
alias ...='cd ../..'

# ==========================================
# LISTAGEM DE ARQUIVOS
# ==========================================
alias ll='ls -lahF'
alias la='ls -A'

# ==========================================
# GIT
# ==========================================
alias gs='git status -sb'
alias gl='git log --oneline --graph --all'

# ==========================================
# FUNÇÕES
# ==========================================
mkcd() { mkdir -p "$1" && cd "$1"; }
extract() { ... }

7.2. Versionamento dos aliases com Git e sincronização entre máquinas

cd ~
git init
git add .bash_aliases .bashrc
git commit -m "Inicializando dotfiles"

# Em outra máquina
git clone https://github.com/seuuser/dotfiles.git ~/dotfiles
ln -s ~/dotfiles/.bash_aliases ~/.bash_aliases

7.3. Checklist de aliases essenciais para começar hoje mesmo

  • [ ] ll, la, lt para listagem
  • [ ] .., ..., back para navegação
  • [ ] cp -i, mv -i, rm -i para proteção
  • [ ] gs, gl, gd para Git
  • [ ] mkcd para criar e entrar em diretórios
  • [ ] extract para descompactar qualquer formato
  • [ ] bak para backup rápido com timestamp
  • [ ] psgrep e pskill para gerenciar processos
  • [ ] gacm para add + commit em um comando

Referências