Section 6.9. Command Execution


6.9. Command Execution

When you type a command to Bash or ksh93, they look in the following places until they find 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. (Bash, when not in POSIX mode, 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, times, trap, and unset. The Korn shell adds alias, login, typeset, and unalias, while Bash adds source.

  4. Functions. When not in 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     } 

In ksh88, the search order is different; all built-ins are found before shell functions. Thus you have to do more work to override a built-in command with a function. You do so using a combination of functions and aliases:

     _cd (  ) {        Shell function, note leading underscore         cd "$@"            Use real cd to change directory         echo now in $PWD          Other stuff we want to do     }     alias cd=_cd           Alias found first 



Linux in a Nutshell
Linux in a Nutshell
ISBN: 0596154488
EAN: 2147483647
Year: 2004
Pages: 147

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net