Command Execution

When you type a command to Bash, it looks in the following places until it finds a match:

  1. Keywords such as if and for.

  2. Aliases. You can’t define an alias whose name is a shell keyword, but you can define an alias that expands to a keyword, e.g., alias aslongas=while.(In non-POSIX mode, Bash does allow you to define an alias for a shell keyword.)

  3. Special built-ins like break and continue. The list of POSIX special built-ins is . (dot), :, break, continue, eval, exec, exit, export, readonly, return, set, shift, source, times, trap, and unset.

  4. Functions. When in non-POSIX mode, Bash finds functions before built-in commands.

  5. Nonspecial built-ins like cd and test.

  6. Scripts and executable programs, for which the shell searches in the directories listed in the PATH environment variable.

The distinction between “special” built-in commands and nonspecial ones comes from POSIX. This distinction, combined with the command command, makes it possible to write functions that override shell built-ins, such as cd. For example:

cd (  ) {                      Shell function, found before built-in cd
        command cd "$@"                        Use real cd to change directory
        echo now in $PWD                        Other stuff we want to do
    }

Get Linux in a Nutshell, 6th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.