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é?

Casebash
la source

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.

geirha
la source
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.

Thomas Ward
la source
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
Der Hochstapler
la source
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
le midi
la source
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
2

Vous pouvez utiliser la whichcommande.

Si vous définissez un alias pour lsas ls -alpuis tapez which ls, vous verrez:

ls: aliased to ls -al.

utilisateur312471
la source
Bash n'a pas de whichcommande.
geirha
Ne travaille pas pour moi ..
Chiel ten Brinke
2
whichest un mauvais moyen de rechercher des alias, comme expliqué ici: unix.stackexchange.com/questions/10525/… Cela ne fonctionne même pas pour moi pour les alias dans bash sur Ubuntu.
Sujay Phadke