Existe-t-il une commande Linux répertoriant toutes les commandes et alias disponibles pour cette session de terminal?
Comme si vous aviez tapé 'a' et appuyé sur l'onglet, mais pour chaque lettre de l'alphabet. Ou exécuter 'alias' mais aussi renvoyer des commandes.
Pourquoi? J'aimerais lancer ce qui suit et voir si une commande est disponible:
ListAllCommands | grep searchstr
Vous pouvez utiliser le bash (1) intégré compgen
compgen -c
listera toutes les commandes que vous pouvez exécuter.compgen -a
listera tous les alias que vous pourriez exécuter.compgen -b
listera tous les fichiers intégrés que vous pourriez exécuter.compgen -k
listera tous les mots-clés que vous pourriez utiliser.compgen -A function
listera toutes les fonctions que vous pouvez exécuter.compgen -A function -abck
listera tout ce qui précède en une fois.Consultez la page de manuel pour connaître les autres compléments que vous pouvez générer.
Pour répondre directement à votre question:
compgen -ac | grep searchstr
devrait faire ce que vous voulez.
Ajouter à .bashrc
function ListAllCommands
{
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n' | sort -u
}
Si vous voulez aussi des alias, alors:
function ListAllCommands
{
COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n'`
ALIASES=`alias | cut -d '=' -f 1`
echo "$COMMANDS"$'\n'"$ALIASES" | sort -u
}
Il y a le
type -a mycommand
commande qui répertorie tous les alias et toutes les commandes de $ PATH où mycommand est utilisé. Peut être utilisé pour vérifier si la commande existe en plusieurs variantes. Autre que cela ... Il y a probablement un script autour de $ PATH et tous les alias, mais je ne connais pas un tel script.
Utilisez "qui searchstr". Renvoie le chemin du binaire ou la configuration de l'alias s'il s'agit d'un alias.
Edit: Si vous cherchez une liste d’alias, vous pouvez utiliser:
alias -p | cut -d= -f1 | cut -d' ' -f2
Ajoutez-le à la réponse de votre recherche dans PATH. Suppose que vous utilisez bash ..
La commande other ne fonctionnait pas pour moi sur les systèmes embarqués, car elle nécessite bash ou une version plus complète de xargs (busybox était limité).
Les commandes suivantes devraient fonctionner sur tout système de type Unix.
Liste par dossier:
ls $(echo $PATH | tr ':' ' ')
Lister toutes les commandes par nom
ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
Essayez ce script:
#!/bin/bash
echo $PATH | tr : '\n' |
while read e; do
for i in $e/*; do
if [[ -x "$i" && -f "$i" ]]; then
echo $i
fi
done
done
Pour les utilisateurs de Mac (find n'a pas -executable et xargs n'a pas -d):
echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
Il est utile de répertorier les commandes en fonction des mots-clés associés à la commande.
Utilisez: 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
Voici une solution qui vous donne une liste de tous les exécutables et alias. Il est également portable sur les systèmes sans xargs -d
(par exemple, Mac OS X) et gère correctement les chemins contenant des espaces.
#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"
Utilisation: myscript.sh [grep-options] pattern
, par exemple. pour rechercher toutes les commandes commençant par ls
, en respectant la casse, faites:
myscript -i ^ls
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 marcher en bash.
méthode de raccourci pour lister toutes les commandes. Ouvrez le terminal et appuyez deux fois sur la touche "onglet". Cela montre toutes les commandes dans le terminal
Alternativement, vous pouvez obtenir une liste pratique de commandes associée à des descriptions rapides (à condition que la commande ait une page de manuel, ce que la plupart font):
apropos -s 1 ''
-s 1 returns only "section 1" manpages which are entries for executable programs.
'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)
Ensuite, vous le faites comme vous le souhaitez.
apropos -s 1 '' | grep xdg
rendements:
xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1) - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1) - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1) - opens a file or URL in the user's preferred application
xdg-screensaver (1) - command line tool for controlling the screensaver
xdg-settings (1) - get various settings from the desktop environment
xdg-user-dir (1) - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration
Les résultats ne semblent pas être triés, donc si vous recherchez une longue liste, vous pouvez lancer un | trier | dans le milieu, puis dirigez cela vers un téléavertisseur comme less/more/most. ala:
apropos -s 1 '' | sort | grep Zip | less
Ce qui retourne une liste triée de toutes les commandes ayant "Zip" dans leur nom ou leur brève description et envoie le "moins" pager. (Vous pouvez également remplacer "moins" par $ PAGER et utiliser le pager par défaut.)
Vous pouvez toujours faire ce qui suit:
1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry:
ls * $entry
4. grep your command in that output.
Le shell n’exécutera la commande que s’ils sont répertoriés dans le chemin env var.
cela dépend, je veux dire par là que cela dépend de ce que vous utilisez Shell. voici les contraintes que je vois:
J'utilise ZSH alors voici une réponse zsh, il fait les 3 choses suivantes:
c'est ici:
feed_me() {
(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}
Si vous utilisez zsh, cela devrait le faire.
Le problème est que la complétion par tabulation recherche votre chemin, mais toutes les commandes ne sont pas dans votre chemin.
Pour trouver les commandes dans votre chemin en utilisant bash, vous pouvez faire quelque chose comme:
pour x dans echo $PATH | cut -d":" -f1
; est-ce que ls $ x; terminé
Voici une fonction que vous pouvez mettre dans votre fichier bashrc:
fonction recherche-commande { oldIFS = $ {IFS} IFS = ":" pour p dans $ {PATH} Do Ls $ p | grep $ 1 terminé exportez IFS = $ {oldIFS} }
Exemple d'utilisation:
$ gnome de recherche de commandes gnome-audio-profiles-properties * éject de gnome @ gnome-keyring * gnome-keyring- daemon * gnome-mount * gnome-open * gnome-enregistreur-de-son * gnome-text-editor @ gnome-umount @ gnome-volume-control * polkit-gnome-authorisation * vim.gnome * $
FYI: IFS est une variable utilisée par bash pour scinder des chaînes.
Il pourrait certainement y avoir de meilleures façons de le faire.