Imported from ../bash-2.0.tar.gz.
diff --git a/doc/FAQ b/doc/FAQ
new file mode 100644
index 0000000..2723f8f
--- /dev/null
+++ b/doc/FAQ
@@ -0,0 +1,1098 @@
+This is the Bash FAQ, version 2.1, for Bash version 2.0.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://slc2.ins.cwru.edu/pub/bash/FAQ
+
+----------
+Contents:
+
+Section A:  The Basics
+
+1) What is it?
+2) What's the latest version?
+3) Where can I get it?
+4) On what machines will bash run?
+5) How can I build bash with gcc?
+6) How can I make bash my login shell?
+7) I just changed my login shell to bash, and now I can't FTP into my
+   machine.  Why not?
+8) What's the `POSIX 1003.2 standard'?
+9) What is the bash `posix mode'?
+
+Section B:  The latest version
+
+10) What's new in version 2.0?
+11) Are there any user-visible incompatibilities between bash-2.0 and
+    bash-1.14.7?
+
+Section C:  Differences from other Unix shells
+
+12) How does bash differ from sh, the Bourne shell?
+13) How does bash differ from the Korn shell, version ksh88?
+14) Which new features in ksh-93 are not in bash, and which are?
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+15) Why does bash run a different version of `command' than
+    `which command' says it will?
+16) Why doesn't bash treat brace expansions exactly like csh?
+17) Why doesn't bash have csh variable modifiers?
+18) How can I make my csh aliases work when I convert to bash?
+19) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+20) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+Section E:  How can I get bash to do certain things, and why does bash do
+            things the way it does?
+
+21) Why is the bash builtin `test' slightly different from /bin/test?
+22) Why does bash sometimes say `Broken pipe'?
+23) How can I get bash to read and display eight-bit characters?
+24) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+25) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+26) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+27) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+28) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+29) Why doesn't a while or for loop get suspended when I type ^Z?
+30) How can I make the bash `time' reserved word print timing output that
+    looks like the output from my system's /usr/bin/time?
+
+Section F:  Things to watch out for on certain Unix versions
+
+31) Why can't I use command line editing in my `cmdtool'?
+32) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+33) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+34) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+35) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+
+Section G:  Where do I go from here?
+
+36) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+37) What kind of bash documentation is there?
+38) What's coming in future versions?
+39) What's on the bash `wish list'?
+40) When will the next release appear?
+
+----------
+Section A:  The Basics
+
+1)  What is it?
+
+Bash is a Unix command interpreter (shell).  It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming.  Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion.  Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation.  The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+2)  What's the latest version?
+
+The latest version is 2.0, first made available on December 23, 1996.
+
+3)  Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, prep.ai.mit.edu, and its mirrors.  The
+latest version is also available for FTP from slc2.ins.cwru.edu,
+the maintainer's machine.  The following URLs tell how to get
+version 2.0:
+
+ftp://prep.ai.mit.edu/pub/gnu/bash-2.0.tar.gz
+ftp://slc2.ins.cwru.edu/pub/dist/bash-2.0.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://prep.ai.mit.edu/pub/gnu/bash-doc-2.0.tar.gz
+ftp://slc2.ins.cwru.edu/pub/dist/bash-doc-2.0.tar.gz
+
+4)  On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX.  All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'.  The build process
+will attempt to discover the version of UNIX you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+5) How can I build bash with gcc? 
+
+Bash configures to use gcc by default if it is available.  Read the
+file INSTALL in the distribution for more information.
+
+6)  How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell.  Other
+systems use `passwd -s'.  If one of these works for you, that's all
+you need.  Note that many systems require the full pathname to a shell
+to appear in /etc/shells before you can make it your login shell.  For
+this, you may need the assistance of your friendly local system
+administrator. 
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks.  The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+	if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file.  If you must put the command in ~/.cshrc, use something
+like
+
+	if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.  First, add
+a line similar to the above to ~/.profile:
+
+	[ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+
+Next, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
+is the file bash tries to read initialization commands from when it is
+invoked as a login shell.
+
+7) I just changed my login shell to bash, and now I can't FTP into my
+   machine.  Why not?
+
+You must add the full pathname to bash to the file /etc/shells.  As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell. 
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP. 
+
+8)  What's the `POSIX 1003.2 standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX.  There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management.  Each area of standardization is
+assigned to a working group in the 1003 series. 
+
+The POSIX Shell and Utilities standard has been developed by IEEE
+Working Group 1003.2 (POSIX.2).  It concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs.  An initial version of the
+standard has been approved and published by the IEEE, and work is
+currently underway to update it. 
+
+Bash is concerned with the aspects of the shell's behavior
+defined by POSIX.2.  The shell command language has of course
+been standardized, including the basic flow control and program
+execution constructs, I/O redirection and pipelining, argument
+handling, variable expansion, and quoting. 
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'.  Other utilities appear in the sections of POSIX.2 not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'. 
+POSIX.2 also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing.  Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+9)  What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX.2 shell
+specification, there are areas where the bash default behavior
+differs from that spec.  The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely. 
+
+Posix mode is entered by starting bash with the --posix option or
+executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file CWRU/POSIX.NOTES in the bash
+distribution.  They are also listed in a section in the Bash
+Reference Manual.
+
+Section B:  The latest version
+
+10) What's new in version 2.0?
+
+This version contains extensive changes and new features.  Here's a
+short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+	shell functions
+one-dimensional arrays with a new compound assignment statement,
+        appropriate expansion constructs and modifications to some
+	of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+	string translation
+new expansions to do substring extraction, pattern replacement, and
+	indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+	       MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+	(e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+	visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:	
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+	(for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+11) Are there any user-visible incompatibilities between bash-2.0 and
+    bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 2.0.
+They are detailed in the file COMPAT in the bash-2.0 distribution.
+
+Section C:  Differences from other Unix shells
+
+12) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell.  The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+	long invocation options
+	`!' reserved word to invert pipeline return value
+	`time' reserved word to time pipelines and shell builtins
+	the `function' reserved word
+	the select compound command and reserved word
+	new $'...' and $"..." quoting
+	the $(...) form of command substitution
+	the ${#param} parameter value length operator
+	the ${!param} indirect parameter expansion operator
+	the ${param:length[:offset]} parameter substring operator
+	the ${param/pat[/string]} parameter pattern substitution operator
+	expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+	expansion of positional parameters beyond $9 with ${num}
+	variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+		   TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+		   LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+		   ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+		   HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE,
+		   PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+		   SHELLOPTS, OPTERR, HOSTFILE, TMOUT, histchars, auto_resume
+	DEBUG trap
+	variable arrays with new compound assignment syntax
+	redirections: <>, &>, >|
+	prompt string special char translation and variable expansion
+	auto-export of modified values of variables in initial environment
+	command search finds functions before builtins
+	bash return builtin will exit a file sourced with `.'
+	builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -p.
+		  export -n/-f/-p/name=value, pwd -L/-P, read -e/-p/-a,
+		  readonly -a/-f/name=value, trap -l, set +o,
+		  set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+		  unset -f/-v, ulimit -m/-p/-u,
+		  type -a/-p/-t, suspend -f, kill -n,
+		  test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+	bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+	bash restricted shell mode is more extensive
+	bash allows functions and variables with the same name
+	brace expansion
+	tilde expansion
+	arithmetic expansion with $((...)) and `let' builtin
+	process substitution
+	aliases and alias/unalias builtins
+	local variables in functions and `local' builtin
+	readline and command-line editing
+	command history and history/fc builtins
+	csh-like history expansion
+	other new bash builtins: bind, command, builtin, declare/typeset,
+				 dirs, enable, fc, help, history, logout,
+				 popd, pushd, disown, shopt
+	exported functions
+	filename generation when using output redirection (command >a*)
+	variable assignments preceding commands affect only that command,
+		even for builtins and functions
+	posix mode
+
+Things sh has that bash does not:
+	uses variable SHACCT to do shell accounting
+	includes `stop' builtin (bash can use alias stop='kill -s STOP')
+	`newgrp' builtin
+	turns on job control if called as `jsh'
+	ulimit attempts to set both soft & hard limits if -S/-H not given
+	$TIMEOUT (like bash $TMOUT)
+	`^' is a synonym for `|'
+	new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+	redirection to/from compound commands causes sh to create a subshell
+	bash does not allow unbalanced quotes; sh silently inserts them at EOF
+	bash does not mess with signal 11
+	sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+	bash splits only the results of expansions on IFS, using POSIX.2
+		field splitting rules; sh splits all words on IFS
+	sh does not allow MAILCHECK to be unset (?)
+	sh does not allow traps on SIGALRM or SIGCHLD
+	bash allows multiple option arguments when invoked (e.g. -x -v);
+		sh allows only a single option argument (`sh -x -v' attempts
+		to open a file named `-v', and, on SunOS 4.1.4, dumps core)
+	sh exits a script if any builtin fails; bash exits only if one of
+		the POSIX.2 `special' builtins fails
+
+13)  How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+	long invocation options
+	`!' reserved word
+	posix mode and posix conformance
+	command hashing
+	tilde expansion for assignment statements that look like $PATH
+	process substitution with named pipes if /dev/fd is not available
+	the ${!param} indirect parameter expansion operator
+	the ${param:length[:offset]} parameter substring operator
+	the ${param/pat[/string]} parameter pattern substitution operator
+	variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+		   TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+		   HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+		   IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+		   PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+		   histchars, auto_resume
+	prompt expansion with backslash escapes and command substitution
+	redirection: &> (stdout and stderr)
+	more extensive and extensible editing and completion
+	builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+		  exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+		  jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+		  read -e/-p/-a, readonly -a/-n/-f/-p, set -o braceexpand/
+		  -o histexpand/-o interactive-comments/-o notify/-o physical/
+		  -o posix/-o hashall/-o onecmd/-h/-B/-C/-b/-H/-P, set +o,
+		  suspend, trap -l, type, typeset -a/-F/-p, ulimit -u,
+		  umask -S, alias -p, shopt, disown
+	`!' csh-style history expansion
+
+Things ksh88 has or uses that bash does not:
+	new version of test: [[...]]
+	tracked aliases
+	$(<file)	
+	variables: ERRNO, FPATH, COLUMNS, LINES, EDITOR, VISUAL
+	extended pattern matching with egrep-style pattern lists
+	co-processes (|&, >&p, <&p)
+	weirdly-scoped functions
+	typeset +f to list all function names without definitions
+	text of command history kept in a file, not memory
+	builtins: alias -x, cd old new, fc -e -, newgrp, print,
+		  read -p/-s/-u/var?prompt, set -A/-o gmacs/
+		  -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+		  typeset -H/-L/-R/-A/-ft/-fu/-fx/-l/-u/-t, whence
+
+Implementation differences:
+	ksh runs last command of a pipeline in parent shell context
+	ksh ulimit sets hard and soft limits by default
+	bash has brace expansion by default (ksh88 compile-time option)
+	bash has fixed startup file for all interactive shells; ksh reads $ENV
+	bash has exported functions
+	bash command search finds functions before builtins
+
+14)  Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-2.0:
+	associative arrays
+	floating point arithmetic
+	++, --, comma arithmetic operators
+	math library functions
+	${!name[sub]} name of subscript for associative array
+	${!prefix*} and {!prefix@} variable name prefix expansions
+	`.' is allowed in variable names to create a hierarchical namespace
+	more extensive compound assignment syntax
+	discipline functions
+	`sleep' and `getconf' builtins (bash has loadable versions)
+	typeset -n and `nameref' variables
+	KEYBD trap
+	variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, HISTEDIT,
+		   .sh.version, .sh.name, .sh.subscript, .sh.value
+	backreferences in pattern matching
+	print -f and printf (bash has loadable versions)
+	`fc' has been renamed to `hist'
+	read -t/-d
+	`.' can execute shell functions
+	ENV processed only for interactive shells
+
+New things in ksh-93 present in bash-2.0:
+	?: arithmetic operator
+	expansions: ${!param}, ${param:len[:offset]}, ${param/pat[/str]}
+	compound array assignment
+	the `!' reserved word
+	loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+	`command', `builtin', `disown' builtins
+	new $'...' and $"..." quoting
+	FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+	set -o notify/-C
+	changes to kill builtin
+	read -A (bash uses read -a)
+	trap -p
+	exec -c/-a
+	`.' restores the positional parameters when it completes
+	POSIX.2 `test'
+	umask -S
+	unalias -a
+	command and arithmetic substitution performed on PS1, PS4, and ENV
+	command name completion
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+15) Why does bash run a different version of `command' than
+    `which command' says it will?
+
+`which' is actually a csh script that assumes you're running csh. 
+It reads the csh startup files from your home directory and uses
+those to determine which `command' will be invoked.  Since bash
+doesn't use any of those startup files, there's a good chance
+that your bash environment differs from your csh environment. 
+
+16) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded.  Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code.  This affords the greatest degree of sh
+compatibility. 
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
+
+17) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+        Remove smallest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the suffix matched by the pattern deleted.
+
+        x=file.c
+        echo ${x%.c}.o
+        -->file.o
+
+${parameter%%word}
+
+        Remove largest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the suffix matched by the pattern deleted.
+
+        x=posix/src/std
+        echo ${x%%/*}
+        -->posix
+
+${parameter#word}
+        Remove smallest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the prefix matched by the pattern deleted.
+
+        x=$HOME/src/cmd
+        echo ${x#$HOME}
+        -->/src/cmd
+
+${parameter##word}
+        Remove largest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the prefix matched by the pattern deleted.
+
+        x=/one/two/three
+        echo ${x##*/}
+        -->three
+
+
+Given
+	a=/a/b/c/d
+	b=b.xxx
+
+	csh			bash		result
+	---			----		------
+	$a:h			${a%/*}		   /a/b/c
+	$a:t			${a##*/}	   d
+	$b:r			${b%.*}		   b
+	$b:e			${b##*.}	   xxx
+
+
+18) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does. 
+The details can be found in the documentation.  We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/alias-conv.sh.  Here is
+how you use it:
+  
+Start csh in the normal way for you.  (e.g., `csh')
+  
+Pipe the output of `alias' through `alias-conv.sh', saving the
+results into `bash_aliases':
+  
+	alias | alias-conv.sh >bash_aliases
+  
+Edit `bash_aliases', carefully reading through any created
+functions.  You will need to change the names of some csh specific
+variables to the bash equivalents.  The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1.  You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+  
+	alias cd 'cd \!*; echo $cwd'
+  
+is converted to the bash function:
+
+	cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+  
+	cd () { command cd "$@"; echo "$PWD" ; }
+  
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent.  This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment. 
+
+19) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+
+Use
+	command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+20) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 that do not have direct bash equivalents.
+Most, however, can be emulated with very little trouble.
+
+ksh-88 feature		Bash equivalent
+--------------		---------------
+[[...]]			can usually use [...]; minor differences (no
+			pattern matching, for one)
+compiled-in aliases	set up aliases in .bashrc; some ksh aliases are
+			bash builtins (hash, history, type)
+$(<file)		$(cat file)
+extended patterns	no good substitute
+coprocesses		named pipe pairs (one for read, one for write)
+typeset +f		declare -F
+cd, print, whence	function substitutes in examples/functions/kshenv
+autoloaded functions	examples/functions/autoload is the same as typeset -fu
+read var?prompt		read -p prompt var
+
+Section E:  How can I get bash to do certain things, and why does bash do
+	    things the way it does?
+
+21) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+   
+Here is the set of rules for processing test arguments.
+  
+    0 Args: False
+    1 Arg:  True iff argument is not null.
+    2 Args: If first arg is !, True iff second argument is null.
+	    If first argument is unary, then true if unary test is true
+	    Otherwise error.
+    3 Args: If second argument is a binary operator, do binary test of $1 $3
+	    If first argument is !, negate two argument test of $2 $3
+	    If first argument is `(' and third argument is `)', do the
+	    one-argument test of the second argument.
+	    Otherwise error.
+    4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+	    Otherwise unspecified
+    5 or more Args: unspecified.  (Historical shells would use their
+    current algorithm).
+   
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+   
+As you can see, the test becomes (not (x or x)), which is false.
+
+22) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal.  Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it. 
+For example, in:
+  
+      ps -aux | head
+  
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader.  In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE. 
+
+23) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits.  For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input.  Use `stty' to do this:
+
+	stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+	stty pass8
+
+You may also need
+
+	stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters.  You use readline variables to do
+this.  These variables can be set in your .inputrc or using the bash
+`bind' builtin.  Here's an example using `bind':
+
+	bash$ bind 'set convert-meta off'
+	bash$ bind 'set meta-flag on'
+	bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+24) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist.  The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name.  The
+`builtin' builtin executes the builtin command given as its first
+argument directly. 
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+	cd()
+	{
+		builtin cd "$@" && xtitle "$HOST: $PWD"
+	}
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient. 
+
+25) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen.  The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen. 
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space. 
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence. 
+
+26) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+
+Bash-2.0 supports this directly.  You can use 
+
+	${!var}
+
+For example, the following sequence of commands will echo `z':
+
+	var1=var2
+	var2=z
+	echo ${!var1}
+
+For sh compatibility, use the `eval' builtin.  The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on. 
+
+For example, this expression prints the value of the last positional
+parameter:
+
+	eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed.  In bash-2.0,
+
+	echo ${!#}
+
+does the same thing.
+
+27) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes. 
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline.  A subprocess cannot affect its
+parent's environment.  When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell.  When the subshell exits, the value of the variable
+is lost. 
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command.  The output can then be assigned to a
+variable:
+
+	grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+	ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments.  If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+	/usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+	OIFS="$IFS"
+	IFS=.
+	set -- $(/usr/local/bin/ipaddr)
+	IFS="$OIFS"
+	A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters.  If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+28) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modelled after the 9th Edition
+Research Unix version of `echo'.  It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation.  The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them. 
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default.  Run
+configure with the --enable-usg-echo-default option to turn this
+on.  Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+29) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix.  The only
+thing that can be suspended is the process group.  This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies.  These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+30) How can I make the bash `time' reserved word print timing output that
+    looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3).  The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+	TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+	TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+	TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+	TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+	TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+Section F:  Things to watch out for on certain Unix versions
+
+31) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input.  When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves.  As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry.  For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution. 
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool.  If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+32) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include. 
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash.  This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb. 
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+33) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server.  When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null. 
+So far, so good. 
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns.  The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory. 
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed.  You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+34) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2.  You can change this
+character to whatever you want using `stty'.  For example, to
+change the line kill character to control-u, type
+
+	stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+35) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+
+The actual command in question is something like
+
+	< file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error.  Redirections may only precede `simple
+commands'.  A subshell construct such as the above is one of the shell's
+`compound commands'.  A redirection may only follow a compound command.
+
+The file CWRU/sh-redir-hack in the bash-2.0 distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct.  It will not apply with `patch'; you must
+modify parse.y by hand.  Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK.  This introduces a large
+number of reduce/reduce conflicts into the shell grammar. 
+
+Section G:  Where do I go from here?
+
+36) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+
+Use the `bashbug' script to report bugs.  It is built and
+installed at the same time as bash.  It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment. 
+
+`bashbug' sends its reports to bug-bash@prep.ai.mit.edu, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug.  Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@prep.ai.mit.edu.
+
+37) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution.  It should
+contain at least the following files:
+
+bash.1		an extensive, thorough Unix-style manual page
+builtins.1	a manual page covering just bash builtin commands
+bashref.texi	a reference manual in GNU info format
+bash.html	an HTML version of the manual page
+bashref.html	an HTML version of the reference manual
+FAQ		this file
+article.ms	text of an article written for The Linux Journal
+readline.3	a man page describing readline
+
+Postscript files created from the above source are available in
+the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+slc2.ins.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
+Shell book.  The title is ``Learning the Bash Shell''.  The ISBN number is
+1-56592-147-X.  Look for it in fine bookstores near you.  This book covers
+bash-1.14, but has an appendix describing some of the new features in
+bash-2.0. 
+
+38) What's coming in future versions?
+
+These are features I plan to include in a future version of bash.
+
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+a bash debugger (an incomplete, untested version is included with bash-2.0)
+
+39) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+Programmable completion a la zsh
+menu completion a la tcsh
+the ksh [[...]] extended test command
+the ksh egrep-style extended pattern matching operators
+associative arrays (not really all that hard)
+breaking some of the shell functionality into embeddable libraries
+better internationalization using GNU `gettext'
+an option to use external files for the long `help' text
+timeouts for the `read' builtin
+the ksh-93 ${!prefix*} and ${!prefix@} operators
+arithmetic ++ and -- prefix and postfix operators
+
+40) When will the next release appear?
+
+The next version will appear sometime in 1997.  Never make predictions.
+
+
+This document is Copyright 1995, 1996 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.