Comment voir la commande attachée à un alias bash?


325

Supposons que j'ai un alias dans le shell bash. Existe-t-il une commande simple permettant d’imprimer quelle commande l’alias sera exécuté?

Réponses:


432

Le typeconstruit est utile pour cela. Il vous renseignera non seulement sur les alias, mais également sur les fonctions, les commandes intégrées, les mots-clés et les commandes externes.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdaffichera toutes les commandes de ce nom par ordre de priorité, ce qui est utile pour le lspseudonyme ci-dessus, où le pseudonyme lui-même appelle ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Cela vous indique que lorsque vous exécutez ls, /bin/lssera utilisé et --color=autosera inclus dans la liste des arguments, en plus de tout autre argument que vous ajoutez vous-même.


Que faire lorsqu'un alias contient PLUS d'alias?
user251046

2
@ user251046 continuer à utiliser typejusqu'à ce que vous frappiez autre chose qu'un alias ...
geirha

J'aime cette réponse, car typeelle analysera / interprétera toutes les citations afin que vous puissiez vous assurer que les citations sont exactes.
Wisbucky

Je l’ai compris ls is aliased to 'ls --color=auto', mais comment puis-je approfondir une couche pour savoir si elle utilise / bin / ls ou / usr / local / bin / ls ou quoi?
Krubo

1
@krubo type -a lsaffichera toutes les commandes ls trouvées par ordre de préférence. Celui qui est juste en dessous du pseudonyme est celui qui sera exécuté par le pseudonyme.
geirha le

163

Il suffit de taper aliasà l'invite du shell. Il devrait générer une liste de tous les alias actuellement actifs.

Vous pouvez également taper alias [command]pour voir à quel alias spécifique est associé, par exemple, si vous souhaitez savoir à quoi il correspond ls, vous pouvez le faire alias ls.


12
Ou tapez alias lspour savoir ce qui lsest spécifiquement aliasé.
poolie

2
@poolie en effet. Je pense que la question était de voir tous les alias, cependant, c’est pourquoi je n’ai pas donné plus de détails sur la commande alias.
Thomas Ward

Bien que cela fonctionne pour les alias, cela ne fonctionne pas si vous avez défini une fonction shell personnalisée. typecependant, fonctionne dans les deux cas.
Sujay Phadke

53

J'aime beaucoup Ctrl+ Alt+, Ecomme j'ai appris de cette réponse . Il "développe" la ligne de commande actuellement typée, ce qui signifie qu'il effectue le développement d'alias (entre autres).

Qu'est-ce que ça veut dire? Il transforme n'importe quel alias, qui pourrait être actuellement écrit sur la ligne de commande, en ce que cet alias signifie.

Par exemple, si je tape:

$ ls

puis appuyez sur Ctrl+ Alt+ E, il est transformé en

$ ls --time-style=locale --color=auto

avez-vous un équivalent sur d'autres distributions?
dimanche

@sepehr Fonctionne sur Debian, je suppose que c'est une fonctionnalité bash et devrait fonctionner sur n'importe quelle distribution.
Der Hochstapler

4
vous avez raison, cela fonctionne sur bash mais j'ai zsh et cela ne fonctionne malheureusement pas.
sepehr

était vraiment utile. J'avais un objectif différent en développant l'une des commandes bash précédentes enregistrées dans l'historique, c'est-à-dire! 394, afin de pouvoir l'éditer avant d'exécuter
XXL

1
Il a une mise en garde. Lorsqu'un alias inclut des guillemets nécessaires, ils seront supprimés. Donc, squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R au lieu desqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh,

10

À proprement parler, la bonne réponse consiste à utiliser le tableau BASH_ALIASES, par exemple:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars

2
J'ai trouvé cela utile dans une situation où je souhaitais que l'accès programmatique à la déclaration réelle soit aliasé sans les trucs utiles à l'homme qui l'entourent.
M. Justin

ça ne marche pas en zsh
ProGrammar

1
@ProGrammar la question portait sur bash - pour zsh, vous devriez consulter les questions sur zsh
noonex

1
Bingo Exactement ce dont j'avais besoin, comme @ M.Justin - Je veux empiler plus de commutateurs sur l' lsalias actuel sans modifier ce qui y est. Alors je vais alias ls="${BASH_ALIASES[ls]} --time-style=iso"pour mon cas.
Rich

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.