Menu Chiudi

Comodamente shell: la Bash completion

di felipe

Per la serie “Rendere operativa una Ubuntu secondo felipe“, volevo da tempo scrivere di questa fantastica caratteristica della Bash che si chiama “programmable bash completion” (da adesso in poi: BC) o “autocompletamento programmabile della bash” :-)

Sono d’accordo: in italiano suona un po’ una merda, ma adesso vi spiego cosa è, come si attiva e come non potrete più farne a meno.

Cos’è?

Avete presente il tasto TAB? Ok, avete imparato che ogni pinguino che si rispetti deve consumarlo più del tasto Invio …e adesso date TAB anche quando scrivete il vostro nome, vero? (a me succede -.-) Allora perfetto: siete candidati alla dipendenza da BC.

La BC non è altro che l’elevazione all’ennesima potenza del completamento via TAB ed è una caratteristica relativamente recente (chi ricorda di quando in Debian si doveva installare a parte il pacchetto bash-completion?). E’ ispirata al superbo autocompletamento di Zsh, altra shell spettacolare. Beh vi faccio un caso specifico: io posso scrivere

rmm[TAB]

per averlo completato in

rmmod

Ok, fin qui era l’autocompletamento integrato della Bash, tutto vecchio. Ma che succede se continuo a dare [TAB] [TAB] …? Succede che la system bell mi dice “ma insomma che vuoooi?” perché ovviamente non c’è più niente da completare.

E se invece quei [TAB] dati dopo rmmod mi dessero la lista dei soli moduli attualmente caricati? :-) Di più… se volessi dare rmmod su un modulo di alsa che però non ricordo esattamente come si scrive? :-) Ecco come appare quella situazione nella mia box, con la BC attiva:

rmmod.png

Interessante no? Ovviamente i moduli che iniziano per “snd” installati col kernel sul mio sistema sono mooolti di più, ma la BC mi fa vedere solo quelli attualmente caricati, e quindi passibili di essere rimossi.

Come si attiva?

Semplice, se avete Debian o derivate (es: Ubuntu) dovrebbe essere automaticamente installata assieme alla vostra copia di Bash, quindi già pronta ad essere attivata. Basta modificare il file /etc/bash.bashrc e decommentare queste righe:

# enable bash completion in interactive shells
#if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
#fi

Ossia eliminare i “#” davanti alle ultime tre. Altre distro usano sicuramente altri metodi. Riavviare il PC.

Imparare a dipendere fisicamente dalla BC

Qui sta a voi :D Posso solo suggerirvi qualche trucchetto: provate ad usare la BC in tutti i comandi di APT, SSH, CVS, SVN… Provate a dare qualcosa tipo:

tar [TAB] [TAB]

vi saranno mostrati i possibili parametri (i “famosi” A c d r t u x), oppure date:

apt-get i[TAB] linu[TAB]f[TAB]

…vi concedo un paio di giorni per cadere nel baratro della dipendenza!

21 commenti

  1. Pingback:Rendere operativa una Ubuntu secondo felipe « pollycoke :)

  2. Treviño

    Mh, anche io la uso da tempo, ma ci sono alcune cose che non mi piaccono troppo… Tipo la completation per (g)mplayer mi fa permette di “vedere” automaticamente solo alcune estensioni…
    Ottima è invece anche per cose come sudo, fakeroot (estendibile anche gtksu, kdesu e company editando /etc/bash_completion.

    Spettacolare è anche la personalizzazione (fattibile da /etc/bash_completion.d/) della maggior parte dei comandi debian (da dpkg, ad apt…!)

  3. felipe

    @Treviño:
    già, concordo sulla limitazione con l’esempio di mplayer, anche se generalmente per guardare un filmato ci clicco col mouse :>

  4. maus

    in effetti quello della bash completion e’ una vera e propria dipendenza. altri comandi giornalieri che sono ‘affetti’ da questo sintomo sono mount (guardando nell’/etc/fstab) ssh (guarda nel ~/.ssh/known_hosts), scp (se avete la chiave autorizzata nell’~/.ssh/authorized_keys completa i path remoti!), o anche solo cd che mostra solamente le dir disponibile, man, make, iptables… si potrebbe andare avanti parecchio. la cosa che non mi piace e’ la lentezza di alcuni di questi! gli script caricati sono onerosi e ciucciano troppo!

  5. antelope

    Ma è proprio necessario il reboot? Su un server Debian sarge non mi funziona e non posso fare il reboot al momento…

  6. felipe

    @antelope:
    per niente, basta avviare una shell o caricare /etc/bash_completion. ma il riavvio era per non dover spiegare come caricare quel file :D

    in ogni caso:

    $: source /etc/bash_completion

    e hai tutta la PUTENZA già disponibile

  7. antelope

    felipe: senza le righe in .bashrc, non basta avviare una shell (almeno da me..). Invece OK con il source /etc/bash_completion.

    NB: /etc/init.d/sys[TAB][TAB][TAB]

    ..eccetera eccetera :-)

  8. Pingback:A geek’s diary » Blog Archive » Bash completion

  9. Anonimo

    Oh, finalmente. Non avevo approfondito la cosa e mi dava noia che per il man dovessi pure indicargli l’intero comando ;)
    A volte basta così poco… grazie

  10. filippo

    l’ultima volta che ho provato la bash completion era parecchio lenta (cosa che per una shell non è certo l’ideale).. mentre sono rimasto piacevolmente soddisfatto dalla completion di tcsh, veloce (molto più di bash), essenziale (molto più di zsh), semplice da configurare..
    si può prendere i parametri che compaiono alla pressione di tab dall’output di qualunque comando..
    per esempio:
    complete kill ‘p/*/`ps | awk \{print\ \$1\} | grep \[0-9\]`/’
    completa kill con il pid dei processi attivi preso da ps.. lascio a voi le possibili idee per personalizzarla..
    provatela!

  11. pierissimo

    ho apportato le modifiche…ma quando apro il terminale mi spunta(dentro il terminale)

    bash: enable: bash: not a shell builtin
    bash: enable: completion: not a shell builtin
    bash: enable: in: not a shell builtin
    bash: enable: interactive: not a shell builtin
    bash: enable: shells: not a shell builtin

    xkè?

  12. lorentz

    assolutamente fantastico! è per queste cose che impegno ore ed ore su linux… e non mi pesano per nulla ;)

  13. Pingback:bash completion, completamento automatico in bash « dam’s blog

  14. duccio

    per favore ragazzi non flippate, si puo’ fare tutto senza shell, con poci colpetti di mouse, non vi perdete, pleaSE, e non complicate la v ita agli altri inutilmente….keep a low profile, please..!!

Rispondi

Scopri di più da pollycoke :)

Abbonati ora per continuare a leggere e avere accesso all'archivio completo.

Continue reading

Vai alla barra degli strumenti