
- •Advanced Bash-Scripting Guide
- •Dedication
- •Table of Contents
- •Part 1. Introduction
- •Advanced Bash-Scripting Guide
- •Chapter 2. Starting Off With a Sha-Bang
- •2.1. Invoking the script
- •2.2. Preliminary Exercises
- •Part 2. Basics
- •Chapter 3. Exit and Exit Status
- •Chapter 4. Special Characters
- •Chapter 5. Introduction to Variables and Parameters
- •5.1. Variable Substitution
- •5.2. Variable Assignment
- •5.3. Bash Variables Are Untyped
- •5.4. Special Variable Types
- •Chapter 6. Quoting
- •Chapter 7. Tests
- •7.1. Test Constructs
- •7.2. File test operators
- •7.3. Comparison operators (binary)
- •7.4. Nested if/then Condition Tests
- •7.5. Testing Your Knowledge of Tests
- •8.1. Operators
- •8.2. Numerical Constants
- •Part 3. Beyond the Basics
- •Chapter 9. Variables Revisited
- •9.1. Internal Variables
- •9.2. Manipulating Strings
- •9.3. Parameter Substitution
- •9.4. Typing variables: declare or typeset
- •9.5. Indirect References to Variables
- •9.6. $RANDOM: generate random integer
- •9.7. The Double Parentheses Construct
- •Chapter 10. Loops and Branches
- •10.1. Loops
- •10.2. Nested Loops
- •10.3. Loop Control
- •10.4. Testing and Branching
- •Chapter 11. Internal Commands and Builtins
- •12.1. Basic Commands
- •12.2. Complex Commands
- •12.3. Time / Date Commands
- •12.4. Text Processing Commands
- •12.5. File and Archiving Commands
- •12.6. Communications Commands
- •12.7. Terminal Control Commands
- •12.8. Math Commands
- •12.9. Miscellaneous Commands
- •Chapter 13. System and Administrative Commands
- •Chapter 14. Command Substitution
- •Chapter 15. Arithmetic Expansion
- •Chapter 16. I/O Redirection
- •16.1. Using exec
- •16.2. Redirecting Code Blocks
- •16.3. Applications
- •Chapter 17. Here Documents
- •Chapter 18. Recess Time
- •Part 4. Advanced Topics
- •Chapter 19. Regular Expressions
- •19.1. A Brief Introduction to Regular Expressions
- •19.2. Globbing
- •Chapter 20. Subshells
- •Chapter 21. Restricted Shells
- •Chapter 22. Process Substitution
- •Chapter 23. Functions
- •23.1. Complex Functions and Function Complexities
- •23.2. Local Variables
- •Chapter 24. Aliases
- •Chapter 25. List Constructs
- •Chapter 26. Arrays
- •Chapter 27. Files
- •Chapter 28. /dev and /proc
- •28.2. /proc
- •Chapter 29. Of Zeros and Nulls
- •Chapter 30. Debugging
- •Chapter 31. Options
- •Chapter 32. Gotchas
- •Chapter 33. Scripting With Style
- •Chapter 34. Miscellany
- •34.2. Shell Wrappers
- •34.3. Tests and Comparisons: Alternatives
- •34.4. Optimizations
- •34.5. Assorted Tips
- •34.6. Oddities
- •34.7. Security Issues
- •34.8. Portability Issues
- •34.9. Shell Scripting Under Windows
- •Chapter 35. Bash, version 2
- •36. Endnotes
- •36.1. Author's Note
- •36.2. About the Author
- •36.3. Tools Used to Produce This Book
- •36.4. Credits
- •List of Tables
- •List of Examples
- •Bibliography

Aliases
Advanced Bash-Scripting Guide:
Prev |
Next |
Chapter 24. Aliases
A Bash alias is essentially nothing more than a keyboard shortcut, an abbreviation, a means of avoiding typing a long command sequence. If, for example, we include alias lm="ls -l | more" in the ~/.bashrc file, then each lm typed at the command line will automatically be replaced by a ls -l | more. This can save a great deal of typing at the command line and avoid having to remember complex combinations of commands and options. Setting alias rm="rm -i" (interactive mode delete) may save a good deal of grief, since it can prevent inadvertently losing important files.
In a script, aliases have very limited usefulness. It would be quite nice if aliases could assume some of the functionality of the C preprocessor, such as macro expansion, but unfortunately Bash does not expand arguments within the alias body. [1] Moreover, a script fails to expand an alias itself within "compound constructs", such as if/then statements, loops, and functions. An added limitation is that an alias will not expand recursively. Almost invariably, whatever we would like an alias to do could be accomplished much more effectively with a function.
Example 24-1. Aliases within a script
#!/bin/bash
# Invoke with command line parameter to exercise last section of this script.
shopt -s expand_aliases
#Must set this option, else script will not expand aliases.
#First, some fun.
alias Jesse_James='echo "\"Alias Jesse James\" was a 1959 comedy starring Bob Hope."' Jesse_James
echo; echo; echo;
alias ll="ls -l"
# May use either single (') or double (") quotes to define an alias.
echo "Trying aliased \"ll\":"
ll /usr/X11R6/bin/mk* #* Alias works.
echo
directory=/usr/X11R6/bin/
prefix=mk* # See if wild-card causes problems.
echo "Variables \"directory\" + \"prefix\" = $directory$prefix" echo
alias lll="ls -l $directory$prefix"
echo "Trying aliased \"lll\":"
lll # Long listing of all files in /usr/X11R6/bin stating with mk.
# Alias handles concatenated variables, including wild-card o.k.
http://tldp.org/LDP/abs/html/aliases.html (1 of 3) [7/15/2002 6:34:19 PM]

Aliases
TRUE=1
echo
if [ TRUE ] then
alias rr="ls -l"
echo "Trying aliased \"rr\" within if/then statement:" rr /usr/X11R6/bin/mk* #* Error message results!
# Aliases not expanded within compound statements.
echo "However, previously expanded alias still recognized:" ll /usr/X11R6/bin/mk*
fi
echo
count=0
while [ $count -lt 3 ] do
alias rrr="ls -l"
echo "Trying aliased \"rrr\" within \"while\" loop:"
rrr |
/usr/X11R6/bin/mk* |
#* Alias will not expand here either. |
|
let count+=1 |
|
|
|
done |
|
|
|
echo; echo |
|
|
|
alias xyz="cat $1" |
# |
Try a positional parameter in an alias. |
|
xyz |
|
# |
Assumes you invoke the script |
|
|
#+ |
with a filename as a parameter. |
#This seems to work,
#+ although the Bash documentation suggests that it shouldn't.
#
#However, as Steve Jacobson points out,
#+ the "$1" parameter expands immediately upon declaration of the alias, #+ so, in the strictest sense, this is not an example
#+ of parameterizing an alias.
exit 0
The unalias command removes a previously set alias.
Example 24-2. unalias: Setting and unsetting an alias
http://tldp.org/LDP/abs/html/aliases.html (2 of 3) [7/15/2002 6:34:19 PM]

Aliases
#!/bin/bash
shopt -s expand_aliases # Enables alias expansion.
alias llm='ls -al | more' llm
echo
unalias llm # Unset alias. llm
# Error message results, since 'llm' no longer recognized.
exit 0
bash$ ./unalias.sh |
|
|
|
|
|
||
total 6 |
|
|
|
|
|
|
|
drwxrwxr-x |
2 |
bozo |
bozo |
3072 |
Feb |
6 |
14:04 . |
drwxr-xr-x |
40 |
bozo |
bozo |
2048 |
Feb |
6 |
14:04 .. |
-rwxr-xr-x |
1 |
bozo |
bozo |
199 |
Feb |
6 |
14:04 unalias.sh |
./unalias.sh: |
llm: command not found |
|
|
|
|
||
|
|
|
|
|
|
|
|
Notes
[1]However, aliases do seem to expand positional parameters.
Prev |
Home |
Next |
Local Variables |
Up |
List Constructs |
http://tldp.org/LDP/abs/html/aliases.html (3 of 3) [7/15/2002 6:34:19 PM]