Imported from ../bash-2.01.tar.gz.

This commit is contained in:
Jari Aalto
2009-09-12 16:46:50 +00:00
parent ccc6cda312
commit d166f04881
304 changed files with 14702 additions and 13012 deletions
+166 -124
View File
@@ -5,13 +5,13 @@
@c %**end of header
@ignore
last change: Mon Nov 25 11:47:06 EST 1996
last change: Mon May 19 12:55:22 EDT 1997
@end ignore
@set EDITION 2.0
@set VERSION 2.0
@set UPDATED 25 November 1996
@set UPDATE-MONTH November 1996
@set VERSION 2.01
@set UPDATED 19 May 1997
@set UPDATE-MONTH May 1997
@iftex
@finalout
@@ -272,8 +272,8 @@ from it, that are all in the same process group.
@item job control
@cindex job control
A mechanism by which users can selectively start and stop execution
of processes.
A mechanism by which users can selectively stop (suspend) and restart
(resume) execution of processes.
@item metacharacter
@cindex metacharacter
@@ -717,7 +717,7 @@ has a non-zero exit status, then execute @var{alternate-consequents}.
The syntax of the @code{case} command is:
@example
@code{case @var{word} in [@var{pattern} [| @var{pattern}]@dots{}) @var{commands} ;;]@dots{} esac}
@code{case @var{word} in [ ( @var{pattern} [| @var{pattern}]@dots{}) @var{commands} ;;]@dots{} esac}
@end example
Selectively execute @var{commands} based upon @var{word} matching
@@ -744,7 +744,7 @@ echo " legs."
@end example
The @var{expression} is evaluated according to the rules described
below ((@pxref{Arithmetic Evaluation}).
below (@pxref{Arithmetic Evaluation}).
If the value of the expression is non-zero, the return status is 0;
otherwise the return status is 1. This is exactly equivalent to
@example
@@ -794,7 +794,7 @@ between these two constructs due to historical reasons. The braces
are @code{reserved words}, so they must be separated from the @var{list}
by @code{blank}s. The parentheses are @code{operators}, and are
recognized as separate tokens by the shell even if they are not separated
from @code{list} by whitespace.
from the @var{list} by whitespace.
The exit status of both of these constructs is the exit status of
@var{list}.
@@ -825,10 +825,9 @@ the exit status of the last command executed in the body.
When a function is executed, the arguments to the
function become the positional parameters
during its execution (@pxref{Positional Parameters}).
The special parameter
@samp{#} that gives the number of positional parameters
is updated to reflect the change. Positional parameter @code{0}
is unchanged.
The special parameter @samp{#} that expands to the number of
positional parameters is updated to reflect the change.
Positional parameter @code{0} is unchanged.
If the builtin command @code{return}
is executed in a function, the function completes and
@@ -919,8 +918,11 @@ of the @code{IFS}
special variable. That is, @code{"$*"} is equivalent
to @code{"$1@var{c}$2@var{c}@dots{}"}, where @var{c}
is the first character of the value of the @code{IFS}
variable. If @code{IFS}
is null or unset, the parameters are separated by spaces.
variable.
If @code{IFS} is unset, the parameters are separated by spaces.
If @code{IFS} is null, the parameters are joined without intervening
separators.
@item @@
Expands to the positional parameters, starting from one. When the
@@ -1020,7 +1022,7 @@ Only brace expansion, word splitting, and filename expansion
can change the number of words of the expansion; other expansions
expand a single word to a single word.
The only exceptions to this are the expansions of
@code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{[@@]@}"}
@code{"$@@"} (@pxref{Special Parameters}) and @code{"$@{@var{name}[@@]@}"}
(@pxref{Arrays}).
After all expansions, @code{quote removal} (@pxref{Quote Removal})
@@ -1050,7 +1052,7 @@ If the first character of @var{parameter} is an exclamation point,
a level of variable indirection is introduced.
Bash uses the value of the variable formed from the rest of
@var{parameter} as the name of the variable; this variable is then
expanded and that value used in the rest of the substitution, rather
expanded and that value is used in the rest of the substitution, rather
than the value of @var{parameter} itself.
This is known as @code{indirect expansion}.
@@ -1953,21 +1955,23 @@ Print out the user and system times used by the shell and its children.
@item trap
@btindex trap
@example
trap [-lp] [@var{arg}] [@var{sigspec}]
trap [-lp] [@var{arg}] [@var{sigspec} @dots{}]
@end example
The commands in @var{arg} are to be read and executed when the
shell receives signal @var{sigspec}. If @var{arg} is absent or
equal to @samp{-}, all specified signals are reset to the values
they had when the shell was started.
If @var{arg} is the null string, then @var{sigspec} is ignored by
the shell and commands it invokes.
If @var{arg} is the null string, then the signal specified by
each @var{sigspec} is ignored by the shell and commands it invokes.
If @var{arg} is @samp{-p}, the shell displays the trap commands
associated with each @var{sigspec}. If no arguments are supplied, or
only @samp{-p} is given, @code{trap} prints the list of commands
associated with each signal number. @var{sigspec} is either a signal
name such as @code{SIGINT} or a signal number. If @var{sigspec} is
@code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
If @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
associated with each signal number.
Each @var{sigspec} is either a signal name such as @code{SIGINT} (with
or without the @code{SIG} prefix) or a signal number.
If a @var{sigspec}
is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
after every simple command.
The @samp{-l} option causes the shell to print a list of signal names
and their corresponding numbers.
@@ -2136,7 +2140,7 @@ quotes. The @samp{-D} and @samp{--dump-strings} invocation options
list the translatable strings found in a script
(@pxref{Locale Translation}).
The expansion @code{$@{var:}@var{length}@code{[:}@var{offset}@code{]@}},
The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
which expands to the substring of @code{var}'s value of length
@var{length}, optionally beginning at @var{offset}, is present
(@pxref{Shell Parameter Expansion}).
@@ -2155,7 +2159,7 @@ Bash can expand positional parameters beyond @code{$9} using
Bash has process substitution (@pxref{Process Substitution}).
Bash automatically assigns variables that provide information about the
current user (@code{UID} and @code{EUID}), the current host
current user (@code{UID}, @code{EUID}, and @code{GROUPS}), the current host
(@code{HOSTTYPE}, @code{OSTYPE}, @code{MACHTYPE}, and @code{HOSTNAME}),
and the instance of Bash that is running (@code{BASH},
@code{BASH_VERSION}, and @code{BASH_VERSINFO}. @xref{Bash Variables},
@@ -2172,7 +2176,8 @@ Bash functions are permitted to have local variables using the
@code{local} builtin, and thus useful recursive functions may be written.
Variable assignments preceding commands affect only that command, even
builtins and functions. In @code{sh}, all variable assignments
builtins and functions (@pxref{Environment}).
In @code{sh}, all variable assignments
preceding commands are global unless the command is executed from the
file system.
@@ -2249,14 +2254,16 @@ used as shell input, a @samp{-n} option to remove various variable
attributes, and @samp{name=value} arguments to set variable attributes
and values simultaneously.
The Bash @code{cd} and @code{pwd} builtins each take @samp{-L} and
@samp{-P} builtins to switch between logical and physical modes.
The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
each take @samp{-L} and @samp{-P} builtins to switch between logical and
physical modes.
The Bash @code{type} builtin is more extensive and gives more information
about the names it finds.
about the names it finds (@pxref{Bash Builtins}).
Bash implements a @code{csh}-like directory stack, and provides the
@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it.
@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
(@pxref{C Shell Builtins}).
Bash also makes the directory stack visible as the value of the
@code{DIRSTACK} shell variable.
@@ -2304,10 +2311,11 @@ trapping @code{SIGSEGV}. If the shell is started from a process with
function call), the shell misbehaves badly.
@item
In a questionable attempt at security, the @sc{SVR4.2} shell
will alter its real
In a questionable attempt at security, the @sc{SVR4.2} shell,
when invoked without the @samp{-p} option, will alter its real
and effective @sc{UID} and @sc{GID} if they are less than some
threshold value, commonly 100. This can lead to unexpected results.
magic threshold value, commonly 100.
This can lead to unexpected results.
@item
The @sc{SVR4.2} shell does not allow users to trap @code{SIGALRM} or
@@ -2330,7 +2338,7 @@ with a @samp{-}.
@item
The @sc{SVR4.2} shell exits a script if any builtin fails; Bash exits
a script only if one of the @sc{POSIX.2} special builtins fails, and
only for certain failures, as enumerated in the @code{POSIX.2} standard.
only for certain failures, as enumerated in the @sc{POSIX.2} standard.
@item
The @sc{SVR4.2} shell behaves differently when invoked as @code{jsh}
@@ -2454,12 +2462,12 @@ arguments, exchanges the top two directories.
@table @code
@item +@var{N}
Brings the @var{N}th directory (counting from the left of the
list printed by @code{dirs}) to the top of the list by rotating
the stack.
list printed by @code{dirs}, starting with zero) to the top of
the list by rotating the stack.
@item -@var{N}
Brings the @var{N}th directory (counting from the right of the
list printed by @code{dirs}) to the top of the list by rotating
the stack.
list printed by @code{dirs}, starting with zero) to the top of
the list by rotating the stack.
@item -n
Suppresses the normal change of directory when adding directories
to the stack, so that only the stack is manipulated.
@@ -2644,8 +2652,9 @@ The @var{commands} are executed after each selection until a
point the @code{select} command completes.
Bash also has adopted command timing from the Korn shell. If the
@code{time} reserved word precedes a pipeline or simple command,
timing statistics for the pipeline are displayed when it completes.
@code{time} reserved word precedes a pipeline, which may consist
of a single command, timing statistics for the pipeline are displayed
when it completes.
The statistics currently consist of elapsed (wall-clock) time and
user and system time consumed by the command's execution.
@@ -2751,11 +2760,6 @@ not arrive.
@item LINENO
The line number in the script or shell function currently executing.
@item ENV
If this variable is set when Bash is invoked to execute a shell
script, its value is expanded and used as the name of a startup file
to read before executing the script. @xref{Bash Startup Files}.
@item FCEDIT
The editor used as a default by the @code{fc} builtin command.
@@ -2992,12 +2996,12 @@ in the script. If no commands are executed, the exit status is 0.
@section Bash Startup Files
@cindex startup files
This section describs how bash executes its startup files.
If any of the files exist but cannot be read, bash reports an error.
This section describs how Bash executes its startup files.
If any of the files exist but cannot be read, Bash reports an error.
Tildes are expanded in file names as described above under
Tilde Expansion (@pxref{Tilde Expansion}).
When Bash is invoked as a login shell, it first reads and
When Bash is invoked as an interactive login shell, it first reads and
executes commands from the file @file{/etc/profile}, if that file exists.
After reading that file, it looks for @file{~/.bash_profile},
@file{~/.bash_login}, and @file{~/.profile}, in that order, and reads
@@ -3059,7 +3063,7 @@ for startup files.
In this mode, the @code{ENV} variable is expanded and commands are read
and executed from the file whose name is the expanded value.
No other startup files are read.
This is done by both interactive and non-interactive shells.
This is done by interactive shells only.
Bash attempts to determine when it is being run by the remote shell
daemon, usually @code{rshd}. If Bash determines it is being run by
@@ -3093,6 +3097,16 @@ else
fi
@end example
Alternatively, you may test the value of the @samp{-} special parameter.
It contains @code{i} when the shell is interactive. For example:
@example
case "$-" in
*i*) echo This shell is interactive ;;
*) echo This shell is not interactive ;;
esac
@end example
@node Bash Builtins
@section Bash Builtin Commands
@@ -3173,9 +3187,9 @@ Remove any current binding for @var{keyseq}
@example
builtin [@var{shell-builtin} [@var{args}]]
@end example
Run a shell builtin. This is useful when you wish to rename a
shell builtin to be a function, but need the functionality of the
builtin within the function itself.
Run a shell builtin. This is useful when you wish to define a
shell function with the same name as a shell builtin, but need the
functionality of the builtin within the function itself.
@item command
@btindex command
@@ -3423,7 +3437,7 @@ The errors checked for are transposed characters,
a missing character, and a character too many.
If a correction is found, the corrected path is printed,
and the command proceeds.
This option is enabled by default, but is only used by interactive shells.
This option is only used by interactive shells.
@item checkhash
If this is set, Bash checks that a command found in the hash
@@ -3470,7 +3484,8 @@ the Readline editing buffer, allowing further modification.
@item hostcomplete
If set, and Readline is being used, Bash will attempt to perform
hostname completion when a word beginning with @samp{@@} is being
completed (@pxref{Commands For Completion}).
completed (@pxref{Commands For Completion}). This option is enabled
by default.
@item interactive_comments
Allow a word beginning with @samp{#}
@@ -3718,7 +3733,7 @@ same as @code{-x}.
@item -p
Turn on privileged mode.
In this mode, the @code{$ENV}
In this mode, the @code{$BASH_ENV}
file is not processed, and shell functions
are not inherited from the environment. This is enabled automatically
on startup if the effective user (group) id is not equal to the real
@@ -3962,6 +3977,11 @@ do not normally treat them specially.
@vtable @code
@item BASH_ENV
If this variable is set when Bash is invoked to execute a shell
script, its value is expanded and used as the name of a startup file
to read before executing the script. @xref{Bash Startup Files}.
@item TIMEFORMAT
The value of this parameter is used as a format string specifying
how the timing information for pipelines prefixed with the @code{time}
@@ -4002,7 +4022,9 @@ the form @var{MM}m@var{SS}.@var{FF}s.
The value of @var{p} determines whether or not the fraction is included.
If this variable is not set, bash acts as if it had the value
@example
@code{$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'}.
@end example
If the value is null, no timing information is displayed.
A trailing newline is added when the format string is displayed.
@@ -4086,6 +4108,10 @@ The numeric real user id of the current user.
@item EUID
The numeric effective user id of the current user.
@item GROUPS
An array variable containing the list of groups of which the current
user is a member.
@item PPID
The process id of the shell's parent process.
@@ -4184,7 +4210,7 @@ The value of @code{MACHTYPE}.
@item SHLVL
Incremented by one each time a new instance of Bash is started. This is
intended to be an account of how deeply your Bash shells are nested.
intended to be a count of how deeply your Bash shells are nested.
@item OPTERR
If set to the value 1, Bash displays error messages
@@ -4198,9 +4224,13 @@ selected with a variable starting with @code{LC_}.
This variable overrides the value of @code{LANG} and any other
@code{LC_} variable specifying a locale category.
@item LC_COLLATE
This variable determines the collation order used when sorting the
results of filename expansion (@pxref{Filename Expansion}).
@item LC_MESSAGES
This variable determines the locale used to translate double-quoted
strings preceded by a @samp{$}.
strings preceded by a @samp{$} (@pxref{Locale Translation}).
@item IGNOREEOF
Controls the action of the shell on receipt of an @code{EOF} character
@@ -4608,14 +4638,6 @@ the POSIX.2 standard, and include things like passing incorrect options,
redirection errors, variable assignment errors for assignments preceding
the command name, and so on.
@ignore
@item
The environment passed to executed commands is not sorted. Neither is
the output of @code{set}. This is not strictly Posix.2 behavior, but
@code{sh} does it this way. @code{ksh} does not. It's not necessary to
sort the environment; no program should rely on it being sorted.
@end ignore
@item
If the @code{cd} builtin finds a directory to change to
using @code{$CDPATH}, the
@@ -4641,6 +4663,10 @@ Process substitution is not available.
Assignment statements preceding @sc{POSIX.2} @code{special} builtins
persist in the shell environment after the builtin completes.
@item
The @code{export} and @code{readonly} builtin commands display their
output in the format required by @sc{POSIX.2}.
@end enumerate
There is other @sc{POSIX.2} behavior that Bash does not implement.
@@ -4826,9 +4852,10 @@ kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec}
kill -l [@var{sigspec}]
@end example
Send a signal specified by @var{sigspec} or @var{signum} to the process
named by @var{jobspec}. @var{sigspec} is either a signal name such as
@code{SIGINT} or a signal number; @var{signum} is a signal number. If
@var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
named by @var{jobspec}.
@var{sigspec} is either a signal name such as @code{SIGINT} (with or without
the @code{SIG} prefix) or a signal number; @var{signum} is a signal number.
If @var{sigspec} and @var{signum} are not present, @code{SIGTERM} is used.
The @samp{-l} option lists the signal names, or the signal name
corresponding to @var{sigspec}.
@@ -4878,8 +4905,8 @@ supplied process @sc{ID}s.
This variable controls how the shell interacts with the user and
job control. If this variable exists then single word simple
commands without redirects are treated as candidates for resumption
of an existing job. There is no ambiguity allowed; if you have
more than one job beginning with the string that you have typed, then
of an existing job. There is no ambiguity allowed; if there is
more than one job beginning with the string typed, then
the most recently accessed job will be selected.
The name of a stopped job, in this context, is the command line
used to start it. If this variable is set to the value @samp{exact},
@@ -4912,7 +4939,7 @@ version of Unix (and, someday, @sc{GNU}). Other independent ports exist for
@sc{OS/2}, Windows 95, and Windows @sc{NT}.
@menu
* Basic Installation:: Generic installation instructions.
* Basic Installation:: Installation instructions.
* Compilers and Options:: How to set special options for various
systems.
@@ -4941,7 +4968,7 @@ version of Unix (and, someday, @sc{GNU}). Other independent ports exist for
@cindex Bash installation
@cindex Bash configuration
These are generic installation instructions for Bash.
These are installation instructions for Bash.
The @code{configure} shell script attempts to guess correct
values for various system-dependent variables used during
@@ -4969,8 +4996,17 @@ The file @file{configure.in} is used to create @code{configure}
by a program called Autoconf. You only need
@file{configure.in} if you want to change it or regenerate
@code{configure} using a newer version of Autoconf. If
you do this, make sure you are using Autoconf version 2.9 or
newer.
you do this, make sure you are using Autoconf version 2.10 or
newer.
If you need to change @file{configure.in} or regenerate
@code{configure}, you will need to create two files:
@file{_distribution} and @file{_patchlevel}. @file{_distribution}
should contain the major and minor version numbers of the Bash
distribution, for example @samp{2.01}. @file{_patchlevel} should
contain the patch level of the Bash distribution, @samp{0} for
example. The script @file{support/mkconffiles} has been provided
to automate the creation of these files.
The simplest way to compile Bash is:
@@ -5153,6 +5189,19 @@ Here is a complete list of the @samp{--enable-} and
@samp{--with-} options that the Bash @code{configure} recognizes.
@table @code
@item --with-afs
Define if you are using the Andrew File System from Transarc.
@item --with-curses
Use the curses library instead of the termcap library. This should
be supplied if your system has an inadequate or incomplete termcap
database.
@item --with-glibc-malloc
Use the @sc{GNU} libc version of @code{malloc} in
@file{lib/malloc/gmalloc.c}. This is somewhat slower than the
default @code{malloc}, but wastes considerably less space.
@item --with-gnu-malloc
Use the @sc{GNU} version of
@code{malloc} in @file{lib/malloc/malloc.c}. This is not the same
@@ -5160,15 +5209,8 @@ Use the @sc{GNU} version of
derived from the 4.2 @sc{BSD} @code{malloc}. This @code{malloc} is
very fast, but wastes a lot of space. This option is enabled by
default. The @file{NOTES} file contains a list of systems for
which this should be turned off.
@item --with-glibc-malloc
Use the @sc{GNU} libc version of @code{malloc} in
@file{lib/malloc/gmalloc.c}. This is somewhat slower than the
default @code{malloc}, but wastes considerably less space.
@item --with-afs
Define if you are using the Andrew File System from Transarc.
which this should be turned off, and @code{configure} disables this
option automatically for a number of systems.
@item --with-purify
Define this to use the Purify memory allocation checker from Pure
@@ -5190,32 +5232,48 @@ enabled by default, unless the operating system does not provide the
necessary support.
@table @code
@item --enable-job-control
This enables job control features, if the @sc{OS} supports them.
@item --enable-alias
Allow alias expansion and include the @code{alias} and @code{unalias}
builtins.
@item --enable-readline
Include support for command-line editing and history with the Bash
version of the Readline library.
@item --enable-history
Include command history and the @code{fc} and @code{history}
builtin commands.
@item --enable-array-variables
Include support for one-dimensional array shell variables.
@item --enable-bang-history
Include support for @code{csh}-like history substitution.
@item --enable-brace-expansion
Include @code{csh}-like brace expansion
( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
@item --enable-command-timing
Include support for recognizing @code{time} as a reserved word and for
displaying timing statistics for the pipeline following @code{time}. This
allows pipelines as well as shell builtins and functions to be timed.
@item --enable-directory-stack
Include support for a @code{csh}-like directory stack and the
@code{pushd}, @code{popd}, and @code{dirs} builtins.
@item --enable-restricted
Include support for a @dfn{restricted shell}. If this is enabled, Bash,
when called as @code{rbash}, enters a restricted mode. See
@ref{The Restricted Shell}, for a description of restricted mode.
@item --enable-disabled-builtins
Allow builtin commands to be invoked via @samp{builtin xxx}
even after @code{xxx} has been disabled using @samp{enable -n xxx}.
See @ref{Bash Builtins}, for details of the @code{builtin} and
@code{enable} builtin commands.
@item --enable-dparen-arithmetic
Include support for the @code{ksh} @code{((@dots{}))} command.
@item --enable-help-builtin
Include the @code{help} builtin, which displays help on shell builtins and
variables.
@item --enable-history
Include command history and the @code{fc} and @code{history}
builtin commands.
@item --enable-job-control
This enables job control features, if the @sc{OS} supports them.
@item --enable-process-substitution
This enables process substitution (@pxref{Process Substitution}) if
@@ -5226,35 +5284,19 @@ Turn on the interpretation of a number of backslash-escaped characters
in the @code{$PS1}, @code{$PS2}, @code{$PS3}, and @code{$PS4} prompt
strings.
@item --enable-readline
Include support for command-line editing and history with the Bash
version of the Readline library.
@item --enable-restricted
Include support for a @dfn{restricted shell}. If this is enabled, Bash,
when called as @code{rbash}, enters a restricted mode. See
@ref{The Restricted Shell}, for a description of restricted mode.
@item --enable-select
Include the @code{ksh} @code{select} builtin, which allows the
generation of simple menus.
@item --enable-help-builtin
Include the @code{help} builtin, which displays help on shell builtins and
variables.
@item --enable-array-variables
Include support for one-dimensional array shell variables.
@item --enable-dparen-arithmetic
Include support for the @code{ksh} @code{((@dots{}))} command.
@item --enable-brace-expansion
Include @code{csh}-like brace expansion
( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
@item --enable-disabled-builtins
Allow builtin commands to be invoked via @samp{builtin xxx}
even after @code{xxx} has been disabled using @samp{enable -n xxx}.
See @ref{Bash Builtins}, for details of the @code{builtin} and
@code{enable} builtin commands.
@item --enable-command-timing
Include support for recognizing @code{time} as a reserved word and for
displaying timing statistics for the pipeline following @code{time}. This
allows pipelines as well as shell builtins and functions to be timed.
@item --enable-usg-echo-default
Make the @code{echo} builtin expand backslash-escaped characters by default,
without requiring the @samp{-e} option. This makes the Bash @code{echo}
@@ -5280,7 +5322,7 @@ version of Bash that you have.
Once you have determined that a bug actually exists, use the
@code{bashbug} command to submit a bug report.
If you have a fix, you are welcome to mail that as well!
If you have a fix, you are encouraged to mail that as well!
Suggestions and `philosophical' bug reports may be mailed
to @code{bug-bash@@prep.ai.MIT.Edu} or posted to the Usenet
newsgroup @code{gnu.bash.bug}.