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.