Comment puis-je utiliser les possibilités de complétion des onglets?

18

Lorsque j'appuie sur l'onglet dans une console, j'obtiens cette sortie

Afficher les 2957 possibilités? (o ou n)

Existe-t-il un moyen d'utiliser grepces 2957 possibilités? Je voudrais rechercher toutes les commandes contenant le mot "svn".

UAdapter
la source

Réponses:

21

La solution est le bash intégré compgen. Pour grep 'svn' à partir de toutes les commandes et alias de commande disponibles accessibles via $PATH, tapez.

compgen -ac | grep svn

Vous souhaitez rechercher à partir d'un certain préfixe (par exemple toutes les commandes commençant par ecrypt)? Utilisez des expressions régulières. .

compgen -ac | grep "^ecrypt"
Jjed
la source
excellente réponse, mais que se passe-t-il si l'on veut grep les possibilités d'achèvement des onglets eux-mêmes? Je veux dire, ce n'est pas toujours déclenché par le nom de la commande, mais aussi par les paramètres de la commande, etc.
UncleZeiv
2

Vous pouvez essayer d'utiliser compgen.

Par exemple:

compgen -ac | grep "svn"
Rajesh Pantula
la source
1

Cela devrait être équivalent:

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
totaam
la source
1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

Très similaire à la réponse de totaam à part cela limite sa portée aux exécutables (comme le fait Bash). Mais JJE compgenest encore mieux.

Oli
la source
1

peut-être {,.}*svn*aide ici, par exemple ls -l /usr/bin/{,.}*svn*<tab>.

Mais jetez un œil au Zsh! Ici: http://www.jukie.net/bart/blog/zsh-tab-completion sont quelques excellents exemples de la façon dont cela peut aider à réduire les résultats de complétion de votre onglet. Cela inclut également la négation, par exemple si vous voulez tous les résultats de tabulation sans le mot "foobar", ou tous les résultats avec des chiffres pairs en premier lieu, la tabulation de sous-répertoire et bien plus encore. La raison pour laquelle je suis passé à zsh était le partage d'historique entre tous les terminaux ouverts.

math
la source
0

Je ne connaissais pas compgen et j'aurais suggéré:

ls -d ${PATH//:/\/*svn* } 2>/dev/null

pour bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
Utilisateur inconnu
la source