Comment canaliser la liste des commandes affichées par «tab complete»?

12

Lorsque j'utilise des commandes dans bash, j'aime l'option double onglet pour afficher les commandes disponibles. Certaines commandes ont plus de correspondances possibles que d'autres:

Capture d'écran de la complétion d'un onglet http://img13.imageshack.us/img13/5541/picturemhy.jpg

Existe-t-il un moyen de diriger la sortie du double onglet vers quelque part, comme grep? J'ai trouvé un article connexe , mais je ne sais toujours pas comment l'implémenter pour le diriger vers grep.

cwd
la source
Comment imaginez-vous exactement que vous entreriez dans l' grepexpression régulière? (y or n or g[rep])? Je déteste paraître pessimiste, mais je doute que cela puisse être fait sans l'ajouter au code bash.
Kevin

Réponses:

21

Pour les commandes, utilisez compgen -c:

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

Cette sortie, vous pouvez simplement la diriger grep.

salutis
la source
+1 Pour la commande ... La prochaine partie intéressante pourrait être de savoir comment créer un raccourci clavier pour cela.
rozcietrzewiacz
3

Sur la base de la réponse de @ salutis, j'ai créé un script que j'ai appelé compet stocké dans les ~/bin/comprecherches commands' ,, aliaseset builtins, (indicateur d'option -cabvoir l'entrée bash man ), avec un deuxième paramètre facultatif qui, s'il est présent, dirige la sortie vers grepet recherche le deuxième paramètre.

Usage: comp string [keyword-for-grep]

Code:

#!/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

Personnellement, je serais également intéressé à trouver un moyen de supprimer la dernière commande de l'historique du shell dans le script (quelque chose en rapport avec history -d) afin que lors de la recherche dans l' bashhistorique, je ne trouve pas d' compentrées. Je sais que je peux aussi le faire avec HISTIGNOREmais Linux est assez puissant, donc il doit y avoir un moyen de le faire à partir du fichier de script aussi - non?

marque
la source
1
Bien sûr, vous pouvez ajuster cela en fonction de vos besoins, mais cela devrait vous aider à démarrer.
marquez
-3

Pourquoi ne pas trouver ce que vous cherchez?

Exemple:

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

Connaissant votre cas d'utilisation, je peux créer un exemple de commande plus détaillé.

Mat
la source
2
En d'autres termes, vous pouvez réimplémenter tout ce que l'achèvement de bash fait. Bien sûr, mais ce n'est pas pratique, et ce n'est pas de cela qu'il s'agit.
Gilles 'SO- arrête d'être méchant'