Quand j'appuie sur l'onglet dans une console, j'obtiens cette sortie
Afficher toutes les 2957 possibilités? (y ou n)
Est-il possible d'utiliser grep
sur ces 2957 possibilités? Je voudrais rechercher toutes les commandes contenant le mot "svn".
La solution est la bash intégrée compgen
. Pour grep 'svn' parmi toutes les commandes disponibles et alias de commande accessibles via $PATH
, tapez.
compgen -ac | grep svn
Vous souhaitez effectuer une recherche à partir d'un certain préfixe (par exemple, toutes les commandes commençant par ecrypt
)? Utilisez expressions régulières. .
compgen -ac | grep "^ecrypt"
Vous pouvez essayer d'utiliser compgen
.
Par exemple:
compgen -ac | grep "svn"
Cela devrait être équivalent:
for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done
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, sa portée est limitée aux exécutables (comme le fait Bash). Mais JJE's compgen
est encore meilleur.
peut-être que {,.}*svn*
aide ici, par exemple. ls -l /usr/bin/{,.}*svn*<tab>
.
Mais regardez le Zsh! Voici: http://www.jukie.net/bart/blog/zsh-tab-completion sont d'excellents exemples de la façon dont cela peut aider à réduire vos résultats de complétion par onglets. Ceci inclut également la négation, par exemple si vous voulez tous les résultats de complétion par des tabulations sans le mot "foobar", ou tous les résultats avec des chiffres pairs en premier lieu, la complétion de sous-répertoires et bien plus encore. La raison pour laquelle j'ai changé pour zsh était le partage de l'historique entre tous les terminaux ouverts.
Je ne savais pas Compgen, et aurait 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 /.