Aliases e funções no .bashrc

1. Introdução aos Aliases e Funções

O arquivo .bashrc é o coração da personalização do shell Bash. Nele, dois recursos se destacam para aumentar a produtividade: aliases e funções. Um alias é um atalho simples que substitui um comando longo por uma palavra curta. Por exemplo, em vez de digitar ls --color=auto -laF, você pode criar alias ll='ls --color=auto -laF'. Aliases são ideais para comandos que não exigem lógica condicional ou parâmetros complexos.

Já uma função é um bloco de código reutilizável que pode conter estruturas de controle, parâmetros e variáveis locais. Funções são mais poderosas que aliases porque aceitam argumentos de forma nativa e podem executar múltiplos comandos em sequência. A regra prática é: use alias para atalhos simples e função quando precisar de lógica, parâmetros ou múltiplas operações.

2. Criando e Gerenciando Aliases no .bashrc

A sintaxe básica de um alias é:

alias nome_do_alias='comando com argumentos'

Exemplos práticos para adicionar ao .bashrc:

alias ll='ls -laF --color=auto'
alias gs='git status'
alias ..='cd ..'
alias grep='grep --color=auto --exclude-dir=.git'

Para criar um alias temporário, basta digitá-lo diretamente no terminal:

alias temp='echo "Este alias só existe nesta sessão"'

Esse alias desaparece ao fechar o terminal. Para torná-lo permanente, edite o arquivo ~/.bashrc com seu editor favorito e adicione a linha. Após salvar, recarregue com source ~/.bashrc.

Para remover um alias, use o comando unalias:

unalias ll

Cuidado ao criar aliases com nomes de comandos do sistema (como ls ou grep). Isso pode causar confusão em scripts que dependem do comportamento padrão. Sempre verifique se o nome já existe com type nome_do_comando.

3. Funções no .bashrc: Estrutura e Parâmetros

A sintaxe de uma função no Bash pode ser escrita de duas formas:

# Forma 1 (mais comum)
nome_da_funcao() {
    comandos
}

# Forma 2 (com palavra-chave function)
function nome_da_funcao {
    comandos
}

Funções aceitam parâmetros posicionais automaticamente:

  • $1, $2, $3... — primeiro, segundo, terceiro argumento
  • $@ — todos os argumentos como lista
  • $# — número de argumentos
  • $0 — nome da função (ou do script)

Exemplo básico:

saudacao() {
    echo "Olá, $1! Hoje é $(date +%A)."
}

Para usar: saudacao Maria → "Olá, Maria! Hoje é quarta-feira."

O retorno de uma função pode ser feito de duas maneiras:

  • echo — para retornar texto (que pode ser capturado com $(...))
  • return — para retornar um código numérico (0 = sucesso, 1-255 = erro)

4. Exemplos Práticos de Funções Úteis

Função mkcd — criar diretório e entrar

mkcd() {
    if [ -z "$1" ]; then
        echo "Erro: informe o nome do diretório"
        return 1
    fi
    mkdir -p "$1" && cd "$1"
}

Função bak — backup rápido de arquivos

bak() {
    if [ -z "$1" ]; then
        echo "Uso: bak arquivo"
        return 1
    fi
    cp "$1" "${1}.bak" && echo "Backup criado: ${1}.bak"
}

Função extract — extrair qualquer arquivo compactado

extract() {
    if [ -f "$1" ]; then
        case "$1" in
            *.tar.bz2) tar xjf "$1" ;;
            *.tar.gz)  tar xzf "$1" ;;
            *.bz2)     bunzip2 "$1" ;;
            *.rar)     unrar x "$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 "'$1' não pôde ser extraído" ;;
        esac
    else
        echo "'$1' não é um arquivo válido"
    fi
}

5. Boas Práticas ao Editar o .bashrc

Organize seu .bashrc em seções claras:

# ============================================
# VARIÁVEIS DE AMBIENTE
# ============================================
export EDITOR=vim
export PATH="$HOME/bin:$PATH"

# ============================================
# ALIASES
# ============================================
alias ll='ls -laF --color=auto'
alias ..='cd ..'

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

Sempre comente cada alias e função explicando sua finalidade. Isso ajuda na manutenção futura.

Para recarregar o .bashrc sem reiniciar o terminal:

source ~/.bashrc
# ou
. ~/.bashrc

6. Aliases e Funções com Subshells e Ambiente

Um alias é executado no shell atual, substituindo o texto antes da execução. Já uma função pode ser executada em um subshell usando parênteses ( ), isolando alterações de diretório ou variáveis:

# Função que não altera o diretório atual
segura_cd() {
    (cd "$1" && pwd && ls)
    # O cd ocorre apenas dentro do subshell
}

Para exportar uma função para subshells (útil em scripts ou comandos encadeados):

export -f nome_da_funcao

Isso permite que a função seja usada em comandos como find -exec ou dentro de bash -c.

7. Tratamento de Erros em Funções

Funções robustas devem verificar parâmetros obrigatórios:

exige_parametro() {
    if [ -z "$1" ]; then
        echo "Erro: parâmetro obrigatório ausente" >&2
        return 1
    fi
    echo "Parâmetro recebido: $1"
}

Para aumentar a rigidez dentro de funções:

funcao_segura() {
    set -e  # Sai se qualquer comando falhar
    set -u  # Trata variáveis não definidas como erro
    local arquivo="$1"
    cp "$arquivo" /destino/
    echo "Cópia concluída"
}

Mensagens de erro devem ser enviadas para stderr com >&2 e o código de saída apropriado (return 1 ou exit 1).

8. Dicas Avançadas e Manutenção

Aliases não aceitam argumentos de forma nativa. Se você tentar:

alias find_text='grep -r "$1" .'  # Isso não funciona como esperado

A solução é usar uma função:

find_text() {
    grep -r "$1" .
}

Para carregamento condicional baseado no sistema operacional:

case "$(uname -s)" in
    Linux)
        alias open='xdg-open'
        ;;
    Darwin)
        alias ls='ls -G'
        ;;
esac

Versionamento do .bashrc com Git é uma excelente prática:

cd ~
git init
git add .bashrc
git commit -m "Versão inicial do .bashrc"

Assim você pode sincronizar configurações entre máquinas e manter histórico de alterações.

Referências