Dando uma turbinada no bash

Publicado por Sidnei Serra em 17/04/2026

[ Hits: 55 ]

Blog: https://www.youtube.com/@alquimistaTI

 


Dando uma turbinada no bash



Nessa dica eu mostro como dar uma configurada mais avançada no bash e no zsh mas tem usuários que podem ter alguns problemas com o zsh (eu mesmo já tive), então resolvi fazer essa dica para implementar funções mais avançadas aos moldes que vemos no zsh.

Parte da dica citada acima vai servir de base, então vale uma lida lá antes de tentar essa aqui. Primeiro comece instalado os pacotes:

sudo apt install zoxide zfz bash-completion

Após isso, faça backup do seu ~/.bashrc:

cp ~/.bashrc ~/.bashrc-bkp

Agora abra o seu ~/.bashrc atual, apague o conteúdo e coloque esse aqui (depois de editado, dê um source ~./bashrc):

# ~/.bashrc

# =========================
# INTERATIVO
# =========================
case $- in
    *i*) ;;
      *) return;;
esac

# =========================
# HISTÓRICO
# =========================
HISTCONTROL=ignoreboth
HISTSIZE=10000
HISTFILESIZE=20000
shopt -s histappend
shopt -s checkwinsize

# =========================
# PROMPT
# =========================
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

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

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
esac

# =========================
# CORES LS
# =========================
if [ -x /usr/bin/dircolors ]; then
    eval "$(dircolors -b)"
    alias ls='ls --color=auto'
fi

# =========================
# ALIASES EXTERNOS
# =========================
[ -f ~/.bash_aliases ] && . ~/.bash_aliases

# =========================
# ZOXIDE
# =========================
eval "$(zoxide init bash)"

# =========================
# FZF
# =========================
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border --info=inline"

[ -f /usr/share/doc/fzf/examples/key-bindings.bash ] && \
  source /usr/share/doc/fzf/examples/key-bindings.bash

zi() {
  local dir
  dir=$(zoxide query -l | fzf --height 40% --layout=reverse --border --preview 'ls -la {}') && cd "$dir"
}

# =========================
# FZF - HISTÓRICO EXATO
# =========================
fzf-history-widget-exact() {
  local selected
  selected=$(history | tac | sed 's/^[ ]*[0-9]*[ ]*//' | \
    FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --exact" fzf)

  if [ -n "$selected" ]; then
    READLINE_LINE="$selected"
    READLINE_POINT=${#READLINE_LINE}
  fi
}

# escolha o atalho (recomendado Alt+F)
bind -x '"\ef": fzf-history-widget-exact'

Não esqueça que o zoxide precisa "aprender" o seu histórico caso você tenha instalado o recurso agora:

cat ~/.bash_history \
| sed 's/^: [0-9]*:[0-9]*;//' \
| grep -E '^cd ' \
| sed 's/^cd //' \
| while read -r dir; do
    dir="${dir/#\~/$HOME}"
    [ -d "$dir" ] && zoxide add "$dir"
done

O funcionamento é o mesmo mostrado na dica citada acima. Lembrando que o zoxide é um "cd melhorado com busca" onde você digita parte da pasta que você já entrou e ele mostra uma lista; se a pasta for completa, já entra direto desde que já tenha sido acessada anteriormente. Se digitar só "zi" sem as aspas você cai direto na pesquisa e conforme vai digitando as opções vão diminuindo conforme ficar mais completo o nome de onde você quer ir.

Agora o fzf é um "procurador de histórico" e procura por tudo que você já tenha digitado em termos de comando. No terminal, apertando CTRL+R você vai para uma listagem onde conforme vai digitando a listagem vai diminuindo; chegando onde quer, enter.

Linux: Dando uma turbinada no bash
Dá até pra combinar palavras:

Linux: Dando uma turbinada no bash
Agora uma espécie de suggestions, onde você digita parte de um comando inicial e usando as teclas de setas pra cima e pra baixo mostra as opções complementares de comandos já efetuados. Por exemplo, se você digitar sem as aspas "sudo apt-mark" e usar as setas de direção TODAS as entradas de comandos já digitadas e presentes no histórico (~/.bash_history) que tenham a opção de início "sudo apt-mark" aparecerão conforme o uso das setas. Crie o arquivo ~./inputrc:

nano ~/.inputrc

Coloque dentro:

$include /etc/inputrc

# command history search
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

# extended auto-completation with tab
set show-all-if-ambiguous on
set completion-ignore-case on

# colors
set colored-completion-prefix on
set colored-stats on

# misc
set blink-matching-paren on
set mark-symlinked-directories on

Salve e feche o arquivo, reinicie a sessão e pronto. Esse recurso não "antecipa" o comando mas é melhor do que ficar procurando com as teclas de setas; e ainda temos o fzf e zoxide que fornece indiretamente essa opção.

O ~/.inputrc é interessante ter pois ele dá cores ao uso do TAB para complementar o comando e para deixar tudo mais completo, no seu ~/.bashrc coloque isso aqui DEPOIS do esac do Interativo:

# enable bash completion in interactive shells
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

Vai ficar assim:

Linux: Dando uma turbinada no bash
Complementando: o CTRL+R pode encontrar mais do que deveria, "pulverizando" as palavras mais curtas com o conteúdo de outras opções encontradas. Por exemplo, mandando procurar por "sudo apt" ele pode expandir a procura para outras coisas que tenham su, do e até mesmo as letras da procura inicial. Para uma procura "de gente grande", use o ALT+F, aí sim é procura exata.

Terminal bash quase "profissa"...

Outras dicas deste autor

Solução rápida para o problema do Network Manager conectar mas não navegar

Reescalando a tela hd para fullhd com o xrandr

Usando o Dolphin para checar hashes de arquivos

Consertando o áudio com estalos e interrupções no Pipewire

Ativando o modo Quake no XFCE4-Terminal

Leitura recomendada

Aumentar limite de tamanho do anexo no ZIMBRA MAIL

Usando Pendrive como RAM no Linux Mint

Alternativas ao GNOME Shell no Fedora 19

Gforce e framebuffer no modo texto sem problemas

[Resolvido] Running inside an X server requires Xephyr to be installed but it cannot be found

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts