I have dozens of aliases and functions available in any shell in any terminal on any of my machines. If I add Homebrew installs and PATH priorities, it can be a lot to keep track of.
You probably know about the
which command. It returns the path to the binary which would be executed by a given command. If that command is an alias or function — or even binaries located outside of a default scope — it won’t return anything. The alternative is the shell builtin
When you use
type [command], it will tell you whether it’s an alias, a function, a file, or a hashed binary. For functions and aliases, it will also display the actual script or show you what command it’s aliased to. That means that not only will
type explain that an alias is overriding a default binary, it will also show you the equivalent of
alias [command] at the same time. You can even use the
-a option to show every possible destination of that command.
Next time you’re trying to remember what’s aliased to what, what a function does, or why a command is giving unexpected results, turn to
Here’s the documentation for additional options:
With no options, indicate how each name would be interpreted if used as a command name. If the -t option is used, type prints a string which is one of alias, keyword, function, builtin, or file if name is an alias, shell reserved word, function, builtin, or disk file, respectively. If the name is not found, then nothing is printed, and an exit status of false is returned. If the -p option is used, type either returns the name of the disk file that would be executed if name were specified as a command name, or nothing if ``type -t name'' would not return file. The -P option forces a PATH search for each name, even if ``type -t name'' would not return file. If a command is hashed, -p and -P print the hashed value, not necessarily the file that appears first in PATH. If the -a option is used, type prints all of the places that contain an executable named name. This includes aliases and functions, if and only if the -p option is not also used. The table of hashed commands is not consulted when using -a. The -f option suppresses shell function lookup, as with the command builtin. type returns true if any of the arguments are found, false if none are found.