Que puis-je taper dans mon shell (qui se trouve être bash
) qui listera toutes les commandes reconnues?
En outre, cela diffère-t-il par la coque? Ou est-ce que tous les shells ont juste un "répertoire" de commandes qu'ils reconnaissent?
Deuxièmement, une question différente, mais comment puis-je passer outre à celles-ci? En d'autres termes, comment puis-je écrire ma propre view
commande pour remplacer celle qui existe sur mon système Ubuntu, qui semble juste se charger vim
.
Réponses:
Vous pouvez utiliser
compgen
Pour info:
la source
compgen -c
cela inclura des choses comme{
ouwhile
qui ne sont pas à proprement parler des commandes.Un shell connaît quatre types de commandes.
~/.bashrc
pour bash).cd
change le répertoire courant,set
change les options et les paramètres de position,export
change l'environnement,…). La plupart des shell offrent en grande partie les mêmes fonctions internes, mais chaque shell a quelques extensions de l'ensemble de base.PATH
variable d'environnement contient une liste de répertoires séparés par deux points pour rechercher des programmes.En cas de commandes de plusieurs types portant le même nom, la première correspondance dans l'ordre ci-dessus est exécutée¹.
Vous pouvez voir à quel type de commande correspond un nom en exécutant
type some_name
.Vous pouvez répertorier les alias en exécutant la fonction
alias
intégrée sans argument. Il n'y a aucun moyen de lister les fonctions ou les builtins qui fonctionnent dans tous les shells. Vous pouvez trouver une liste de builtins dans la documentation du shell.En bash, le
set
builtin répertorie les fonctions avec leurs définitions ainsi que les variables. En bash, ksh ou zsh,typeset -f
répertorie les fonctions avec leurs définitions. En bash, vous pouvez lister tous les noms de commandes de tout type aveccompgen -c
. Vous pouvez utilisercompgen -A alias
,compgen -A builtin
compgen -A function
pour répertorier les commandes d'un type spécifique. Vous pouvez transmettre une chaîne supplémentaire àcompgen
pour répertorier uniquement les commandes commençant par ce préfixe.En zsh, vous pouvez lister les commandes actuellement disponibles d'un type donné avec
echo ${(k)aliases}
,echo ${(k)functions}
,echo ${(k)builtins}
etecho ${(k)commands}
(que la dernière listes de commandes externes uniquement).L'extrait de code shell-agnostique suivant répertorie tous les programmes externes disponibles:
Il y a un cas de bord dans les commandes Bash: hachées.
Le manuel de référence de Bash dit:
Essayer:
La
PATH
variable d'environnement ne contient pas~/dir-for-wat-command
,compgen -c
ne s'affiche paswat
, mais vous pouvez exécuterwat
.Si vous souhaitez masquer une commande existante, définissez un alias ou une fonction .
¹ Exception: quelques fonctions internes (appelées fonctions spéciales ) ne peuvent pas être masquées par une fonction - bash et zsh ne sont cependant pas conformes à POSIX sur ce point dans leur mode par défaut.
la source
$PATH
like/bin:/usr/bin:
(fin:
), où il ne parviendrait pas à répertorier les fichiers exécutables dans le répertoire en cours.La liste des commandes se compose de deux ensembles:
PATH
Vous ne pouvez pas modifier les intégrés, mais vous pouvez empêcher le shell d'utiliser un intégré en spécifiant le chemin d'accès complet comme
/bin/echo
.Quant aux commandes de votre
PATH
, vous pouvez changer cela.PATH
est une liste de répertoires séparés par deux points pour rechercher des commandes. Le premier fichier correspondant a trouvé "gagne".(Cette syntaxe ne fonctionne pas pour
csh
shells dérivés, mais tous les autres que je connais).Cela s'exporte
PATH
avec~/bin
comme première entrée suivie du reste desPATH
entrées existantes . Alors maintenant, votre shell va vérifierdirectory called
binin your home directory for a command *first* before checking the standard
PATH` la configuration du système. Vous pouvez facilement le faire vérifier le dernier répertoire en utilisant plutôt:Pour faire
PATH
persister pour les futures connexions, ajoutez-le à un.profile
ou à un autre fichier shell rc.la source
Essayez ceci, en utilisant bash :
la source
Si vous appuyez deux fois sur la touche de tabulation puis sur y, vous obtiendrez la liste de toutes les commandes disponibles dans votre shell actuel. Pour la deuxième question, je pense que vous devriez utiliser l'alias: shell alias .
la source