Chapter 7. bash: The Bourne-Again Shell
bash is
the GNU version of the standard Bourne shell—the original Unix
shell—and incorporates many popular features from other shells
such as csh, tcsh, and the Korn shell (ksh). Both tcsh, which is described in the following
chapter, and ksh, which offers many
of the features in this chapter, are also available on most
distributions of Linux. But bash is
the standard Linux shell, loaded by default when most
user accounts are created. If executed as part of the user's login, bash starts by executing any commands found in
/etc/profile. Then it executes the commands found in
~/.bash_profile,
~/.bash_login, or
~/.profile (searching for each file only if the
previous file is not found). Many distributions change shell defaults
in /etc/profile for all users, even changing the
behavior of common commands like ls. In addition, every time it starts (as a subshell or a login shell),
bash looks for a file named
~/.bashrc. Many system administration utilities
create a small ~/.bashrc automatically, and many
users create quite large startup files. Any commands that can be
executed from the shell can be included. A small sample file may look
like this (each feature can be found either in this chapter or in
Chapter 3): # Set bash variable to keep 50 commands in history.
HSTSIZE=50
#
# Set prompt to show current working directory and history number of
# command.
PS1='\w: Command \!$ '
#
# Set path to search for commands in my directories, then standard ones.
PATH=~/bin:~/scripts:$PATH
#
# Keep group and others from writing my newly created files.
umask 022
#
# Show color-coded file types.
alias ls='ls --color=yes'
#
# Make executable and .o files ugly yellow so I can find and delete them.
export LS_COLORS="ex=43:*.o=43"
#
# Quick and dirty test of a single-file program.
function gtst ( ) {
g++ -o $1 $1.C && ./$1
}
#
# Remove .o files.
alias clean='find ~ -name \*.o -exec rm { } \;'
bash provides
the following features: -
Input/output redirection
-
Wildcard characters (metacharacters) for filename abbreviation
-
Shell variables for customizing your environment
-
Powerful programming capabilities
-
Command-line editing (using vi- or
Emacs-style editing commands)
-
Access to previous commands (command history)
-
Integer arithmetic
-
Arithmetic expressions
-
Command name abbreviation (aliasing)
-
Job control
-
Integrated programming features
-
Control structures
-
Directory stacking (using pushd and
popd)
-
Brace/tilde expansion
-
Key bindings
7.1. Invoking the Shell
The command interpreter for
bash can be invoked as follows:
bash [options] [arguments]
bash can execute commands from a
terminal (when -i is specified),
from a file (when the first argument is an
executable script), or from standard input (if no arguments remain or
if -s is specified).
7.1.1. Options
Options that appear here with double hyphens also work when entered
with single hyphens, but using double hyphens is standard coding
procedure.
- -, --
-
Treat all subsequent strings as arguments, not options.
- -D, --dump-strings
-
For execution in non-English locales, dump all strings that bash translates.
- --dump-po-strings
-
Same as --dump-strings, but
uses the GNU gettext
po (portable object) format suitable for
scripting.
- -c str
-
Read commands from string str.
- --help
-
Print usage information and exit.
- -i
-
Create an interactive shell (prompt for input).
- -l, --login
-
Behave like a login shell; try to process
/etc/profile on startup. Then process
~/.bash_profile,
~/.bash_login, or
~/.profile (searching for each file only if the
previous file is not found).
- --noediting
-
Disable line editing with arrow and control keys.
- --noprofile
-
Do not process /etc/profile,
~/.bash_profile,
~/.bash_login, or
~/.profile on startup.
- --norc
-
Do not process ~/.bashrc on startup.
- --posix
-
Conform to POSIX standard.
- -r, --restricted
-
Restrict users to a very secure, limited environment; for instance,
they cannot change out of the startup directory or use the > sign to redirect output.
- --rcfile file
-
Substitute file for .bashrc
on startup.
- -s
-
Read commands from standard input. Output from built-in commands goes
to file descriptor 1; all other shell output goes to file descriptor
2.
- -v, --verbose
-
Print each line as it is executed (useful for tracing scripts).
- --version
-
Print information about which version of bash is installed.
- -x
-
Turn on debugging, as described under the -x option to the set built-in command later in this chapter.
The remaining options to bash are
listed under the set built-in
command.
7.1.2. Arguments
Arguments are assigned, in order, to the positional parameters
$1, $2, and so forth. If the first argument is an
executable script, it is assigned to $0; then commands are read from it, and
remaining arguments are assigned to $1, $2, and
so on.
 |  |  | | 6.4. Differing Features |  | 7.2. Syntax |
Copyright © 2003 O'Reilly & Associates. All rights reserved.
|
|