Suppose I have an alias in the bash shell. Is there a simple command to print out what command the alias will run?


The type builtin is useful for this. It will not only tell you about aliases, but also functions, builtins, keywords and external commands.

$ 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 cmd will show all the commands by that name in order of precedence, which is useful for the ls alias above, where the alias itself calls ls.

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

This tells you that when you run ls, /bin/ls will be used, and --color=auto will be included in its list of arguments, in addition to any other you add yourself.

  • 1
    what to do when an alias contains MORE aliases?
    – user251046
    Jul 26 '14 at 10:34
  • 3
    @user251046 keep using type until you hit something other than an alias ...
    – geirha
    Sep 3 '14 at 19:03
  • I like this answer because type will parse/interpret any quotes, so you can make sure the quotes are right.
    – wisbucky
    Mar 2 '18 at 4:21
  • I got ls is aliased to 'ls --color=auto', but how can I get one layer deeper, to see whether it uses /bin/ls or /usr/local/bin/ls or what?
    – krubo
    Jan 29 '19 at 2:19
  • 4
    @krubo type -a ls will show all ls commands found in order of preference. Whichever is right below the alias is the one that will be executed by the alias.
    – geirha
    Jan 30 '19 at 7:54

Just type alias while at the Shell prompt. It should output a list of all currently-active aliases.

Or, you can type alias [command] to see what a specific alias is aliased to, as an example, if you wanted to find out what the ls alias was aliased to, you could do alias ls.

  • 17
    Or type alias ls to find out what specifically ls is aliased to.
    – poolie
    Feb 7 '12 at 4:10
  • 2
    @poolie Indeed. I think the question was to see all the aliases, though, which is why i did not elaborate further on the alias command.
    – Thomas Ward
    Feb 7 '12 at 4:52
  • 1
    while this works for aliases, it doesn't work if you've defined a custom shell function. type however, works in both cases. Sep 24 '16 at 6:38

I really like Ctrl+Alt+E as I learned from this answer. It "expands" the currently typed command line, meaning it performs alias expansion (amongst other things).

What does that mean? It turns any alias, that might be currently written on the command line, into what the alias stands for.

For example, if I type:

$ ls

and then press Ctrl+Alt+E, it is turned into

$ ls --time-style=locale --color=auto
  • have this an equivalent on other distros?
    – sepehr
    Jul 3 '14 at 13:40
  • @sepehr Works on Debian, I assume it's a bash feature and should work on any distribution. Jul 3 '14 at 16:15
  • 5
    you're right, it works on bash but I have zsh and it doesn't work unfortunately.
    – sepehr
    Jul 4 '14 at 12:46
  • was really helpful. I had a different goal of expanding one of the previous bash commands logged in history with, i.e., !394, so that I could edit it first before executing
    – XXL
    Mar 23 '16 at 12:42
  • 1
    It has one caveat. When an alias includes necessary quotes, they will be removed. So, I get squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R instead of squeue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
    – Davidmh
    May 4 '18 at 19:19

Strictly speaking correct answer is using BASH_ALIASES array, e.g.:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
  • 3
    I found this useful in a situation where I wanted programmatic access to the actual statement being aliased without the human-useful stuff around it.
    – M. Justin
    Mar 6 '17 at 20:16
  • this isn't working in zsh
    – ProGrammar
    Apr 18 '18 at 13:22
  • 1
    @ProGrammar the question was about bash - for zsh you should look questions about zsh
    – noonex
    Apr 18 '18 at 20:19
  • 1
    Bingo. Exactly what I needed, same as @M.Justin - I want to stack more switches onto the current ls alias without altering what's there. So I'm going alias ls="${BASH_ALIASES[ls]} --time-style=iso" for my case.
    – Rich
    May 29 '19 at 19:17

You could use the which command.

If you set an alias for ls as ls -al and then type which ls, you will see:

ls: aliased to ls -al.

  • bash has no which command.
    – geirha
    Sep 11 '14 at 9:34
  • 1
    Not working for me.. Mar 15 '16 at 13:34
  • 3
    which is a bad way to lookup aliases as explained here: unix.stackexchange.com/questions/10525/… It doesn't even work for me for aliases in bash on Ubuntu. Sep 24 '16 at 6:36
  • Only solution that worked for me on MacOS/zsh (This is a Bash question on AskUbuntu I know, but AskUbuntu shows up first in Google) Nov 15 '21 at 16:48

At terminal

$ alias | grep ALIAS



Replace ALIAS with your alias.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.