Existe-t-il une commande Linux qui répertoriera toutes les commandes et alias disponibles pour cette session de terminal?
Comme si vous aviez tapé 'a' et appuyé sur tab, mais pour chaque lettre de l'alphabet. Ou exécuter 'alias' mais aussi renvoyer des commandes.
Pourquoi? Je voudrais exécuter ce qui suit et voir si une commande est disponible:
ListAllCommands | grep searchstr
Réponses:
Vous pouvez utiliser le bash (1) intégré
compgen
compgen -c
répertorie toutes les commandes que vous pourriez exécuter.compgen -a
répertorie tous les alias que vous pouvez exécuter.compgen -b
répertorie toutes les fonctions intégrées que vous pouvez exécuter.compgen -k
répertorie tous les mots clés que vous pouvez exécuter.compgen -A function
répertorie toutes les fonctions que vous pourriez exécuter.compgen -A function -abck
énumérera tout ce qui précède en une seule fois.Consultez la page de manuel pour les autres complétions que vous pouvez générer.
Pour répondre directement à votre question:
devrait faire ce que vous voulez.
la source
compgen | grep
, il peut être plus efficace de se passer la chaîne comme argumentcompgen
(s'il est connu pour être un préfixe, comme impliqué dans la question). Dans ce cas, ce seraitcompgen -ac searchstr
.whatis compgen
et «Aucune entrée manuelle» pourman compgen
.bash
intégrée, pas une commande séparée avec sa propre page de manuel. Vous devrez lire labash(1)
page de manuel ou exécuterhelp compgen
sur unebash
ligne de commande.compgen -c | sort | uniq | less
affichera toutes les commandes disponibles sans lignes dupliquées et triées par ordre alphabétique.Ajouter à .bashrc
Si vous souhaitez également des alias, alors:
la source
-L
pour suivre les liens symboliques vers leur destination. Remarque:-L
est une option et ne fait pas partie de l'expression correspondante, en tant que telle, elle doit être placée avant le chemin sur la ligne de commande. Dans ce casfind -L {}
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u
(+1 pour la compatibilité zsh)Il y a le
commande qui répertorie tous les alias et commandes dans $ PATH où ma commande est utilisée. Peut être utilisé pour vérifier si la commande existe en plusieurs variantes. A part ça ... Il y a probablement un script autour qui analyse $ PATH et tous les alias, mais je ne connais aucun de ces scripts.
la source
Utilisez "quelle recherche". Renvoie le chemin du binaire ou la configuration d'alias s'il s'agit d'un alias
Modifier: si vous recherchez une liste d'alias, vous pouvez utiliser:
Ajoutez-le à la réponse de recherche que vous souhaitez. Suppose que vous utilisez bash ..
la source
Les autres commandes ne fonctionnaient pas pour moi sur les systèmes embarqués, car elles nécessitent bash ou une version plus complète de xargs (busybox était limité).
Les commandes suivantes devraient fonctionner sur n'importe quel système de type Unix.
Liste par dossier:
Liste toutes les commandes par nom
la source
tr
. Pourquoi pas simplementls $(echo ${PATH//:/ })
?Essayez ce script:
la source
Pour les utilisateurs de Mac ( find n'a pas -executable et xargs n'a pas -d):
la source
Il est utile de répertorier les commandes en fonction des mots clés associés à la commande.
Utilisation:
man -k "your keyword"
n'hésitez pas à combiner avec:
| grep "another word"
par exemple, pour trouver un éditeur de texte:
man -k editor | grep text
la source
Essayez d'appuyer sur ALT-? (alt et point d'interrogation en même temps). Donnez-lui une seconde ou deux pour construire la liste. Cela devrait fonctionner en bash.
la source
Voici une solution qui vous donne une liste de tous les exécutables et alias. Il est également portable pour les systèmes sans
xargs -d
(par exemple Mac OS X), et gère correctement les chemins contenant des espaces.Utilisation:,
myscript.sh [grep-options] pattern
par exemple pour trouver toutes les commandes qui commencent parls
, sans tenir compte de la casse, faites:la source
méthode de raccourci pour répertorier toutes les commandes. Ouvrez le terminal et appuyez deux fois sur le bouton "tab" . C'est montrer toutes les commandes dans le terminal
la source
grep
expliquez exactement comment?Alternativement, vous pouvez obtenir une liste pratique de commandes couplée à des descriptions rapides (tant que la commande a une page de manuel, ce que la plupart font):
Ensuite, vous le saluez comme vous le souhaitez.
rendements:
Les résultats ne semblent pas être triés, donc si vous cherchez une longue liste, vous pouvez lancer un | trier | au milieu, puis dirigez-le vers un téléavertisseur comme less / more / most. ala:
Qui retourne une liste triée de toutes les commandes qui ont "zip" dans leur nom ou leur brève description, et pompe ce pageur "moins". (Vous pouvez également remplacer "moins" par $ PAGER et utiliser le pager par défaut.)
la source
Vous pouvez toujours effectuer les opérations suivantes:
Le shell exécutera la commande uniquement s'ils sont de toute façon répertoriés dans le chemin env var.
la source
cela dépend, j'entends par là que cela dépend du shell que vous utilisez. voici les contraintes que je vois:
J'utilise ZSH alors voici une réponse zsh, elle fait les 3 choses suivantes:
C'est ici:
Si vous utilisez zsh, cela devrait le faire.
la source
Le problème est que la tabulation complète recherche votre chemin, mais toutes les commandes ne se trouvent pas dans votre chemin.
Pour trouver les commandes dans votre chemin en utilisant bash, vous pouvez faire quelque chose comme:
pour x in
echo $PATH | cut -d":" -f1
; faire ls $ x; terminéla source
Voici une fonction que vous pouvez mettre dans votre fichier bashrc:
Exemple d'utilisation:
FYI: IFS est une variable que bash utilise pour diviser les chaînes.
Il pourrait certainement y avoir de meilleures façons de procéder.
la source
peut-être que je me méprends, mais que se passe-t-il si vous appuyez sur Échap jusqu'à ce que vous ayez les possibilités Afficher tous les X?
la source
la source
compgen -c > /tmp/list.txt && /tmp/wc list.txt
Pourquoi ne tapez-vous pas simplement:
Dans le terminal.
La coquille dira quelque chose comme
ÉDITER:
Ok, je prends le downvote, parce que la réponse est stupide, je veux juste savoir: Quel est le problème avec cette réponse !!! Le demandeur a déclaré:
Taper la commande vous dira si elle est disponible !.
Probablement, il / elle voulait dire "sans exécuter la commande" ou "l'inclure dans un script" mais je ne peux pas lire son esprit (ce n'est pas que je ne peux pas régulièrement c'est juste qu'il porte un déflecteur de lecture d'esprit )
la source
formathdd
commande existe. Oh attendez, je viens de l'exécuter et de voir. gee. Merci :)dans debian: ls / bin / | grep "whatImSearchingFor"
la source