Come reindirizzare l'elenco dei comandi visualizzati da "tab complete"?


12

Quando utilizzo i comandi in bash, mi piace l'opzione doppia scheda per visualizzare i comandi disponibili. Alcuni comandi hanno più corrispondenze possibili di altri:

Schermata del completamento di una scheda http://img13.imageshack.us/img13/5541/picturemhy.jpg

C'è un modo in cui posso convogliare l'output della doppia scheda in un punto qualsiasi, come grep? Ho trovato un post correlato , ma non sono ancora sicuro di come implementarlo per convogliarlo in grep.


Come immagini esattamente di entrare nella grepregex? (y or n or g[rep])? Odio sembrare pessimista, ma dubito che ciò possa essere fatto senza aggiungerlo al codice bash.
Kevin,

Risposte:


21

Per i comandi utilizzare compgen -c:

$ compgen -c bas
basename
base64
bashbug
bash
basename
base64
bashbug

Questo output è possibile semplicemente passare attraverso grep.


+1 Per il comando ... La prossima parte interessante potrebbe essere come creare una scorciatoia da tastiera per questo.
rozcietrzewiacz,

3

Sulla base della risposta di @ salutis ho creato uno script che ho chiamato compe memorizzato in ~/bin/compquelle ricerche commands", aliasese builtins, (flag di opzione -cabvedere la voce man bash ), con un secondo parametro opzionale che, se presente, indirizza l'output grepe cerca il secondo parametro.

Usage: comp string [keyword-for-grep]

Codice:

#!/bin/bash

if [ -z "$1" ]; then
    echo usage: comp string [keyword-for-grep]
    echo 
    exit
fi

if [ -z "$2" ]; then
    compgen -cab -- $1
    exit
fi

compgen -cab -- $1 | grep -i $2

Personalmente sarei anche interessato a trovare un modo per rimuovere l'ultimo comando dalla cronologia della shell nello script (qualcosa a cui si riferisce history -d) in modo che durante la ricerca nella bashcronologia non trovo compvoci. So di poterlo fare anche con HISTIGNORELinux, ma Linux è piuttosto potente, quindi ci deve essere un modo per farlo anche dal file di script - giusto?


1
Ovviamente puoi adattarlo alle tue esigenze, ma dovrebbe iniziare.
segna il

-3

Perché non trovi quello che stai cercando?

Esempio:

find / -name ec2* -executable -type f -perm -og+rx -print

Conoscendo il tuo caso d'uso posso creare un esempio di comando più dettagliato.


2
In altre parole, puoi reimplementare qualunque cosa faccia il completamento di bash. Certo, ma non è pratico, e non è di questo che si tratta.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.