summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2015-01-12 10:57:32 -0500
committerChet Ramey <chet.ramey@case.edu>2015-01-12 10:57:32 -0500
commit02a413f6437fd4c737b4fc29c14ac74b2ab94f95 (patch)
treec4892f7baf58487fa204e970b58c92c527d24740
parent83633b6f047f350faa6da5bfe9a2ffc9267f7be3 (diff)
downloadbash-02a413f6437fd4c737b4fc29c14ac74b2ab94f95.tar.gz
bash-20141226 remove leftover and stray files
-rw-r--r--CWRU/CWRU.chlog~7653
-rw-r--r--CWRU/POSIX.NOTES.old82
-rw-r--r--CWRU/old/set.def.save544
-rw-r--r--CWRU/save/unwind_prot.h.save50
-rw-r--r--builtins/declare.def~721
-rw-r--r--cross-build/cygwin32.cache.old42
-rw-r--r--doc/FAQ.orig1745
-rw-r--r--doc/aosa-bash.pdf.oldbin153472 -> 0 bytes
-rw-r--r--doc/bash.1~10471
-rw-r--r--doc/bashref.texi~8824
-rw-r--r--doc/version.texi~11
-rw-r--r--examples/loadables/Makefile.in.save238
-rw-r--r--lib/readline/doc/Makefile.old76
-rw-r--r--lib/readline/readline.c~1423
-rw-r--r--lib/readline/rlconf.h~81
-rw-r--r--tests/misc/regress/log.orig50
-rw-r--r--tests/misc/regress/shx.orig10
17 files changed, 0 insertions, 32021 deletions
diff --git a/CWRU/CWRU.chlog~ b/CWRU/CWRU.chlog~
deleted file mode 100644
index 573dbdd1..00000000
--- a/CWRU/CWRU.chlog~
+++ /dev/null
@@ -1,7653 +0,0 @@
- 2/14/2011
- ---------
-[bash-4.2 released]
-
- 2/15
- ----
-lib/glob/gmisc.c
- - fix wmatchlen and umatchlen to avoid going past the end of the
- string on an incomplete bracket expression that ends with a
- NUL. Partial fix for bug reported by Clark Wang <dearvoid@gmail.com>
-
- 2/16
- ----
-subst.h
- - new string extract flag value: SX_WORD. Used when calling
- extract_dollar_brace_string to skip over the word in
- ${param op word} from parameter_brace_expand
-
-subst.c
- - change parameter_brace_expand to add SX_WORD to flags passed to
- extract_dollar_brace_string
- - change parameter_brace_expand to use SX_POSIXEXP for all non-posix
- word expansion operators that treat single quotes as special, not
- just % and #
- - change extract_dollar_brace_string to initialize dolbrace_state to
- DOLBRACE_WORD if SX_WORD flag supplied and we shouldn't use
- DOLBRACE_QUOTE. Fixes bug reported by Juergen Daubert <jue@jue.li>
-
-doc/{bash.1,bashref.texi}
- - document the exact expansions here strings undergo
-
- 2/17
- ----
-lib/readline/vi_mode.c
- - make sure that `dd', `cc', and `yy' call vidomove_dispatch from
- rl_domove_read_callback. Fixes bug reported by Clark Wang
- <dearvoid@gmail.com>
-
-lib/readline/callback.c
- - make sure _rl_internal_char_cleanup is called after the
- vi-motion callbacks (rl_vi_domove_callback) in rl_callback_read_char.
- Companion to above fix
-
-doc/{bash.1,bashref.texi}
- - make sure that the text describing the rhs of the == and =~
- operators to [[ states that only the quoted portion of the pattern
- is matched as a string
-
- 2/18
- ----
-lib/glob/gmisc.c
- - better fix for umatchlen/wmatchlen: keep track of the number of
- characters in a bracket expression as the value to increase
- matchlen by if the bracket expression is not well-formed. Fixes
- bug reported by Clark Wang <dearvoid@gmail.com>
-
-subst.c
- - change expand_string_for_rhs so that it sets the W_NOSPLIT2 flag
- in the word flags. We will not perform word splitting or quote
- removal on the result, so we do not want to add quoted nulls if
- we see "" or ''. Fixes bug reported by Mike Frysinger
- <vapier@gentoo.org>
-
- 2/19
- ----
-variables.c
- - new function, int chkexport(name), checks whether variable NAME is
- exported and remakes the export environment if necessary. Returns
- 1 if NAME is exported and 0 if not
- - call chkexport(name) to get tzset to look at the right variable in
- the environment when modifying TZ in sv_tz. Don't call tzset if
- chkexport doesn't indicate that the variable is exported
-
-variables.h
- - new extern declaration for chkexport
-
-
-{parse.y,builtins/printf.def}
- - call sv_tz before calling localtime() when formatting time strings
- in prompt strings or using printf. Fixes bug reported by
- Dennis Williamson <dennistwilliamson@gmail.com>
-
-execute_cmd.c
- - modify fix of 2/9 to add casts when those variables are passed to
- functions; some compilers throw errors instead of warnings. Report
- and fix from Joachim Schmitz <jojo@schmitz-digital.de>
-
-support/shobj-conf
- - add a stanza for nsk on the Tandem from Joachim Schmitz
- <jojo@schmitz-digital.de>
-
-{shell,lib/readline/shell}.c
- - Tandem systems should use getpwnam (getlogin()); for some reason
- they don't do well with using getuid(). Fix from Joachim Schmitz
- <jojo@schmitz-digital.de>
-
- 3/1
- ---
-variables.c
- - make sure that the return value from find_variable is non-null
- before trying to use it in chkexport. Fixes bug reported by
- Evangelos Foutras <foutrelis@gmail.com>
-
- 3/3
- ---
-parse.y
- - when adding $$ to the current token buffer in read_token_word(),
- don't xmalloc a buffer for two characters and then strcpy it, just
- copy the characters directly into the token buffer. Fix from
- Michael Whitten <mfwitten@gmail.com>
-
-execute_cmd.c
- - fix expand_word_unsplit to add the W_NOSPLIT2 flag to the word to
- be expanded, so "" doesn't add CTLNUL. Similar to fix of 2/18 to
- expand_string_for_rhs. Fixes bug reported by Nathanael D. Noblet
- <nathanael@gnat.ca> and Matthias Klose <doko@debian.org>
-
-parse.y
- - fix extended_glob case of read_token_word to allocate an extra
- space in the buffer for the next character read after the extended
- glob specification if it's a CTLESC or CTLNUL. Report and fix from
- Michael Witten <mfwitten@gmail.com>
- - fix shell expansions case of read_token_word to allocate an extra
- space in the buffer for the next character read after the shell
- expansion if it's a CTLESC or CTLNUL. Report and fix from
- Michael Witten <mfwitten@gmail.com>
- - TENTATIVE: fix read_token_word to reduce the amount of buffer space
- required to hold the translated and double-quoted value of $"..."
- strings. Report and fix from Michael Witten <mfwitten@gmail.com>
- - change code around got_character and got_escaped_character labels to
- make sure that we call RESIZE_MALLOCED_BUFFER before adding the
- CTLESC before a CTLESC or CTLNUL, and before adding the character if
- we're not adding a CTLESC. Report and fix from
- Michael Witten <mfwitten@gmail.com>
-
-subst.c
- - new param flags value, PF_ASSIGNRHS, mirrors W_ASSIGNRHS, noting that
- parameter expansion is on rhs of assignment statement. That inhibits
- word splitting
- - change param_expand to call string_list_dollar_at with quoted == 1
- if PF_ASSIGNRHS is set, so it will quote IFS characters in the
- positional parameter before separating them with the first char of
- $IFS. This keeps the rhs from being split inappropriately. Fixes
- bug reported by Andres Perera <andres.p@zoho.com>
-
- 3/4
- ---
-lib/readline/bind.c
- - add a missing free of `names' in rl_function_dumper. Bug report
- and fix from Michael Snyder <msnyder@vmware.com>
-
- 3/5
- ---
-lib/readline/rltty.c
- - change rl_deprep_terminal so it uses fileno (stdin) for the tty fd
- if rl_instream is not set, like rl_prep_terminal
-
- 3/6
- ---
-lib/readline/display.c
- - fix rl_message to use a dynamically-allocated buffer instead of a
- fixed-size buffer of 128 chars for the `local message prompt'. Bug
- report and fix from Micah Cowan <micah@cowan.name>
-
- 3/7
- ---
-jobs.c
- - add sentinel to wait_sigint_handler so it only sets wait_sigint_received
- if waiting_for_child is non-zero; otherwise, it restores the old
- SIGINT handler and sends itself the SIGINT
- - set waiting_for_child around the calls to waitchld that use it to
- synchronously wait for a process
- - change logic that decides whether or not the child process blocked
- or handled SIGINT based on whether or not waitpid returns -1/EINTR
- and the shell receives a SIGINT and the child does not exit. If
- the child later exits due to SIGINT, cancel the assumoption that it
- was handled
- - instead of testing whether or not the child exited due to SIGINT
- when deciding whether the shell should act on a SIGINT it received
- while waiting, test whether or not we think the child caught
- SIGINT. If it did, we let it go (unless the shell has it trapped);
- if it did not catch it, the shell acts on the SIGINT. Fix from
- Linus Torvalds <torvalds@linux-foundation.org>, bug report originally
- from Oleg Nesterov <oleg@redhat.com>
-
- 3/8
- ---
-shell.c
- - initialize no_line_editing to 1 if READLINE is not defined -- we
- can't have line editing without readline
-
- 3/12
- ----
-lib/readline/signals.c
- - add SIGHUP to the set of signals readline handles
-
-lib/readline/doc/rltech.texi
- - document that SIGHUP is now part of the set of signals readline
- handles
-
-lib/readline/input.c
- - if _rl_caught_signal indicates that read() was interrupted by a
- SIGHUP or SIGTERM, return READERR or EOF as appropriate
- - call rl_event_hook, if it's set, if call to read in rl_getc
- returns -1/EINTR. If rl_event_hook doesn't do anything, this
- continues the loop as before. This handles the other fatal
- signals
-
-execute_cmd.c
- - add a couple of QUIT; calls to execute_disk_command and
- execute_simple_command to improve responsiveness to interrupts
- and fatal signals
-
-input.c
- - rearrange getc_with_restart so that the return values from read()
- are handled right
-
-parse.y
- - don't need to set terminate_immediately in yy_stream_get, since
- getc_with_restart checks for terminating signals itself
- - since readline returns READERR on SIGHUP or SIGTERM, don't need
- to set terminate_immediately. Still doesn't handle other
- signals well -- will have to check that some more
-
-bashline.c
- - new function, bash_event_hook, for rl_event_hook. Just checks for
- terminating signals and acts on them using CHECK_TERMSIG.
- - set rl_event_hook to bash_event_hook
-
-builtins/read.def
- - take out setting terminate_immediately; add calls to CHECK_TERMSIG
- after read calls
-
-doc/{bash.1,bashref.texi}
- - move the text describing the effect of negative subscripts used to
- reference indexed array elements to the paragraphs describing
- ${parameter[subscript]}, since that's where they are implemented.
- Pointed out by Christopher F. A. Johnson <cfajohnson@gmail.com>
-
-arrayfunc.[ch],subst.c
- - array_expand_index now takes a new first argument: a SHELL_VAR *
- of the array variable being subscripted. Can be used later to fully
- implement negative subscripts
-
- 3/14
- ----
-lib/glob/glob.c
- - fix mbskipname to not turn the directory entry name into a wide char
- string if the conversion of the pattern to a wide char string fails
- - fix mbskipname to call skipname if either the pattern or the filename
- can't be converted into a wide-char string
-
-lib/glob/xmbsrtowcs.c
- - fix xdupmbstowcs2 to handle return value of 0 from mbsnrtowcs and
- short-circuit with failure in that case. Fixes bug reported by
- Roman Rakus <rrakus@redhat.com>
-
- 3/15
- ----
-bashline.c
- - new variable, bash_filename_quote_characters to store the value
- assigned to rl_filename_quote_characters so it can be restored
- if changed.
- - change bashline_reset and attempt_shell_completion to restore
- rl_filename_quote_characters if not set to default
-
- 3/22
- ----
-lib/glob/glob.c
- - wdequote_pathname falls back to udequote_pathname if xdupmbstowcs
- fails to convert the pathname to a wide-character string
-
-lib/glob/xmbsrtowcs.c
- - xdupmbstowcs2: change to fix problem with leading '\\' (results in
- nms == 0, which causes it to short-circuit with failure right
- away). Fixes bug pointed out by Werner Fink <werner@suse.de>
- - xdupmbstowcs2: compensate for mbsnrtowcs returning 0 by taking the
- next single-byte character and going on
- - xdupmbstowcs2: change memory allocation to increase by WSBUF_INC
- bytes; try to avoid calls to realloc (even if they don't actually
- result in more memory being allocated)
-
- 3/24
- ----
-doc/{bash.1,bashref.texi}
- - slightly modify BASH_SUBSHELL description based on complaint from
- Sam Liddicott <sam@liddicott.com>
-
- 3/25
- ----
-trap.c
- - change free_trap_strings to not call free_trap_string for signals
- that are being ignored, like reset_or_restore_signal_handlers.
- Fixes bug reported by Satoshi Takahashi <blue3waters@gmail.com>
-
- 3/26
- ----
-lib/readline/rltypedefs.h
- - remove old Function/VFunction/CPFunction/CPPFunction typedefs as
- suggested by Tom Tromey <tromey@redhat.com>
-
-lib/readline/rlstdc.h
- - move defines for USE_VARARGS/PREFER_STDARG/PREFER_VARARGS from
- config.h.in to here because declaration of rl_message in
- readline.h uses the defines. This makes it hard for another packages
- to use after the header files are installed, since config.h is not
- one of the installed files. Suggested by Tom Tromey
- <tromey@redhat.com>
-
- 3/27
- ----
-print_cmd.c
- - change indirection_string from a static buffer to a dynamic one
- managed by indirection_level_string(), so we don't end up truncating
- PS4. Suggested by Dennis Williamson <dennistwilliamson@gmail.com>
-
-lib/readline/shell.c
- - change sh_set_lines_and_columns to use static buffers instead of
- allocating the buffers to pass to setenv/putenv
-
-lib/readline/terminal.c
- - change _rl_get_screen_size to not call sh_set_lines_and_columns if
- ignore_env == 0
- - _rl_sigwinch_resize_terminal: new function to just retrieve terminal
- size, ignoring environment
-
-lib/readline/rlprivate.h
- - new external declaration for _rl_sigwinch_resize_terminal() (currently
- unused)
-
-lib/readline/signals.c
- - rl_sigwinch_handler: set _rl_caught_signal to SIGWINCH
- - rl_sigwinch_handler: don't immediately call rl_resize_terminal; just
- leave _rl_caught_signal set for RL_CHECK_SIGNALS to handle
- - _rl_signal_handler: call rl_resize_terminal if sig == SIGWINCH.
- Should fix hang when sending multiple repeated SIGWINCH reported by
- Henning Bekel <h.bekel@googlemail.com>
-
- 3/29
- ----
-lib/sh/snprintf.c
- - include math.h for any defines for isinf/isnan
- - use code from gnulib documentation to implement isinf/isnan if they
- are not defined
-
-configure.in
- - don't check for isinf or isnan; c99 says they're macros anyway
-
-config.h.in
- - remove defines for ISINF_IN_LIBC and ISNAN_IN_LIBC, no longer used
- by snprintf.c
-
- 4/2
- ---
-braces.c
- - brace_gobbler: fix to understand double-quoted command substitution,
- since the shell understands unquoted comsubs. Fixes bug reported
- by Michael Whitten <mfwitten@gmail.com>
-
-lib/readline/display.c
- - include <pc.h> on MDOS
- - get and set screen size using DJGPP-specific calls on MSDOS
- - move cursor up clear screen using DJGPP-specific calls
- - don't call tputs on DJGPP; there is no good terminfo support
-
-lib/readline/terminal.c
- - include <pc.h> on MDOS
- - get and set screen size using DJGPP-specific calls on MSDOS
- - use DJGPP-specific initialization on MSDOS, zeroing all the
- _rl_term_* variables
- - don't call tputs on DJGPP; there is no good terminfo support
- DJGPP support from Eli Zaretskii <eliz@gnu.org>
-
- 4/6
- ---
-
-config-top.h
- - change DEFAULT_PATH_VALUE to something more useful and modern
-
- 4/8
- ---
-tests/printf2.sub
- - make sure LC_ALL and LC_CTYPE are set so LANG assignment takes effect.
- Reported by Cedric Arbogast <arbogast.cedric@gmail.com>
-
- 4/11
- ----
-include/chartypes.h
- - fix a couple of dicey defines (though ones that don't cause any
- compiler warnings) in IN_CTYPE_DOMAIN
-
-doc/{bashref.texi,bash.1}
- - add note referring to duplicating file descriptors in sections
- describing redirecting stdout and stderr and appending to stdout
- and stderr. Suggested by Matthew Dinger <mdinger.bugzilla@gmail.com>
-
-pcomplete.c
- - it_init_helptopics: new function to support completing on help topics,
- not just builtins
- - it_helptopics: new programmable completion list of help topics
- - build list of helptopic completions in gen_action_completions on
- demand
-
-pcomplete.h
- - new extern declaration for it_helptopics
-
-builtins/complete.def
- - the `helptopic' action now maps to CA_HELPTOPIC intead of CA_BUILTIN,
- since there are more help topics than just builtins. Suggested by
- Clark Wang <dearvoid@gmail.com>
-
- 4/12
- ----
-print_cmd.c
- - fix print_arith_for_command to add a call to PRINT_DEFERRED_HEREDOCS
- before ending the body of the command, so heredocs get attached to
- the right command instead of to the loop. From gentoo bug 363371
- http://bugs.gentoo.org/show_bug.cgi?id=363371
-
-execute_cmd.c
- - change coproc_pidchk to unset the appropriate shell variables when
- the (currently single) known coproc pid terminates
- - cleanup and new functions to fully support multiple coprocesses when
- and if I decide to go there
-
- 4/13
- ----
-print_cmd.c
- - fix print_group_command to add a call to PRINT_DEFERRED_HEREDOCS
- after call to make_command_string_internal before printing closing
- `}'
- - fix make_command_string_internal to add a call to
- PRINT_DEFERRED_HEREDOCS after recursive call to
- make_command_string_internal in case cm_subshell before printing
- closing `)'
-
- 4/14
- ----
-print_cmd.c
- - change overlapping strcpy in named_function_string to memmove
-
-sig.h
- - UNBLOCK_SIGNAL: convenience define, same as UNBLOCK_CHILD, just
- restores an old signal mask
-
-trap.c
- - set_signal: instead of setting the signal handler to SIG_IGN while
- installing the new trap handler, block the signal and unblock it
- after the new handler is installed. Fixes bug reported by Roman
- Rakus <rrakus@redhat.com>
-
- 4/15
- ----
-doc/{bash.1,bashref.texi}
- - make it clear that enabling monitor mode means that all jobs run in
- separate process groups
-
- 4/18
- ----
-builtins/fc.def
- - update fix of 4/15/2010 to not take saved_command_line_count into
- account when stepping down the history list to make sure that
- last_hist indexes something that is valid. Fixes bug reported by
- <piuma@piumalab.org>
-
- 4/19
- ----
-builtins/fc.def
- - fc_gethnum: make sure the calculation to decide the last history
- entry is exactly the same as fc_builtin. Fixes bug uncovered by
- fix of 4/18 to stop seg fault
-
- 4/22
- ----
-lib/readline/terminal.c
- - change _rl_enable_meta_key to set a flag indicating that it sent the
- enable-meta sequence
- - _rl_disable_meta_key: new function to turn off meta mode after we
- turned it on with _rl_enable_meta_key
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_disable_meta_key
-
-configure.in
- - if not cross-compiling, set CFLAGS_FOR_BUILD from any CFLAGS inherited
- from the environment. Fixes HP/UX build problem reported by
- "Daniel Richard G." <skunk@iSKUNK.ORG>
-
- 4/26
- ----
-config-top.h
- - define MULTIPLE_COPROCS to 0 so the code is still disabled but easy
- to enable via configure option or editing this file
-
- 4/29
- ----
-lib/sh/eaccess.c
- - freebsd provides faccessat, with the same misfeature as their eaccess
- and access implementations (X_OK returns true for uid==0 regardless
- of the actual file permissions), so reorganize code to check the
- file permissions as with eaccess. Report and fix from Johan Hattne
- <johan.hattne@utsouthwestern.edu>
-
- 5/2
- ---
-doc/{bash.1,bashref.texi}
- - add forward reference to `Pattern Matching' from `Pathname
- Expansion', suggested by Greg Wooledge <wooledg@eeg.ccf.org>
-
- 5/5
- ---
-pcomplib.c
- - the bash_completion project now distributes over 200 completions
- for various programs, with no end in sight, so increase the value
- of COMPLETE_HASH_BUCKETS from 32 to 128
-
-pathexp.c
- - quote_string_for_globbing: make sure CTLESC quoting CTLESC is
- translated into \<CTLESC> even if the flags include QGLOB_REGEXP.
- We don't want to process the second CTLESC as a quote character.
- Fixes bug reported by Shawn Bohrer <sbohrer@rgmadvisors.com>
-
- 5/6
- ---
-builtins/printf.def
- - change PRETURN to not call fflush if ferror(stdout) is true
- - if a call to one of the stdio functions or printstr leaves
- ferror(stdout) true, and PRETURN is going to be called, let PRETURN
- print the error message rather than doubling up the messages. Fixes
- problem reported by Roman Rakus <rrakus@redhat.com>
-
- 5/9
- ---
-doc/{bash.1,bashref.texi}
- - add note to the effect that lists inside compound command can be
- terminated by newlines as well as semicolons. Suggested by
- Roman Byshko <rbyshko@gmail.com>
-
- 5/10
- ----
-subst.c
- - remove_quoted_nulls: fix problem that caused it to skip over the
- character after a CTLNUL, which had the effect of skipping every
- other of a series of CTLNULs. Fixes bug reported by
- Marten Wikstrom <marten.wikstrom@keystream.se>
-
- 5/11
- ----
-subst.c
- - extract_process_subst: add SX_COMMAND flag to call to
- extract_delimited_string, since we're expanding the same sort of
- command as command substitution. Fixes bug reported in Ubuntu
- bug 779848
-
- 5/12
- ----
-configure.in
- - set the prefer_shared and prefer_static variables appropriately
- depending on the value of $opt_static_link
-
-aclocal.m4
- - AC_LIB_LINKFLAGS_BODY: change to not prefer shared versions of the
- libraries it's searching for if the prefer_shared variable is "no".
- Fixes problem reported by Cedric Arbogast <arbogast.cedric@gmail.com>
-
- 5/13
- ----
-lib/readline/readline.c
- - _rl_internal_teardown: add call to _rl_disable_meta_key to make the
- meta key active only for the duration of the call to readline()
- - _rl_internal_setup: move call to _rl_enable_meta_key here from
- readline_initialize_everything so the meta key is active only for
- the duration of the call to readline(). Suggestion from Miroslav
- Lichvar <mlichvar@redhat.com>
-
-builtins/help.def
- - help_builtin: change strncmp to strcmp so that `help read' no longer
- matches `readonly'. Suggested by Clark Wang <dearvoid@gmail.com>
-
-config.h.in
- - add define for GLIBC21, checked using jm_GLIBC21 as part of the tests
- for libintl
-
-lib/malloc/malloc.c
- - internal_free: don't use the cached value of memtop when deciding
- whether or not to adjust the break and give memory back to the kernel
- when using the GNU C library, since glibc uses sbrk for its own
- internal purposes. From Debian bug 614815, reported by Samuel
- Thibault <samuel.thibault@gnu.org>
-
-aclocal.m4
- - BASH_STRUCT_WEXITSTATUS_OFFSET: change AC_RUN_IFELSE to AC_TRY_RUN
- to avoid warning about not using AC_LANG_SOURCE
-
- 5/14
- ----
-bashline.[ch]
- - two new functions, bashline_set_event_hook and bashline_reset_event_hook,
- to set rl_event_hook to bash_event_hook and back to NULL, respectively
- - don't set rl_event_hook unconditionally
-
-sig.c
- - termsig_sighandler: if the shell is currently interactive and
- readline is active, call bashline_set_event_hook to cause
- termsig_handler to be called via bash_event_hook when the shell
- returns from the signal handler
-
- 5/15
- ----
-lib/readline/display.c
- - _rl_col_width: Mac OS X has a bug in wcwidth: it does not return 0
- for UTF-8 combining characters. Added workaround dependent on
- MACOSX. Fixes problem pointed out by Thomas De Contes
- <d.l.tDecontes@free.fr>
-
- 5/16
- ----
-lib/readline/rlmbutil.h
- - WCWIDTH: wrapper for wcwidth that returns 0 for Unicode combining
- characters on systems where wcwidth is broken (e.g., Mac OS X).
-
-lib/readline/{complete,display,mbutil}.c
- - use WCWIDTH instead of wcwidth
-
- 5/17
- ----
-lib/readline/display.c
- - update_line: after computing ofd and nfd, see whether the next
- character in ofd is a zero-width combining character. If it is,
- back ofd and nfd up one, so the base characters no longer compare
- as equivalent. Fixes problem reported by Keith Winstein
- <keithw@mit.edu>
-
-lib/readline/nls.c
- - _rl_utf8locale: new flag variable, set to non-zero if the current
- locale is UTF-8
- - utf8locale(): new function, returns 1 if the passed lspec (or the
- current locale) indicates that the locale is UTF-8. Called from
- _rl_init_eightbit
-
-lib/readline/rlprivate.h
- - extern declaration for _rl_utf8locale
-
-locale.c
- - locale_utf8locale: new flag variable, set to non-zero if the current
- locale is UTF-8 (currently unused)
- - locale_isutf8(): new function, returns 1 if the passed lspec (or the
- current locale) indicates that the locale is UTF-8. Should be called
- whenever the locale or LC_CTYPE value is modified
-
-aclocal.m4
- - BASH_WCWIDTH_BROKEN: new test for whether or not wcwidth returns
- zero-width characters like unicode combining characters as having
- display length 1; define WCWIDTH_BROKEN in this case
-
-config.h.in
- - WCWIDTH_BROKEN: new define
-
-lib/readline/rlmbutil.h
- - change WCWIDTH macro to use _rl_utf8locale and the full range of
- Unicode combining characters (U+0300-U+036F)
-
- 5/19
- ----
-lib/readline/rlprivate.h
- - _rl_search_context: new member, prevc, will hold character read
- prior to lastc
-
-lib/readline/isearch.c
- - _rl_isearch_dispatch: if the character causes us to index into
- another keymap, save that character in cxt->prevc
- - _rl_isearch_dispatch: if we index into another keymap, but don't
- find a function that's special to i-search, and the character that
- caused us to index into that keymap would have terminated the
- search, push back cxt->prevc and cxt->lastc to make it appear as
- if `prevc' terminated the search, and execute lastc as a command.
- We have to push prevc back so we index into the same keymap before
- we read lastc. Fixes bug report from Davor Cubranic
- <cubranic@stat.ubc.ca>
-
- 5/20
- ----
-expr.c
- - expr_bind_variable: pay attention to the return value from
- bind_variable and check whether or not we should error out due to
- a readonly or noassign variable. Fixes bug reported by Eric
- Blake <eblake@redhat.com>
-
- 5/26
- ----
-
-lib/readline/search.c
- - include histlib.h for ANCHORED_SEARCH defines
- - rl_history_search_flags: new variable, holds ANCHORED_SEARCH flag for
- the duration of a history search
- - rl_history_search_reinit: takes a new flags variable, defines whether
- or not the search is anchored; assigned to rl_history_search_flags
- - rl_history_serarch_reinit: if ANCHORED_SEARCH flag passed, add ^ to
- beginning of search string; otherwise search string is unmodified
- - rl_history_search_internal: set rl_point appropriately based on
- whether or not rl_history_search_flags includes ANCHORED_SEARCH
- - rl_history_substr_search_forward: new function, for non-anchored
- substring search forward through history for string of characters
- preceding rl_point
- - rl_history_substr_search_backward: new function, for non-anchored
- substring search backward through history for string of characters
- preceding rl_point. Original code from Niraj Kulkarni
- <kulkarniniraj14@gmail.com>
-
-lib/readline/readline.h
- - extern declarations for rl_history_substr_search_{for,back}ward
-
-lib/readline/funmap.c
- - history-substring-search-forward: new bindable command, invokes
- rl_history_substr_search_forward
- - history-substring-search-backward: new bindable command, invokes
- rl_history_substr_search_backward
-
-lib/readline/doc/{rluser.texi,readline.3}
- - document history-substring-search-forward and
- history-substring-search-backward
-
- 5/27
- ----
-{nojobs,jobs}.c
- - add support for DONT_REPORT_SIGTERM so that the shell doesn't print
- a message when a job exits due to SIGTERM since that's the default
- signal sent by the kill builtin. Suggested by Marc Herbert
- <mark.herbert@gmail.com>
-
-config-top.h
- - DONT_REPORT_SIGTERM: new user-modifiable setting. Commented out
- by default
-
- 5/28
- ----
-lib/readline/bind.c
- - _rl_skip_to_delim: skip to a closing double quote or other delimiter,
- allowing backslash to quote any character, including the delimiter
- - rl_parse_and_bind: call _rl_skip_to_delim instead of using inline
- code
- - rl_parse_and_bind: allow quoted strings as the values of string
- variables. Variable values without double quotes have trailing
- whitespace removed (which still allows embedded whitespace, for
- better or worse). Fixes problem with string variables not matching
- in `set' command if values happen to have trailing spaces or tabs
- (debian bash bug #602762), but introduces slight incompatibility.
-
- 5/29
- ----
-doc/{bash.1,bashref.texi}
- - clarify unset description to specify that without options, a
- variable, then a shell function if there is no variable by that
- name, is unset. Fixes discrepancy reported by Mu Qiao
- <qiaomuf@gentoo.org>
-
- 6/4
- ----
-doc/{bash.1,bashref.texi}
- - clarify description of LINES and COLUMNS (and checkwinsize shopt
- option) to make it clear that only interactive shells set a
- handler for SIGWINCH and update LINES and COLUMNS. Original
- report submitted by Jonathan Nieder <jrnieder@gmail.com>
-
-arrayfunc.c
- - expand_compound_array_assignment: defer expansion of words between
- parens when performing compound assignmnt to an associative array
- variable
- - assign_compound_array_list: perform the same expansions when doing
- a compound array assignment to an associative array variable as
- when doing a straight array index assignment. The idea is that
- foo=( [ind1]=bar [ind2]=quux)
- is the same as
- foo[ind1]=bar ; foo[ind2]=quux
-
- This fixes problems with double-expansion and quote removal being
- performed on the array indices
-
- 6/13
- ----
-doc/{bash.1,bashref.texi}
- - Add a little text to make it clear that the locale determines how
- range expressions in glob patterns are handled.
-
-
- 6/21
- ----
-builtins/read.def
- - display a message and return error status if -a is used with an
- existing associative array. Fixes bug reported by Curtis Doty
- <curtis@greenkey.net>
-
- 6/24
- ----
-{jobs,nojobs}.c
- - non-interactive shells now react to the setting of checkwinsize
- and set LINES and COLUMNS after a foreground job exits. From a
- suggestion by Leslie Rhorer <lrhorer@satx.rr.com>
-
-doc/{bash.1,bashref.texi}
- - checkwinsize: remove language saying that only interactive shells
- check the window size after each command
-
-lib/readline/histfile.c
- - history_backupfile: new file, creates a backup history file name
- given a filename (appending `-')
- - history_do_write: when overwriting the history file, back it up
- before writing. Restore backup file on a write error. Suggested
- by chkno@chkno.net
-
-bashline.c
- - find_cmd_name: two new arguments, return the start and end of the
- actual text string used to find the command name, without taking
- whitespace into account
- - attempt_shell_completion: small changes to make sure that completion
- attempted at the beginning of a non-empty line does not find a
- programmable completion, even if the command name starts at point
- - attempt_shell_completion: small change to make sure that completion
- does not find a progcomp when in whitespace before the command
- name
- - attempt_shell_completion: small change to make sure that completion
- does not find a progcomp when point is at the first character of a
- command name, even when there is leading whitespace (similar to
- above). Fixes problems noted by Ville Skytta <ville.skytta@iki.fi>
-
-subst.c
- - brace_expand_word_list: since the individual strings in the strvec
- returned by brace_expand are already allocated, don't copy them to
- newly-allocated memory when building the WORD_LIST, just use them
- intact
-
-locale.c
- - locale_mb_cur_max: cache value of MB_CUR_MAX when we set or change
- the locale to avoid a function call every time we need to read it
-
-shell.h
- - new struct to save shell_input_line and associated variables:
- shell_input_line_state_t
- - add members of sh_parser_state_t to save and restore token and the
- size of the token buffer
-
-parse.y
- - {save,restore}_input_line_state: new functions to save and restore
- shell_input_line and associated variables
- - {save,restore}_parser_state: add code to save and restore the token
- and token buffer size
- - xparse_dolparen: call save_ and restore_input_line_state to avoid
- problems with overwriting shell_input_line when we recursively
- call the parser to parse a command substitution. Fixes bug
- reported by Rui Santos <rsantos@grupopie.com>
-
-include/shmbutil.h
- - use locale_mb_cur_max instead of MB_CUR_MAX in ADVANCE_CHAR and
- similar macros
-
-lib/glob/smatch.c
- - rangecmp,rangecmp_wc: change to take an additional argument, which
- forces the use of strcoll/wscoll when non-zero. If it's 0, a new
- variable `glob_asciirange' controls whether or not we use strcoll/
- wscoll. If glob_asciirange is non-zero, we use straight
- C-locale-like ordering. Suggested by Aharon Robbins
- <arnold@skeeve.com>
-
- 6/30
- ----
-execute_cmd.c
- - execute_pipeline: make sure the lastpipe code is protected by
- #ifdef JOB_CONTROL. Fixes problem reported by Thomas Cort
- <tcort@minix3.org>
-
- 7/2
- ---
-lib/readline/complete.c
- - EXPERIMENTAL: remove setting of _rl_interrupt_immediately around
- completion functions that touch the file system. Idea from Jan
- Kratochvil <jan.ktratochvil@redhat.com> and the GDB development
- team
-
-lib/readline/signals.c
- - rl_signal_handler: if we're in callback mode, don't interrupt
- immediately on a SIGWINCH
-
- 7/3
- ---
-bashline.c
- - set_directory_hook: and its siblings are a new set of functions to
- set, save, and restore the appropriate directory completion hook
- - change callers to use {set,save,restore}_directory_hook instead of
- manipulating rl_directory_rewrite_hook directly
- - dircomplete_expand: new variable, defaults to 0, if non-zero causes
- directory names to be word-expanded during word and filename
- completion
- - change {set,save,restore}_directory_hook to look at dircomplete_expand
- and change rl_directory_completion_hook or rl_directory_rewrite_hook
- appropriately
-
-bashline.h
- - extern declaration for set_directory_hook so shopt code can use it
-
- 7/6
- ---
-builtins/shopt.def
- - globasciiranges: new settable shopt option, makes glob ranges act
- as if in the C locale (so b no longer comes between A and B).
- Suggested by Aharon Robbins <arnold@skeeve.com>
-
- 7/7
- ---
-doc/{bash.1,bashref.texi}
- - document new `globasciiranges' shopt option
-
- 7/8
- ---
-builtins/shopt.def
- - direxpand: new settable option, makes filename completion expand
- variables in directory names like bash-4.1 did.
- - shopt_set_complete_direxpand: new function, does the work for the
- above by calling set_directory_hook
-
-doc/{bash.1,bashref.texi}
- - document new `direxpand' shopt option
-
- 7/15
- ----
-lib/readline/isearch.c
- - _rl_isearch_dispatch: when adding character to search string, use
- cxt->lastc (which we use in the switch statement) instead of c,
- since lastc can be modified earlier in the function
-
- 7/18
- ----
-lib/readline/rlprivate.h
- - _rl_search_context: add another member to save previous value of
- (multibyte) lastc: pmb is to mb as prevc is to lastc
-
-lib/readline/isearch.c:
- - _rl_isearch_dispatch: if a key sequence indexes into a new keymap,
- but doesn't find any bound function (k[ind].function == 0) or is
- bound to self-insert (k[ind].function == rl_insert), back up and
- insert the previous character (the one that caused the index into a
- new keymap) and arrange things so the current character is the next
- one read, so both of them end up in the search string. Fixes bug
- reported by Clark Wang <dearvoid@gmail.com>
- - _rl_isearch_dispatch: a couple of efficiency improvements when adding
- characters to the isearch string
-
- 7/24
- ----
-lib/readline/isearch.c
- - _rl_isearch_dispatch: save and restore cxt->mb and cxt->pmb
- appropriately when in a multibyte locale
-
-doc/{bash.1,bashref.texi}
- - correct description of {x}>file (and other redirection operators
- that allocate a file descriptor) to note the the fd range is
- greater than or equal to 10. Fixes problem reported by
- Christian Ullrich
-
-lib/readline/signals.c
- - rl_signal_handler: don't interrupt immediately if in callback mode
-
-lib/readline/callback.c
- - rl_callback_read_char: install signal handlers only when readline
- has control in callback mode, so readline's signal handlers aren't
- called when the application is active (e.g., between the calls to
- rl_callback_handler_install and rl_callback_read_char). If the
- readline signal handlers only set a flag, which the application
- doesn't know about, the signals will effectively be ignored until
- the next time the application calls into the readline callback
- interface. Fixes problem of calling unsafe functions from signal
- handlers when in callback mode reported by Jan Kratochvil
- <jan.kratochvil@redhat.com>
-
-execute_cmd.c
- - fix_assignment_words: when in Posix mode, the `command' builtin
- doesn't change whether or not the command name it protects is an
- assignment builtin. One or more instances of `command'
- preceding `export', for instance, doesn't make `export' treat its
- assignment statement arguments differently. Posix interpretation
- #351
-
-doc/{bash.1,bashref.texi}
- - document new Posix-mode behavior of `command' when preceding builtins
- that take assignment statements as arguments
-
-builtins/printf.def
- - printstr: if fieldwidth or precision are < 0 or > INT_MAX when
- supplied explicitly (since we take care of the `-' separately),
- clamp at INT_MAX like when using getint(). Fixes issue reported
- by Ralph Coredroy <ralph@inputplus.co.uk>
-
- 7/25
- ----
-lib/readline/chardefs.h
- - isxdigit: don't define if compiling with c++; declared as a c++
- template function. Fixes bug reported by Miroslav Lichvar
- <mlichvar@redhat.com>
-
-builtins/printf.def
- - getint: if garglist == 0, return whatever getintmax returns (0).
- Fixes bug reported by Ralph Coredroy <ralph@inputplus.co.uk>
-
- 7/28
- ----
-doc/{bash.1,bashref.texi}
- - minor changes to the descriptions of the cd and pushd builtins
-
-lib/sh/zread.c
- - zsyncfd: change variable holding return value from lseek to
- off_t. Bug report and fix from Gregory Margo <gmargo@pacbell.net>
-
- 8/1
- ---
-expr.c
- - don't check for division by 0 when in a context where no evaluation
- is taking place. Fixes bug reported by dnade.ext@orange-ftgroup.com
-
- 8/6
- ---
-execute_cmd.c
- - execute_command_internal: the parent branch of the subshell code
- (where the child calls execute_in_subshell) should not close all
- open FIFOs with unlink_fifo_list if it's part of a shell function
- that's still executing. Fixes bug reported by Maarten Billemont
- <lhunath@lyndir.com>
-
- 8/9
- ---
-builtins/common.c
- - get_exitstat: return EX_BADUSAGE (2) on a non-numeric argument
-
-builtins/return.def
- - return_builtin: just call get_exitstat to get the return status,
- let it handle proper parsing and handling of arguments. Fixes
- issue most recently raised by Linda Walsh <bash@tlinx.org>.
- Reverses change from 9/11/2008 (see above)
-
- 8/16
- ----
-doc/{bash.1,bashref.texi}
- - clean up `set -e' language to make it clearer that any failure of
- a compound command will cause the shell to exit, not just subshells
- and brace commands
-
- 8/17
- ----
-configure.in
- - make the various XXX_FOR_BUILD variables `precious' to autoconf to
- avoid stale data
- - change how CC_FOR_BUILD is initialized when cross-compiling and not,
- but do not change behavior
- - initialize CFLAGS_FOR_BUILD to -g when cross-compiling
- - initialize LIBS_FOR_BUILD to $(LIBS) when not cross-compiling, empty
- when cross-compiling
- - create AUTO_CFLAGS variable to hold basic CFLAGS defaults; used when
- CFLAGS not inherited from environment (like effect of old
- auto_cflags variable)
- - substitute LIBS_FOR_BUILD into output Makefiles
- [changes inspired by bug report from Nathan Phillip Brink
- <ohnobinki@ohnopublishing.net> -- gentoo bug 378941]
-
-builtins/Makefile.in
- - substitute LIBS_FOR_BUILD from configure, not strictly initialized
- to $(LIBS)
-
- 8/27
- ----
-doc/{bash.1,bashref.texi}
- - minor changes to the here string description to clarify the
- expansions performed on the word
-
-support/shobj-conf
- - handle compilation on Lion (Mac OS X 10.7/darwin11) with changes
- to darwin stanzas. Fixes readline bug reported by Vincent
- Sheffer <vince.sheffer@apisphere.com>
-
-lib/sh/strtrans.c
- - ansic_wshouldquote: check a string with multi-byte characters for
- characters that needs to be backslash-octal escaped for $'...'
- - ansic_shouldquote: if is_basic fails for one character, let
- ansic_wshouldquote examine the rest of the string and return what
- it returns. From a patch sent by Roman Rakus <rrakus@redhat.com>
-
- 8/30
- ----
-lib/sh/strtrans.c
- - ansic_quote: changes to quote (or not) multibyte characters. New
- code converts them to wide characters and uses iswprint to check
- valid wide chars. From a patch sent by Roman Rakus
- <rrakus@redhat.com>
-
- 9/7
- ---
-lib/sh/shquote.c
- - sh_backslash_quote: change to be table-driven so we can use a
- different table if we want to
- - sh_backslash_quote: takes a second char table[256] argument;
-
-externs.h
- - sh_backslash_quote: add second argument to function prototype
-
-bashline.c,braces.c,parse.y,builtins/printf.def
- - change callers of sh_backslash_quote to add second argument
-
-bashline.c
- - filename_bstab: table of characters to pass to sh_backslash_quote;
- characters with value 1 will be backslash-quoted
- - set_filename_bstab: turn on characters in filename backslash-quote
- table according to passed string argument
- - call set_filename_bstab every time rl_filename_quote_characters is
- assigned a value
- - bash_quote_filename: call sh_backslash_quote with filename_bstab
- as second argument. This allows other characters in filenames to
- be quoted without quoting, for instance, a dollar sign in a shell
- variable reference
-
- 9/8
- ---
-bashline.c
- - complete_fullquote: new variable, controls table passed to
- sh_backslash_quote. If non-zero (the default), the standard set
- of shell metacharacters -- as in bash versions up to and including
- bash-4.2 -- gets backslash-quoted by the completion code. If zero,
- sh_backslash_quote gets the table with the characters in the
- variable reference removed, which means they are removed from the
- set of characters to be quoted in filenames
-
- 9/10
- ----
-bashline.c
- - bash_filename_stat_hook: new function, designed to expand variable
- references in filenames before readline passes them to stat(2)
- to determine whether or not they are a directory
-
- 9/15
- ----
-builtins/declare.def
- - if assign_array_element fails due to a bad (or empty) subscript, mark
- it as an assignment error and don't attempt any further processing
- of that declaration. Fixes segfault bug reported by Diego Augusto
- Molina <diegoaugustomolina@gmail.com>
-
- 9/19
- ----
-expr.c
- - exppower: replace the simple exponentiation algorithm with an
- implementation of exponentiation by squaring. Inspired by report
- from Nicolas ARGYROU <nargy@yahoo.com>
-
-bashline.c
- - bash_quote_filename: check for rtext being non-null before
- dereferencing it
- - set_saved_history: operate_and_get_next assumes that the previous
- line was added to the history, even when the history is stifled and
- at the max number of entries. If it wasn't, make sure the history
- number is incremented properly. Partial fix for bug reported by
- gregrwm <backuppc-users@whitleymott.net>
-
-doc/{bash.1,bashref.texi},lib/readline/doc/{hsuser,rluser}.texi
- - minor editorial changes inspired by suggestions from
- Roger Zauner <rogerx.oss@gmail.com>
-
- 9/20
- ----
-lib/intl/localealias.c
- - read_alias_file: close resource leak (fp) when returning on error
-
- 9/22
- ----
-execute_command.c
- - execute_intern_function: implement Posix interpretation 383 by making
- it an error to define a function with the same name as a special
- builtin when in Posix mode.
- http://austingroupbugs.net/view.php?id=383#c692
-
- 9/25
- ----
-doc/{bash.1,bashref.texi}
- - formatting and some content changes from Benno Schulenberg
- <bensberg@justemail.net>
- - document new posix-mode behavior from interp 383 change of 9/22
-
- 9/30
- ----
-execute_cmd.c
- - shell_execve: add strerror to error message about executable file
- that shell can't execute as a shell script. From suggestion by
- daysleeper <daysleeper@centrum.cz>
-
- 10/1
- ----
-bashhist.c
- - maybe_add_history: act as if literal_history is set when parser_state
- includes PST_HEREDOC, so we save the bodies of here-documents just
- as they were entered. Fixes bug reported by Jonathan Wakely
- <bugs@kayari.org>
- - bash_add_history: make sure that the second and subsequent lines of
- a here document don't have extra newlines or other delimiting
- chars added, since they have the trailing newline preserved, when
- `lithist' is set and history_delimiting_chars isn't called
-
-execute_cmd.c
- - execute_command_internal: avoid fd exhaustion caused by using
- process substitution in loops inside shell functions by using
- copy_fifo_list and close_new_fifos (). Fixes debian bash bug
- 642504
-
-lib/readline/complete.c
- - new variable, rl_filename_stat_hook, used by append_to_match. If
- filename completion is desired, and rl_filename_stat_hook points
- to a function, call that function to expand the filename in an
- application-specific way before calling stat.
-
-bashline.c
- - bash_default_completion: if variable completion returns a single
- match, use bash_filename_stat_hook and file_isdir to determine
- whether or not the variable name expands to a directory. If it
- does, set the filename_append_character to `/'. This is not
- perfect, so we will see how it works out. Adds functionality
- requested by Peter Toft <pto@linuxbog.dk> and Patrick Pfeifer
- <patrick@pfeifer.de>
- - rl_filename_stat_hook: assigned bash_filename_stat_hook, so things
- like $HOME/Downloads (after completion) have a slash appended.
- In general, this causes the stat hook to be called whenever
- filename completion is appended. Adds functionality requested by
- Patrick Pfeifer <patrick@pfeifer.de>
-
-lib/readline/readline.h
- - new extern declaration for rl_filename_stat_hook
-
-lib/readline/doc/rltech.texi
- - rl_directory_rewrite_hook: now documented
- - rl_filename_stat_hook: document
-
-pcomplete.c
- - gen_action_completions: in the CA_DIRECTORY case, turn off
- rl_filename_completion_desired if it was off before we called
- rl_filename_completion_function and we didn't get any matches.
- Having it on causes readline to quote the matches as if they
- were filenames. Adds functionality requested by many,
- including Clark Wang <dearvoid@gmail.com>
-
-assoc.[ch]
- - assoc_replace: new function, takes the same arguments as
- assoc_insert, but returns the old data instead of freeing it
- - assoc_insert: if the object returned by hash_insert doesn't have
- the same value for its key as the key passed as an argument, we
- are overwriting an existing value. In this case, we can free the
- key. Fixes bug reported by David Parks <davidparks21@yahoo.com>
-
- 10/5
- ----
-print_cmd.c
- - indirection_level_string: small change to only re-enable `x'
- option after calling decode_prompt_string if it was on before. In
- normal mode, it will be, but John Reiser <jreiser@bitwagon.com>
- has a novel use for that code in conjunction with a pre-loaded
- shared library that traces system call usage in shell scripts
-
- 10/10
- -----
-Makefile.in
- - Fix from Mike Frysinger <vapier@gentoo.org> to avoid trying to
- build y.tab.c and y.tab.h with two separate runs of yacc if
- parse.y changes. Problem with parallel makes
- - Fix from Mike Frysinger <vapier@gentoo.org> to avoid subdirectory
- builds each trying to make version.h (and all its dependencies)
-
-lib/sh/Makefile.in
- - remove some dependencies on version.h where it doesn't make sense
-
-variables.c
- - initialize_shell_variables: while reading the environment, a shell
- running in posix mode now checks for SHELLOPTS being readonly (it
- gets set early on in main()) before trying to assign to it. It
- saves an error message and the variable gets parsed as it should.
- Fixes bug reported by Len Giambrone <Len.Giambrone@intersystems.com>
-
- 10/14
- -----
-doc/{bash.1,bashref.texi}
- - add to the "duplicating file descriptors" description that >&word
- doesn't redirect stdout and stderr if word expands to `-'
- - add to the "appending standard output and standard error"
- description a note that >&word, where word is a number or `-',
- causes other redirection operators to apply for sh and Posix
- compatibility reasons. Suggested by Greg Wooledge
- <wooledg@eeg.ccf.org>
-
- 10/15
- -----
-pcomplete.c
- - change pcomp_filename_completion_function to only run the filename
- dequoting function in the cases (as best as it can figure) where
- readline won't do it via rl_filename_completion_function. Based
- on reports from <lolilolicon@gmail.com>
-
- 10/19
- -----
-bashline.c
- - attempt_shell_completion: add call to set_directory_hook() to make
- sure the rewrite functions are correct. It's cheap and doesn't
- hurt
- - command_word_completion_function: if completing a command name that
- starts with `.' or `..', temporarily suppress the effects of the
- `direxpand' option and restore the correct value after calling
- rl_filename_completion_function. If it's enabled, the directory
- name will be rewritten and no longer match `./' or `../'. Fixes
- problem reported by Michael Kalisz <michael@kalisz.homelinux.net>
-
- 10/22
- -----
-builtins/history.def
- - push_history: make sure remember_on_history is enabled before we
- try to delete the last history entry -- the `history -s' command
- might not have been saved. Fixes bug reported by
- lester@vmw-les.eng.vmware.com
-
-lib/readline/complete.c
- - rl_callback_read_char: add calls to a macro CALLBACK_READ_RETURN
- instead of straight return; add same call at end of function.
- Placeholder for future work in deinstalling signal handlers when
- readline is not active
-
- 10/25
- -----
-expr.c
- - exp2: catch arithmetic overflow when val1 == INTMAX_MIN and val2 == -1
- for DIV and MOD and avoid SIGFPE. Bug report and pointer to fix
- from Jaak Ristioja <jaak.ristioja@cyber.ee>
- - expassign: same changes for arithmetic overflow for DIV and MOD
-
- 10/28
- -----
-subst.c
- - parameter_brace_expand: allow pattern substitution when there is an
- expansion of the form ${var/} as a no-op: replacing nothing with
- nothing
- - parameter_brace_patsub: don't need to check for PATSUB being NULL;
- it never is
-
-flags.c
- - if STRICT_POSIX is defined, initialize history_expansion to 0, since
- history expansion (and its treatment of ! within double quotes) is
- not a conforming posix environment. From austin-group issue 500
-
-lib/readline/histexpand.c
- - history_expand: when processing a string within double quotes
- (DQUOTE == 1), make the closing double quote inhibit history
- expansion, as if the word were outside double quotes. In effect,
- we assume that the double quote is followed by a character in
- history_no_expand_chars. tcsh and csh seem to do this. This
- answers a persistent complaint about history expansion
-
- 10/29
- -----
-make_cmd.c
- - make_arith_for_command: use skip_to_delim to find the next `;'
- when breaking the string between the double parens into three
- separate components instead of a simple character loop. Fixes
- bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 11/2
- ----
-Makefile.in
- - make libbuiltins.a depend on builtext.h to serialize its creation
- and avoid conflict between multiple invocations of mkbuiltins.
- Fix from Mike Frysinger <vapier@gentoo.org>
-
- 11/5
- ----
-findcmd.c
- - user_command_matches: if stat(".", ...) returns -1, set st_dev
- and st_ino fields in dotinfo to 0 to avoid same_file matches
- - find_user_command_in_path: check stat(2) return the same way
-
-lib/glob/glob.c
- - glob_vector: don't call strlen(pat) without checking pat == 0
- - glob_dir_to_array: make sure to free `result' and all allocated
- members before returning error due to malloc failure
- - glob_vector: make sure to free `nextname' and `npat' on errors
- (mostly when setting lose = 1)
- - glob_vector: if flags & GX_MATCHDIRS but not GX_ALLDIRS, make
- sure we free `subdir'
- - glob_filename: when expanding ** (GX_ALLDIRS), make sure we
- free temp_results (return value from glob_vector)
-
-lib/glob/xmbsrtowcs.c
- - xdupmbstowcs: fix call to realloc to use sizeof (char *) instead
- of sizeof (char **) when assigning idxtmp
-
-execute_cmd.c
- - print_index_and_element: return 0 right away if L == 0
- - is_dirname: fix memory leak by freeing `temp'
- - time_command: don't try to deref NULL `command' when assigning
- to `posix_time'
- - shell_execve: null-terminate `sample' after READ_SAMPLE_BUF so it's
- terminated for functions that expect that
-
-builtins/read.def
- - read_builtin: don't call bind_read_variable with a potentially-null
- string
-
-pcomplete.c
- - gen_command_matches: don't call dispose_word_desc with a NULL arg
- - gen_compspec_completions: fix memory leak by freeing `ret' before
- calling gen_action_completions (tcs, ...). happens when
- performing directory completion as default and no completions
- have been generated
- - gen_progcomp_completions: make sure to set foundp to 0 whenever
- returning NULL
- - it_init_aliases: fix memory leak by freeing alias_list before
- returning
-
-bashline.c
- - command_word_completion_function: don't call restore_tilde with a
- NULL directory_part argument
- - bash_directory_expansion: bugfix: don't throw away results of
- rl_directory_rewrite_hook if it's set and returns non-zero
- - bind_keyseq_to_unix_command: free `kseq' before returning error
-
-arrayfunc.c
- - assign_array_element_internal: make sure `akey' is freed if non-null
- before returning error
- - assign_compound_array_list: free `akey' before returning error
- - array_value_internal: free `akey' before returning error
- - unbind_array_element: free `akey' before returning error
-
-subst.c
- - array_length_reference: free `akey' before returning error in case
- of expand_assignment_string_to_string error
- - array_length_reference: free `akey' after call to assoc_reference
- - skip_to_delim: if skipping process and command substitution, free
- return value from extract_process_subst
- - parameter_brace_substring: free `val' (vtype == VT_VARIABLE) before
- returning if verify_substring_values fails
- - parameter_brace_expand: remove two duplicate lines that allocate
- ret in parameter_brace_substring case
- - parameter_brace_expand: convert `free (name); name = xmalloc (...)'
- to use `xrealloc (name, ...)'
- - parameter_brace_expand: free `name' before returning when handling
- ${!PREFIX*} expansion
- - split_at_delims: fix memory leak by freeing `d2' before returning
-
-redir.c
- - redirection_error: free `filename' if the redirection operator is
- REDIR_VARASSIGN by assigning allocname
-
-eval.c
- - send_pwd_to_eterm: fix memory leak by freeing value returned by
- get_working_directory()
-
-builtins/cd.def
- - change_to_directory: fix memory leak by freeing return value from
- resetpwd()
- - cd_builtin: fix memory leak by freeing value returned by dirspell()
- - cd_builtin: fix memory leak by freeing `directory' if appropriate
- before overwriting with return value from resetpwd()
-
-builtins/type.def
- - describe_command: free `full_path' before overwriting it with return
- value from sh_makepath
-
-builtins/complete.def
- - compgen_builtin: fix memory leak by calling strlist_dispose (sl)
- before overwriting sl with return value from completions_to_stringlist
-
-builtins/hash.def
- - list_hashed_filename_targets: fix memory leak by freeing `target'
-
-make_cmd.c
- - make_arith_for_command: free `init', `test', and `step' before
- returning error on parse error
-
-jobs.c
- - initialize_job_control: don't call move_to_high_fd if shell_tty == -1
-
-general.c
- - check_dev_tty: don't call close with an fd < 0
- - legal_number: deal with NULL `string' argument, return invalid
-
-lib/sh/fmtulong.c
- - fmtulong: if the `base' argument is invalid, make sure we index
- buf by `len-1' at maximum
-
-print_cmd.c
- - print_deferred_heredocs: don't try to dereference a NULL `cstring'
- - cprintf: make sure to call va_end (args)
-
-variables.c
- - push_dollar_vars: fix call to xrealloc to use sizeof (WORD_LIST *)
- instead of sizeof (WORD_LIST **)
-
-lib/sh/zmapfd.c
- - zmapfd: if read returns error, free result and return -1 immediately
- instead of trying to reallocate it
-
- 11/6
- ----
-execute_cmd.c
- - cpl_reap: rewrote to avoid using pointer after freeing it; now builds
- new coproc list on the fly while traversing the old one and sets the
- right values for coproc_list when done
-
- 11/12
- -----
-builtins/set.def
- - if neither -f nor -v supplied, don't allow a readonly function to
- be implicitly unset. Fixes bug reported by Jens Schmidt
- <jens.schmidt35@arcor.de>
-
-lib/readline/callback.c
- - change CALLBACK_READ_RETURN to clear signal handlers before returning
- from rl_callback_read_char so readline's signal handlers aren't
- installed when readline doesn't have control. Idea from Jan
- Kratochvil <jan.ktratochvil@redhat.com> and the GDB development
- team
-
-pcomplete.h
- - COPT_NOQUOTE: new complete/compgen option value
-
-builtins/complete.def
- - noquote: new complete/compgen option; will be used to disable
- filename completion quoting
-
-pcomplete.c
- - pcomp_set_readline_variables: pay attention to COPT_NOQUOTE; turns
- of rl_filename_quoting_desired if set; turns it on if unset (value
- is inverted, since default is on)
-
-doc/bash.1,lib/readline/doc/rluser.texi
- - document new -o noquote option to complete/compgen/compopt
-
-pathexp.c
- - quote_string_for_globbing: if QGLOB_REGEXP, make sure characters
- between brackets in an ERE bracket expression are not inappropriately
- quoted with backslashes. This is a pretty substantial change,
- should be stressed when opening bash up for alpha and beta tests.
- Fixes bug pointed out by Stephane Chazleas
- <stephane_chazelas@yahoo.fr>
-
-doc/{bash.1,bashref.texi}
- - document that regexp matches can be inconsistent when quoting
- characters in bracket expressions, since usual quoting characters
- lose their meaning within brackets
- - note that regular expression matching when the pattern is stored
- in a shell variable which is quoted for expansion causes string
- matching
-
-redir.h
- - RX_SAVEFD: new flag value; notes that a redirection denotes an
- fd used to save another even if it's not >= SHELL_FD_BASE
-
-redir.c
- - do_redirection_internal: when deciding whether or not to reset the
- close-on-exec flag on a restored file descriptor, trust the value
- of redirect->flags & RX_SAVCLEXEC even if the fd is < SHELL_FD_BASE
- if the RX_SAVEFD flag is set
- - add_undo_redirect: set the RX_SAVEFD flag if the file descriptor
- limit is such that the shell can't duplicate to a file descriptor
- >= 10. Fixes a limitation that tripped a coreutils test reported
- by Paul Eggert <eggert@cs.ucla.edu>
-
- 11/19
- -----
-doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi
- - make it clear that bash runs HISTFILESIZE=$HISTSIZE after reading
- the startup files
- - make it clear that bash runs HISTSIZE=500 after reading the
- startup files
- - make it clear that setting HISTSIZE=0 causes commands to not be
- saved in the history list
- - make it clear that setting HISTFILESIZE=0 causes the history file
- to be truncated to zero size
-
-variables.c
- - sv_histsize: change so setting HISTSIZE to a value less than 0
- causes the history to be `unstifled'
- - sv_histsize: change so setting HISTFILESIZE to a value less than 0
- results in no file truncation
- - make it clear that numeric values less than 0 for HISTFILESIZE or
- HISTSIZE inhibit the usual functions
-
- 11/23
- -----
-parse.y
- - save_input_line_state: add missing `return ls' at the end, since the
- function is supposed to return its argument. Pointed out by
- Andreas Schwab <schwab@linux-m68k.org>
-
-builtins/read.def
- - skip over NUL bytes in input, as most modern shells seem to. Bug
- report by Matthew Story <matt@tablethotels.com>
-
-lib/readline/vi_mode.c
- - rl_vi_replace: set _rl_vi_last_key_before_insert to invoking key
-
- 11/25
- -----
-builtins/read.def
- - read_builtin: if xrealloc returns same pointer as first argument,
- don't bother with the remove_unwind_protect/add_unwind_protect pair
- - read_builtin: set a flag (`reading') around calls to zread/zreadc
- and readline()
- - sigalrm: change to set flag (`sigalrm_seen') and only longjmp if
- currently in read(2) (reading != 0)
- - CHECK_ALRM: new macro, checks sigalrm_seen and longjmps if non-zero,
- behavior of old SIGALRM catching function
- - read_builtin: call CHECK_ALRM in appropriate places while reading
- line of input. Fixes bug reported by Pierre Gaston
- <pierre.gaston@gmail.com>
-
-lib/readline/vi_mode.c
- - rl_vi_replace: initialize characters before printing characters in
- vi_replace_keymap to their default values in vi_insertion_keymap,
- since we're supposed to be in insert mode replacing characters
- - rl_vi_replace: call rl_vi_start_inserting to set last command to
- `R' for undo
- - rl_vi_replace: set _rl_vi_last_key_before_insert to `R' for future
- use by _rl_vi_done_inserting
- - vi_save_insert_buffer: new function, broke out code that copies text
- into vi_insert_buffer from _rl_vi_save_insert
- - _rl_vi_save_replace: new function, saves text modified by
- rl_vi_replace (using current point and vi_replace_count to figure
- it out) to vi_replace_buffer
- - _rl_vi_save_insert: call vi_save_insert_buffer
- - _rl_vi_done_inserting: if _rl_vi_last_key_before_insert == 'R', call
- _rl_vi_save_replace to save text modified in replace mode (uses
- vi_save_insert_buffer)
- - _rl_vi_replace_insert: new function, replaces the number of chars
- in vi_insert_buffer after rl_point with contents ov vi_insert_buffer
- - rl_vi_redo: call _rl_vi_replace_insert if last command == 'R' and
- there's something in vi_insert_buffer. Fixes bug with `.' not
- redoing the most recent `R' command, reported by Geoff Clare
- <g.clare@opengroup.org> in readline area on savannah
-
- 11/26
- -----
-lib/readline/rlprivate.h
- - RL_SIG_RECEIVED(): evaluate to non-zero if there is a pending signal
- to be handled
- - RL_SIGINT_RECEIVED(): evaluate to non-zero if there is a pending
- SIGINT to be handled
-
-lib/readline/complete.c
- - remove all mention of _rl_interrupt_immediately
- - rl_completion_matches: check RL_SIG_RECEIVED after each call to
- the entry function, call RL_CHECK_SIGNALS if true to handle the
- signal
- - rl_completion_matches: if RL_SIG_RECEIVED evaluates to true, free
- and zero out the match_list this function allocated
- - rl_completion_matches: if the completion entry function is
- rl_filename_completion_function, free the contents of match_list,
- because that function does not keep state and will not free the
- entries; avoids possible memory leak pointed out by
- Garrett Cooper <yanegomi@gmail.com>
- - gen_completion_matches: if RL_SIG_RECEIVED evalutes to true after
- calling rl_attempted_completion_function, free the returned match
- list and handle the signal with RL_CHECK_SIGNALS; avoids
- possible memory leak pointed out by Garrett Cooper
- <yanegomi@gmail.com>
- - gen_completion_matches: if RL_SIG_RECEIVED evaluates to true after
- calling rl_completion_matches, free the returned match list and
- handle the signal with RL_CHECK_SIGNALS
-
-lib/readline/util.c
- - rl_settracefp: new utility function to set the tracing FILE *
-
-lib/readline/signals.c
- - _rl_sigcleanup: pointer to a function that will be called with the
- signal and a void * argument from _rl_handle_signal
- - _rl_sigcleanarg: void * that the rest of the code can set to have
- passed to the signal cleanup function
- - _rl_handle_signal: if _rl_sigcleanup set, call as
- (*_rl_sigcleanup) (sig, _rl_sigcleanarg)
-
-lib/readline/rlprivate.h
- - extern declarations for _rl_sigcleanup and _rl_sigcleanarg
-
-lib/readline/complete.c
- - _rl_complete_sigcleanup: signal cleanup function for completion code;
- calls _rl_free_match_list on _rl_sigcleanarg if signal == SIGINT
- - rl_complete_internal: before calling display_matches if what_to_do
- == `?', set _rl_sigcleanup to _rl_complete_sigcleanup so the match
- list gets freed on SIGINT; avoids possible memory leak pointed out
- by Garrett Cooper <yanegomi@gmail.com>
- - rl_complete_internal: in default switch case, call _rl_free_match_list
- before returning to avoid memory leak
-
-doc/bashref.texi
- - start at a set of examples for the =~ regular expression matching
- operator, touching on keeping the pattern in a shell variable and
- quoting portions of the pattern to remove their special meaning
-
- 12/1
- ----
-lib/glob/gmisc.c
- - extglob_pattern: new function, returns 1 if pattern passed as an
- argument looks like an extended globbing pattern
-
-lib/glob/glob.c
- - skipname: return 0 immediately if extglob_pattern returns non-zero,
- let the extended globbing code do the right thing with skipping
- names beginning with a `.'
- - mbskipname: return 0 immediately if extglob_pattern returns non-zero,
- let the extended globbing code do the right thing with skipping
- names beginning with a `.'. Fixes bug reported by Yongzhi Pan
- <panyongzhi@gmail.com>
-
- 12/2
- ----
-lib/glob/smatch.c
- - patscan, patscan_wc: no longer static so other parts of the glob
- library can use them, renamed to glob_patscan, glob_patscan_wc
-
-lib/glob/glob.c
- - extern declarations for glob_patscan, glob_patscan_wc
- - wchkname: new function, does skipname on wchar_t pattern and dname,
- old body of mbskipname after converting to wide chars
- - extglob_skipname: new function, checks all subpatterns in an extglob
- pattern to determine whether or not a filename should be skipped.
- Calls skipname for each subpattern. Dname is only skipped if all
- subpatterns indicate it should be. Better fix for bug reported by
- Yongzhi Pan <panyongzhi@gmail.com>
- - wextglob_skipname: wide-char version of extglob_skipname, calls
- wchkname instead of calling back into mbskipname for each
- subpattern to avoid problems with char/wchar_t mismatch
- - skipname: call extglob_skipname if extglob_pattern returns non-zero
- - mbskipname: call wextglob_skipname if extglob_pattern returns non-zero
- - mbskipname: short-circuit immediately if no multibyte chars in
- pattern or filename
-
-execute_cmd.c
- - execute_cond_node: added parens to patmatch assignment statement to
- make intent clearer
-
- 12/3
- ----
-configure.in,config.h.in
- - check for imaxdiv, define HAVE_IMAXDIV if present
-
-expr.c
- - expassign, exp2: use imaxdiv if available. Doesn't help with checks
- for overflow from 10/25
-
- 12/6
- ----
-lib/readline/complete.c
- - compute_lcd_of_matches: if we're ignoring case in the matches, only
- use what the user typed as the lcd if it matches the first match
- (after sorting) up to the length of what was typed (if what the
- user typed is longer than the shortest of the possible matches, use
- the shortest common length of the matches instead). If it doesn't
- match, use the first of the list of matches, as if case were not
- being ignored. Fixes bug reported by Clark Wang
- <dearvoid@gmail.com>
-
- 12/7
- ----
-builtins/cd.def
- - cd_builtin: add code to return error in case cd has more than one
- non-option argument, conditional on CD_COMPLAINS define (which is
- not defined anywhere)
-
-doc/{bash.1,bashref.texi}
- - note that additional arguments to cd following the directory name
- are ignored. Suggested by Vaclav Hanzl <hanzl@noel.feld.cvut.cz>
-
- 12/10
- -----
-lib/readline/input.c
- - rl_read_key: don't need to increment key sequence length here; doing
- it leads to an off-by-one error
-
-lib/readline/macro.c
- - rl_end_kbd_macro: after off-by-one error with rl_key_sequence_length
- fixed, can decrement current_macro_index by rl_key_sequence_length
- (length of key sequence that closes keyboard macro)
-
-lib/readline/readline.c
- - _rl_dispatch_subseq: fix extra increment of rl_key_sequence_length
- when ESC maps to a new keymap and we're converting meta characters
- to ESC+key
- - _rl_dispatch_subseq: better increment of rl_key_sequence_length
- before we dispatch to a function in the ISFUNC case (where the
- second increment above should have happened)
- - rl_executing_keyseq: the full key sequence that ended up executing
- a readline command. Available to the calling application, maintained
- by _rl_dispatch_subseq, indexed by rl_key_sequence_length
- - rl_executing_key: the key that was bound to the currently-executing
- readline command. Same as the `key' argument to the function
-
-lib/readline/readline.h
- - rl_executing_keyseq: extern declaration
- - rl_executing_key: extern declaration
- - rl_key_sequence_length: declaration moved here from rlprivate.h,
- now part of public interface
-
-lib/readline/rlprivate.h
- - new extern declaration for _rl_executing_keyseq_size, buffer size
- for rl_executing_keyseq
-
-lib/readline/doc/rltech.texi
- - documented new variables: rl_executing_key, rl_executing_keyseq,
- rl_key_sequence_length
-
- 12/13
- -----
-bashline.c
- - bash_execute_unix_command: replace ad-hoc code that searches
- cmd_xmap for correct command with call to rl_function_of_keyseq
- using rl_executing_keyseq; now supports key sequences longer
- than two characters. Fixes bug reported by Michael Kazior
- <kazikcz@gmail.com>
-
- 12/15
- -----
-make_cmd.c
- - make_function_def: don't null out source_file before calling
- make_command so it can be used later on when the function definition
- is executed
-
-execute_cmd.c
- - execute_intern_function: second argument is now FUNCTION_DEF *
- instead of COMMAND *
- - execute_command_internal: call execute_intern_function with the
- new second argument (the entire FUNCTION_DEF instead of just the
- command member)
- - execute_intern_function: if DEBUGGER is defined, call
- bind_function_def before calling bind_function, just like
- make_function_def does (might be able to take out the call in
- make_function_def depending on what the debugger does with it).
- Fixes bug reported by <dethrophes@motd005>
-
-expr.c
- - more minor changes to cases of INTMAX_MIN % -1 and INTMAX_MIN / 1;
- fix typos and logic errors
-
- 12/16
- -----
-bashline.c
- - find_cmd_start: change flags to remove SD_NOSKIPCMD so it skips over
- command substitutions and doesn't treat them as command separators
- - attempt_shell_completion: instead of taking first return from
- find_cmd_name as command name to use for programmable completion,
- use loop to skip over assignment statements. Fixes problem reported
- by Raphael Droz <raphael.droz+floss@gmail.com>
- - attempt_shell_completion: if we don't find a command name but the
- command line is non-empty, assume the other words are all assignment
- statements and flag that point is in a command position so we can
- do command name completion
- - attempt_shell_completion: if the word being completed is the first
- word following a series of assignment statements, and the
- command line is non-empty, flag that point is in a command position
- so we can do command name completion
-
-lib/readline/history.c
- - history_get_time: atol -> strtol
-
- 12/18
- -----
-parse.y
- - parser_in_command_position: external interface to the
- command_token_position macro for use by other parts of the shell,
- like the completion mechanism
-
-externs.h
- - extern declaration for parser_in_command_position
-
- 12/19
- -----
-
-builtins/read.def
- - read_builtin: make sure all calls to bind_read_variable are passed
- a non-null string. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
-bashline.c
- - attempt_shell_completion: mark that we're in a command position if
- we're at the start of the line and the parser is ready to accept
- a reserved word or command name. Feature most recently suggested
- by Peng Yu <pengyu.ut@gmail.com>
-
- 12/21
- -----
-lib/readline/bind.c
- - _rl_escchar: return the character that would be backslash-escaped
- to denote the control character passed as an argument ('\n' -> 'n')
- - _rl_isescape: return 1 if character passed is one that has a
- backslash escape
- - _rl_untranslate_macro_value: new second argument: use_escapes, if
- non-zero translate to backslash escapes where possible instead of
- using straight \C-x for control character `x'. Change callers
- - _rl_untranslate_macro_value: now global
-
-lib/readline/rlprivate.h
- - _rl_untranslate_macro_value: extern declaration
-
-lib/readline/{macro.c,readline.h}
- - rl_print_last_kbd_macro: new bindable function, inspired by patch
- from Mitchel Humpherys
-
-lib/readline/funmap.c
- - print-last-kbd-macro: new bindable command, bound to
- rl_print_last_kbd_macro
-
-lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
- - print-last-kbd-macro: document.
-
-lib/readline/text.c
- - _rl_insert_next: if we're defining a macro, make sure the key gets
- added to the macro text (should really audit calls to rl_read_key()
- and make sure the right thing is happening for all of them)
-
-bashline.[ch]
- - print_unix_command_map: new function, prints all bound commands in
- cmd_xmap using rl_macro_dumper in a reusable format
-
-builtins/bind.def
- - new -X option: print all keysequences bound to Unix commands using
- print_unix_command_map. Feature suggested by Dennis Williamson
- (2/2011)
-
-doc/{bash.1,bashref.texi}
- - document new `bind -X' option
-
- 12/24
- -----
-
-doc/{bash.1,bashref.texi}
- - add a couple of sentences to the description of the case modification
- operators making it clearer that each character of parameter is
- tested against the pattern, and that the pattern should only attempt
- to match a single character. Suggested by Bill Gradwohl
- <bill@ycc.com>
-
- 12/28
- -----
-shell.c
- - init_noninteractive: instead of calling set_job_control(0) to
- unconditionally turn off job control, turn on job control if
- forced_interactive or jobs_m_flag is set
- - shell_initialize: call initialize_job_control with jobs_m_flag as
- argument so `bash -m script' enables job control while running the
- script
-
-jobs.c
- - initialize_job_control: if the `force' argument is non-zero, turn on
- job control even if the shell is not currently interactive
- (interactive == 0)
-
- 12/29
- -----
-
-flags.h
- - new extern declaration for jobs_m_flag
-
-builtins/{cd,set}.def,doc/{bash.1,bashref.texi}
- - added text clarifying the descriptions of cd -L and -P, suggested by
- Padraig Brady <p@draigbrady.com>
- - slight change to the description of `set -P' about resolving symbolic
- links
-
-lib/readline/doc/rluser.texi
- - Added an example to the programmable completion section: _comp_cd,
- a completion function for cd, with additional verbiage. Text
- includes a reference to the bash_completion project
-
- 1/1/2012
- --------
-jobs.c
- - set_job_status_and_cleanup: note that a job is stopped due to
- SIGTSTP (any_tstped) if job_control is set; there's no need to
- test interactive
-
- 1/5
- ---
-quit.h
- - LASTSIG(): new macro, expands to signal number of last terminating
- signal received (terminating_signal or SIGINT)
-
-trap.c
- - first_pending_trap: returns lowest signal number with a trap pending
- - trapped_signal_received: set to the last trapped signal the shell
- received in trap_handler(); reset to 0 in run_pending_traps
-
-builtins/read.def
- - read_builtin: changes to posix-mode (posixly_correct != 0) to make
- `read' interruptible by a trapped signal. After the trap runs,
- read returns 128+sig and does not assign the partially-read line
- to the named variable(s). From an austin-group discussion started
- by David Korn
-
- 1/11
- ----
-doc/{bash.1,bashref.texi}
- - slight changes to the descriptions of the compat32 and compat40 shell
- options to clarify their meaning
-
- 1/12
- ----
-lib/readline/{colors.[ch],parse-colors.[ch]}
- - new files, part of color infrastructure support
-
-Makefile.in,lib/readline/Makefile.in
- - arrange to have colors.o and parse-colors.o added to readline
- library
-
-{configure,config.h}.in
- - check for stdbool.h, define HAVE_STDBOOL_H if found
-
- 1/14
- ----
-lib/readline/bind.c
- - colored_stats: new bindable variable, enables using colors to
- indicate file type when listing completions
-
-lib/readline/complete.c
- - _rl_colored_stats: new variable, controlled by colored-stats bindable
- variable
- - colored_stat_start, colored_stat_end: new functions to set and reset
- the terminal color appropriately depending on the type of the
- filename to be printed
- - print_filename: changes to print colors if `colored-stats' variable
- set. Changes contributed by Raphael Droz
- <raphael.droz+floss@gmail.com>
-
-lib/readline/readline.c
- - rl_initialize_everything: add call to _rl_parse_colors to parse
- color values out of $LS_COLORS. May have to add to rl_initialize
- to make more dynamic if LS_COLORS changes (which doesn't happen
- very often, if at all)
-
-lib/readline/rlprivate.h
- - _rl_colored_stats: new extern declaration
-
-lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
- - colored-stats: document new bindable readline variable
-
-lib/readline/colors.c
- - _rl_print_color_indicator: call rl_filename_stat_hook before calling
- lstat/stat so we can get color indicators for stuff like
- $HOME/Applications
-
-lib/readline/complete.c
- - stat_char: call rl_filename_stat_hook before calling lstat/stat
-
-findcmd.[ch],execute_cmd.c
- - search_for_command: now takes a second `flags' argument; changed
- header function prototype and callers
- - search_for_command: if (flags & 1), put the command found in $PATH
- into the command hash table (previous default behavior)
-
-execute_cmd.c
- - is_dirname: call search_for_command with flags argument of 0 so it
- doesn't try to put something in the command hash table
-
-bashline.c
- - bash_command_name_stat_hook: a hook function for readline's
- filename_stat_hook that does $PATH searching the same way that
- execute_cmd.c:execute_disk_command() does it, and rewrites the
- passed filename if found. Does not put names into command hash
- table. This allows command name completion to take advantage
- of `visible-stats' and `colored-stats' settings.
- - executable_completion: new function, calls the directory completion
- hook to expand the filename before calling executable_file or
- executable_or_directory; change command_word_completion_function to
- call executable_completion. This allows $HOME/bin/[TAB] to do
- command completion and display alternatives
-
- 1/17
- ----
-pcomplete.c
- - gen_command_matches: now takes a new second argument: the command
- name as deciphered by the programmable completion code and used
- to look up the compspec; changed callers (gen_compspec_completions)
- - gen_shell_function_matches: now takes a new second argument: the
- command that originally caused the completion function to be
- invoked; changed callers (gen_compspec_completions))
- - build_arg_list: now takes a new second argument: the command name
- corresponding to the current compspec; changed callers
- (gen_command_matches, gen_shell_function_matches)
- - build_arg_list: now uses `cmd' argument to create $1 passed to
- invoked command or shell function
- - gen_compspec_completions: if we skipped a null command at the
- beginning of the line (e.g., for completing `>'), add a new word for
- it at the beginning of the word list and increment nw and cw
- appropriately. This is all a partial fix for the shortcoming
- pointed out by Sung Pae <sungpae@gmail.com>
-
- 1/18
- ----
-
-{configure,config.h}.in
- - new check: check for AUDIT_USER_TTY defined in <linux/audit.h>,
- define HAVE_DECL_AUDIT_USER_TTY if both are found
-
-lib/readline/rlconf.h
- - ENABLE_TTY_AUDIT_SUPPORT: new define, allows use of the Linux kernel
- tty auditing system if it's available and enabled
-
-lib/readline/util.c
- - _rl_audit_tty: new function, send a string to the kernel tty audit
- system
-
-lib/readline/rlprivate.h
- - _rl_audit_tty: new extern declaration
-
-lib/readline/readline.c
- - readline: call _rl_audit_tty with line to be returned before returning
- it if the Linux tty audit system is available and it's been enabled
- in rlconf.h Original patch from Miroslav Trmac; recent request
- from Miroslav Lichvar <mlichvar@redhat.com>
-
- 1/21
- ----
-
-lib/readline/readline.c:
- - _rl_dispatch_subseq: add an inter-character timeout for multi-char
- key sequences. Suggested by <rogerx.oss@gmail.com>. Still needs
- work to make a user-settable variable
-
-parse.y
- - shell_getc: make code that uses the pop_alias dependent on ALIAS
- define
-
-variables.h
- - sv_tz: extern define should only depend on HAVE_TZSET
-
-expr.c
- - expr_streval: if ARRAY_VARS is not defined, set lvalue->ind to -1;
- move assignment to `ind' inside define
- - expr_bind_array_element: declaration and uses need to be #ifdef
- ARRAY_VARS
-
-arrayfunc.h
- - AV_ALLOWALL, AV_QUOTED, AV_USEIND: define to 0 if ARRAY_VARS not
- defined; used in subst.c unconditionally
-
-sig.h
- - make the signal blocking functions not dependent on JOB_CONTROL
-
-sig.c
- - sigprocmask: make the replacement definition not dependent on
- JOB_CONTROL
-
-trap.c
- - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on
- HAVE_POSIX_SIGNALS and BSD signals
-
- 1/24
- ----
-
-print_cmd.c
- - print_redirection_list: change the conditions under which
- r_duplicating_output_word is mapped to r_err_and_out to more or
- less match those used in redir.c. Fixes bug pointed out by
- Dan Douglas <ormaaj@gmail.com>
-
-
- 1/29
- ----
-lib/readline/signals.c
- - _rl_block_sigwinch,_rl_release_sigwinch: don't compile in bodies
- unless SIGWINCH is defined. Fixes bug reported by Pierre Muller
- <pierre.muller@ics-cnrs.unistra.fr>
-
-doc/{bash.1,bashref.texi}
- - small modifications to the introduction to the REDIRECTION section
- to describe how redirections can modify file handles
- - small modification to the section describing base#n to make it
- clearer that n can be denoted using non-numerics. From a posting
- by Linda Walsh <bash@tlinx.org>
-
- 2/2
- ---
-builtins/printf.def
- - printf_builtin: make sure vbuf is intialized and non-null when -v
- is supplied, since other parts of the code assume that it's not
- null (e.g., bind_printf_variable()). Fixes bug reported by Jim
- Avera <james_avera@yahoo.com>
-
- 2/4
- ---
-lib/readline/undo.c
- - _rl_free_undo_list: new function, old body of rl_free_undo_list,
- frees undo entries in UNDO_LIST * passed as argument
- - rl_free_undo_list: call _rl_free_undo_list
-
-lib/readline/rlprivate.h
- - _rl_free_undo_list: new extern declaration
- - _rl_keyseq_timeout: new extern declaration (see below)
-
-lib/readline/misc.c
- - rl_clear_history: new function. Clears the history list and frees
- all associated data similar to history.c:clear_history(), but
- takes rl_undo_list into account and frees and UNDO_LISTs saved as
- `data' members of a history list entry
-
-lib/readline/doc/rltech.texi
- - rl_clear_history: documented
-
-lib/readline/readline.c
- - _rl_keyseq_timeout: new variable to hold intra-key timeout value
- from 1/21 fix; specified in milliseconds. Default value is 500
- - _rl_dispatch_subseq: change to use _rl_keyseq_timeout as intra-key
- timeout if it's greater than 0; no timeout if <= 0
- - _rl_dispatch_subseq: don't check for queued keyboard input if we have
- pushed or pending input, or if we're reading input from a macro
-
-lib/readline/bind.c
- - keyseq-timeout: new bindable variable, shadows _rl_keyseq_timeout
- - string_varlist: add keyseq-timeout
- - sv_seqtimeout: new function to modify value of _rl_keyseq_timeout;
- clamps negative values at 0 for now
- - _rl_get_string_variable_value: return value for keyseq-timeout
-
-doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
- - keyseq-timeout: documented
-
-lib/readline/isearch.c
- - _rl_isearch_dispatch: modification to fix from 7/18 to not use
- cxt->keymap and cxt->okeymap, since by the time this code is
- executed, they are equal. Use `f' to check for rl_insert or
- unbound func
- - _rl_isearch_dispatch: if we're switching keymaps, not in
- callback mode, and don't have pending or pushed input, use
- _rl_input_queued to resolve a potentially ambiguous key sequence.
- Suggested by Roger Zauner <rogerx.oss@gmail.com>
- - _rl_isearch_dispatch: if we have changed keymaps and resolved to
- an editing function (not self-insert), make sure we stuff the
- right characters back onto the input after changing the keymap
- back so the right editing function is executed after the search
- is terminated. Rest of fix for bug reported by Roger Zauner
- <rogerx.oss@gmail.com>
-
- 2/5
- ---
-builtins/gen-helpfiles.c
- - new file: reads struct builtin and writes the long docs to files
- in the `helpdirs' subdirectory. The filename is given in the
- previously-unused `handle' member of the struct builtin. Links
- with `tmpbuiltins.o', which is created by Makefile to have the
- right long documentation. When not cross-compiling, gets the
- right #defines based on configuration options from config.h instead
- of trying to parse conditional parts of def files. Fixes
- shortcoming pointed out by Andreas Schwab <schwab@linux-m68k.org>
-
-builtins/Makefile.in
- - tmpbuiltins.c: new generated file, created to enable creation of
- separate helpfiles based on correct #defines instead of trying to
- parse conditional parts of def files
- - gen-helpfiles: new program to generate helpfiles, links with
- tmpbuiltins.o
- - HELPFILES_TARGET: new target, substituted by configure to `helpdoc'
- if separate helpfiles requested
- - targets: new target, libbuiltins.a and $(HELPFILES_TARGET)
- - CREATED_OBJECTS: new variable, holds created object files for
- make clean; changed make clean to remove created objects
- - helpdoc: changed to call gen-helpfiles instead of mkbuiltins
-
-Makefile.in
- - when building libbuiltins.a, recursively call make with `targets'
- argument to make sure separate helpfiles get built
-
-configure.in
- - substitute `helpdoc' as value of HELPFILES_TARGET if
- --enable-separate-helpfiles supplied as configure argument
-
-builtins/mkbuiltins.c
- - `-nofunctions': new argument, causes mkbuiltins to not write value
- for function implementing a particular builtin to struct builtin
- and to write document file name to `handle' member of struct builtin
- - no longer writes separate helpfiles; that is left to gen-helpfiles
-
- 2/8
- ---
-subst.c
- - make sure last_command_exit_value is set to a non-zero value before
- any calls to report_error, since `-e' set will short-circuit
- report_error. Fixes bug reported by Ewan Mellor
- <Ewan.Mellor@eu.citrix.com>
-
-variables.c
- - make_local_array_variable: added second argument; if non-zero,
- function will return an existing local associative array variable
- instead of insisting on an indexed array
-
-variable.h,subst.c
- - make_local_array_variable: changed prototype and caller
-
-builtins/declare.def
- - declare_internal: add second arg to call to make_local_array_variable;
- making_array_special, which indicates we're processing an
- assignment like declare a[b]=c. Fixes seg fault resulting from
- a being an already-declared local associative array variable in a
- function. Ubuntu bash bug 928900.
-
- 2/14
- ----
-
-execute_cmd.c
- - execute_command_internal: if redirections into or out of a loop fail,
- don't try to free ofifo_list unless saved_fifo is non-zero. It's
- only valid if saved_fifo is set
-
- 2/15
- ----
-{arrayfunc,braces,variables}.c
- - last_command_exit_value: make sure it's set before any calls to
- report_error, since -e will cause that to exit the shell
-
-builtins/common.c
- - get_job_by_name: call internal_error instead of report_error so this
- doesn't exit the shell
-
- 2/18
- ----
-builtins/evalstring.c
- - parse_and_execute: make sure the file descriptor to be redirected to
- is 1 before calling cat_file. One fix for bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
-parse.y
- - read_token_word: don't return NUMBER if a string of all digits
- resolves to a number that overflows the bounds of an intmax_t.
- Other fix for bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 2/19
- ----
-lib/sh/strtrans.c
- - ansicstr: use 0x7f as the boundary for characters that translate
- directly from ASCII to unicode (\u and \U escapes) instead of
- UCHAR_MAX, since everything >= 0x80 requires more than one byte.
- Bug and fix from John Kearney <dethrophes@web.de>
-
-builtins/printf.def
- - tescape: ditto for printf \u and \U escape sequences
-
- 2/20
- ----
-lib/sh/unicode.c
- - u32toutf8: fix to handle encodings up to six bytes long correctly
- (though technically UTF-8 only has characters up to 4 bytes long).
- Report and fix from John Kearney <dethrophes@web.de>
- - u32toutf8: first argument is now an unsigned 32-bit quantity,
- changed callers (u32cconv) to pass c instead of wc
- - u32reset: new function, resets local static state to uninitialized
- (locale information, currently)
-
-locale.c
- - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the
- cached locale information used by u32cconv. From a report from
- John Kearney <dethrophes@web.de>
-
- 2/21
- ----
-doc/{bash,builtins}.1
- - minor changes from Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
-
-lib/sh/unicode.c
- - u32cconv: only assume you can directly call wctomb on the passed
- value if __STDC_ISO_10646__ is defined and the value is <=
- 0x7fffffff
- - stub_charset: return locale as default instead of "ASCII", let
- rest of code decide what to do with it
-
-lib/readline/parens.c
- - _rl_enable_paren_matching: make paren matching work in vi insert
- mode. Bug report from <derflob@derflob.de>
-
- 2/22
- ----
-lib/sh/shquote.c
- - sh_backslash_quote: quote tilde in places where it would be
- expanded. From a report from John Kearney <dethrophes@web.de>
-
- 2/23
- ----
-execute_cmd.c
- - execute_pipeline: wrap the discard_unwind_frame call in #ifdef
- JOB_CONTROL, since the frame is only created if JOB_CONTROL is
- defined. Bug and fix from Doug Kehn <rdkehn@yahoo.com>
-
- 2/25
- ----
-error.c
- - report_error: make sure last_command_exit_value is non-zero before
- we call exit_shell, since the exit trap may reference it. Call
- exit_shell with last_command_exit_value to allow exit statuses
- other than 1
-
-unicode.c
- - stub_charset: use local static buffer to hold charset, don't change
- value returned by get_locale_var. Based on idea and code from
- John Kearney <dethrophes@web.de>
- - u32toutf16: function to convert unsigned 32-bit value (unicode) to
- UTF-16. From John Kearney <dethrophes@web.de>
- - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t
- is two bytes, send result to wcstombs, return if not encoding error.
- From John Kearney <dethrophes@web.de>
- - u32cconv: return UTF-8 conversion if iconv conversion to local
- charset is unsupported
-
- 3/2
- ---
-lib/readline/complete.c
- - print_filename: if there is no directory hook, but there is a stat
- hook, and we want to append a slash to directories, call the stat
- hook before calling path_isdir on the expanded directory name.
- Report and pointer to fix from Steve Rago <sar@nec-labs.com>
-
- 3/3
- ---
-builtins/evalstring.c
- - parse_and_execute: fix to change of 2/18: make sure the file
- descriptor being redirected to is 0 before calling cat_file when
- we see something like $(< file). Real fix for bug reported by
- Dan Douglas <ormaaj@gmail.com>
-
-subst.c
- - parameter_brace_patsub: run the replacement string through quote
- removal even if the expansion is within double quotes, because
- the parser and string extract functions treat the quotes and
- backslashes as special. If they're treated as special, quote
- removal should remove them (this is the Posix position and
- compatible with ksh93). THIS IS NOT BACKWARDS COMPATIBLE.
-
- 3/4
- ---
-lib/readline/complete.c
- - rl_menu_complete: fix to make show-all-if-ambiguous and
- menu-complete-display-prefix work together if both are set. Fix
- from Sami Pietila <sami.pietila@gmail.com>
-
- 3/5
- ---
-bashline.c
- - dircomplete_expand_relpath: new variable, if non-zero, means that
- `shopt -s direxpand' should expand relative pathnames. Zero by
- default, not user-settable yet
- - bash_directory_completion_hook: if we have a relative pathname that
- isn't changed by canonicalization or spell checking after being
- appended to $PWD, then don't change what the user typed. Controlled
- by dircomplete_expand_relpath
-
- 3/7
- ---
-m4/timespec.m4
- - new macros, cribbed from gnulib and coreutils: find out whether we
- have `struct timespec' and what file includes it
-
-m4/stat-time.m4
- - new macros, cribbed from gnulib and coreutils: find out whether the
- mtime/atime/ctime/etctime fields of struct stat are of type
- struct timespec, and what the name is
-
-include/stat-time.h
- - new file, cribbed from gnulib, with additions from coreutils: include
- the right file to get the struct timespec define, or provide our own
- replacement. Provides a bunch of inline functions to turn the
- appropriate members of struct stat into `struct timespec' values,
- zeroing out the tv_nsec field if necessary
-
-test.c
- - include "stat-time.h" for the nanosecond timestamp resolution stuff
- - stat_mtime: new function, returns struct stat and the mod time
- normalized into a `struct timespec' for the filename passed as the
- first argument
- - filecomp: call stat_mtime instead of sh_stat for each filename
- argument to get the mtime as a struct timespec
- - filecomp: call timespec_cmp instead of using a straight arithmetic
- comparison for the -nt and -ot operators, using timespec returned by
- stat_mtime. Added functionality requested by by Werner Fink
- <werner@suse.de> for systems that can support it
-
- 3/10
- ----
-include/posixdir.h
- - REAL_DIR_ENTRY: remove dependency on _POSIX_SOURCE, only use feature
- test macros to decide whether dirent.d_ino is present and usable;
- define D_INO_AVAILABLE. Report and fix from Fabrizion Gennari
- <fabrizio.ge@tiscali.it>
- - D_FILENO_AVAILABLE: define if we can use dirent.d_fileno
-
-lib/sh/getcwd.c
- - use D_FILENO_AVAILABLE to decide whether or not to compile in
- _path_checkino and whether or not to call it. Report and initial
- fix from Fabrizion Gennari <fabrizio.ge@tiscali.it>
-
-lib/readline/signals.c
- - make sure all occurrences of SIGWINCH are protected by #ifdef
-
-sig.c
- - make sure all occurrences of SIGCHLD are protected by #ifdef
-
-nojobs.c
- - make sure SA_RESTART is defined to 0 if the OS doesn't define it
-
-version.c
- - show_shell_version: don't use string literals in printf, use %s.
- Has added benefit of removing newline from string to be translated
-
-trap.c
- - queue_sigchld_trap: new function, increments the number of pending
- SIGCHLD signals by the argument, which is by convention the number
- of children reaped in a call to waitchld()
-
-trap.h
- - queue_sigchld_trap: new extern declaration
-
-jobs.c
- - waitchld: if called from the SIGCHLD signal handler (sigchld > 0),
- then call queue_sigchld_trap to avoid running the trap in a signal
- handler context. Report and original fix from Siddhesh Poyarekar
- <siddhesh@redhat.com>
-
-lib/sh/unicode.c
- - u32tocesc: take an unsigned 32-bit quantity and encode it using
- ISO C99 string notation (\u/\U)
- - u32cconv: call u32tocesc as a fallback instead of u32cchar
- - u32cconv: call u32tocesc if iconv cannot convert the character.
- Maybe do the same thing if iconv_open fails
- - u32reset: call iconv_close on localconv if u32init == 1
-
- 3/11
- ----
-config-top.h
- - CHECKWINSIZE_DEFAULT: new define, set to initial value of
- check_window_size (shopt checkwinsize): 0 for off, 1 for on.
- Default is 0
-
-{jobs,nojobs}.c
- - check_window_size: default initial value to CHECKWINSIZE_DEFAULT
-
- 3/13
- ----
-doc/bashref.texi
- - change text referring to the copying restrictions to that
- recommended by the FSF (no Front-Cover Texts and no Back-Cover
- Texts)
-
-lib/readline/doc/{history,rlman,rluserman}.texi
- - change text referring to the copying restrictions to that
- recommended by the FSF (no Front-Cover Texts and no Back-Cover
- Texts)
-
- 3/15
- ----
-array.c
- - LASTREF_START: new macro to set the starting position for an array
- traversal to `lastref' if that's valid, and to the start of the array
- if not. Used in array_reference, array_insert, array_remove
- - array_remove: try to be a little smarter with lastref instead of
- unconditionally invalidating it
-
- 3/16
- ----
-array.c
- - array_insert: fix memory leak by deleting element to be added in the
- case of an error
-
- 3/18
- ----
-lib/sh/mbschr.c
- - mbschr: don't call mbrlen unless is_basic is false; devolves to a
- straight character-by-character run through the string
-
- 3/19
- ----
-stringlib.c
- - substring: use memcpy instead of strncpy, since we know the length
- and are going to add our own NUL terminator
-
- 3/20
- ----
-subst.c
- - parameter_brace_expand_rhs: if expand_string_for_rhs returns a quoted
- null string (a list with one element for which
- QUOTED_NULL(list->word->word) returns true), return the quoted null
- and set the flags in the returned word to indicate it. Fixes bug
- reported by Mark Edgar <medgar123@gmail.com>
-
-lib/sh/tmpfile.c
- - use random(3) instead of get_random_number to avoid perturbing the
- random sequence you get using $RANDOM. Bug report and fix from
- Jurij Mihelic <jurij.mihelic@fri.uni-lj.si>
-
- 3/21
- ----
-config-top.h
- - OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT: define to 1 to optimize
- sequential indexed array assignment patterns. Defined to 1 by
- default
-
-array.c
- - array_insert: if OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT is defined,
- start the search at lastref (see change from 3/15)
-
- 3/27
- ----
-print_cmd.c
- - debug_print_word_list: new debugging function, prints a word list
- preceded by an optional string and using a caller-specified
- separator
-
- 4/1
- ---
-command.h
- - W_ASSNGLOBAL: new flag, set to indicate declare -g
-
-execute_cmd.c
- - fix_assignment_words: note that we have a -g argument to an assignment
- builtin and set the W_ASSNGLOBAL flag in the variable word
-
-subst.c
- - dump_word_flags: print out W_ASSNGLOBAL if present
- - do_assignment_internal: only set ASS_MKLOCAL if W_ASSIGNARG is set
- and W_ASSNGLOBAL is not. Don't want to create a local variable even
- if variable_context is non-zero if ASSNGLOBAL is set. Fixes bug
- reported by Bill Gradwohl <bill@ycc.com>
-
- 4/7
- ---
-lib/readline/readline.c
- - _rl_dispatch_subseq: make the `keyseq-timeout' variable apply to
- ESC processing when in vi mode. After hitting ESC, readline will
- wait up to _rl_keyseq_timeout*1000 microseconds (if set) for
- additional input before dispatching on the ESC and switching to
- command/movement mode. Completes timeout work suggested by
- <rogerx.oss@gmail.com>; this prompted by report from Barry Downes
- <barry.downes@gmail.com>
-
-lib/sh/shmbchar.c
- - sh_mbsnlen: new function, returns the number of (possibly multibyte)
- characters in a passed string with a passed length, examining at most
- maxlen (third argument) bytes
-
-externs.h
- - sh_mbsnlen: extern declaration for new function
-
-shell.c
- - exit_shell: call maybe_save_shell_history if remember_on_history is
- set, not just in interactive shells. That means the history is
- saved if history is enabled, regardless of whether or not the shell
- is interactive
-
-doc/{bash.1,bashref.texi}
- - TMOUT: fix description to make it explicit that TMOUT is the timeout
- period for a complete line of input, not just any input. Fixes
- problem reported in Ubuntu bug 957303:
- https://bugs.launchpad.net/ubuntu/+source/bash/+bug/957303
- - HISTFILE: document change to write history list to history file in
- any shell with history enabled, not just interactive shells. This
- seems to be more logical behavior. Suggested by Greg Wooledge
- <wooledg@eeg.ccf.org>
-
- 4/12
- ----
-lib/readline/colors.h
- - only include stdbool.h if HAVE_STDBOOL_H is defined
- - if HAVE_STDBOOL_H is not defined, provide enough definition for the
- library to use `bool', `true', and `false'
-
-lib/readline/parse-colors.[ch]
- - don't try to include <stdbool.h> at all; rely on colors.h to do it
-
-lib/sh/snprintf.c
- - vsnprintf_internal: only treat '0' as a flag to indicate zero padding
- if `.' hasn't been encountered ((flags&PF_DOT) == 0); otherwise treat
- it as the first digit of a precision specifier. Fixes bug reported
- by Petr Sumbera <petr.sumbera@sun.com>
-
- 4/15
- ----
-lib/sh/snprintf.c
- - vsnprintf_internal: if the '0' and '-' flags both occur, the '0'
- flag is ignored -- Posix. Start of a series of fixes based on
- tests and patches from Petr Sumbera <petr.sumbera@sun.com>
- - PUT_PLUS: make sure PF_PLUS flag is specified before putting the `+'
- - vsnprintf_internal: when '+' is read as a flag, don't set right-
- justify flag if the LADJUST (`-') flag has already been supplied
- - floating: make sure to output space padding before the `+', zero
- padding after
- - exponent: make sure to output space padding before the `+', zero
- padding after
- - exponent: only subtract one from the width for the decimal point
- if we're really going to print one
- - floating: use presence of PF_PLUS flag to decide whether to account
- for the `+' in the padded field width. Ditto for exponent()
-
- 4/16
- ----
-lib/sh/snprintf.c
- - vsnprint_internal: only reduce precision by 1 when processing the `g'
- format if it's > 0. A precision of 0 should stay 0; otherwise it
- gets set to -1 (NOT_FOUND) and converted to the default
- - number, lnumber: if an explicit precision is supplied, turn off the
- zero-padding flag and set the pad character back to space
- - number, lnumber: only account for a `+' when performing the field
- width calculation if the coversion is base 10; we don't add a `+'
- for other bases
-
- 4/18
- ----
-tests/printf3.sub
- - try using "perl -e 'print time'" to get the current time in seconds
- since the epoch if "date +%s" is not available (solaris 8-10)
-
- 4/19
- ----
-tests/run-printf
- - use cat -v instead of relying on diff -a being available to convert
- control characters to ascii and avoid the dreaded "Binary files
- /tmp/xx and printf.right differ"
-
- 4/20
- ----
-lib/sh/strftime.c
- - incoporated new version from Aharon Robbins <arnold@skeeve.com>
-
- 4/22
- ----
-doc/{bash.1,bashref.texi}
- - slight change to the description of /dev/tcp and /dev/udp
-
-subst.c
- - match_wpattern: logic fix to the calculation of `simple' (was |=,
- needs to be &=). Bug report from Mike Frysinger <vapier@gentoo.org>,
- fix from Andreas Schwab <schwab@linux-m68k.org>
-
-bashline.c
- - bash_filename_stat_hook: add code from bash_directory_completion_hook
- that performs pathname canonicalization in the same way that cd and
- other builtins will do
-
- 4/25
- ----
-execute_cmd.c
- - execute_pipeline: change the call to move_to_high_fd to make it use
- getdtablesize() and to not stomp on existing open file descriptors,
- like the fd the shell is using to read a script. Bug report from
- Greg Wooledge <wooledg@eeg.ccf.org>
-
- 5/6
- ---
-subst.c
- - expand_word_internal: case '$': after calling param_expand and
- setting had_quoted_null, set TEMP to null. The code that builds the
- returned string at the end of the function will take care of making
- and returning a quoted null string if there's nothing else in
- ISTRING. If there is, the quoted null should just go away. Part of
- fix for bug reported by Ruediger Kuhlmann <RKuhlmann@orga-systems.com>
- - expand_word_internal: when processing ISTRING to build return value,
- only set W_HASQUOTEDNULL in the returned word flags if the word is
- a quoted null string AND had_quoted_null is set. Rest of fix
-
- 5/9
- ---
-variables.c
- - bind_variable_internal: if we get an array variable here (implicit
- assignment to index 0), call make_array_variable_value, which
- dummies up a fake SHELL_VAR * from array[0]. This matters when
- we're appending and have to use the current value
- - bind_variable_internal: after computing the new value, treat assoc
- variables with higher precedence than simple array variables; it
- might be that a variable has both attributes set
-
-arrayfunc.c
- - bind_array_var_internal: break code out that handles creating the
- new value to be assigned to an array variable index into a new
- function, make_array_variable_value. This handles creating a
- dummy SHELL_VAR * for implicit array[0] assignment. Fixes bug
- reported by Dan Douglas <ormaaj@gmail.com>
-
-arrayfunc.h
- - make_array_variable_value: new extern declaration
-
- 5/19
- ----
-variables.c
- - bind_int_variable: if an assignment statement like x=y comes in
- from the expression evaluator, and x is an array, handle it like
- x[0]=y. Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 5/24
- ----
-
-braces.c
- - mkseq: handle possible overflow and break the sequence generating
- loop if it occurs. Fixes OpenSUSE bug 763591:
- https://bugzilla.novell.com/show_bug.cgi?id=763591
-
- 5/25
- ----
-Makefile.in
- - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools
- buildversion, mksignames, mksyntax
- - LDFLAGS_FOR_BUILD: add to compilation recipes for test tools
- recho, zecho, printenv, xcase
-
-builtins/Makefile.in
- - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools
- gen-helpfiles, psize.aux
-
-variables.c
- - bind_int_variable: if LHS is a simple variable name without an array
- reference, but resolves to an array variable, call
- bind_array_variable with index 0 to make x=1 equivalent to x[0]=1.
- Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 5/27
- ----
-subst.c
- - expand_word_internal: make sure has_dollar_at doesn't get reset before
- recursive calls to param_expand or expand_word_internal, since it has
- to save state of what came before. Use temp variable and make sure
- has_dollar_at is incremented if recursive call processes "$@".
- Fixes bug reported by gregrwm <backuppc-users@whitleymott.net> and
- supplemented by Dan Douglas <ormaaj@gmail.com>
-
-doc/{bash.1,bashref.texi}
- - changes to the description of substring expansion inspired by
- suggestions from Bill Gradwohl <bill@ycc.com>
-
-doc/bashref.texi
- - added substring expansion examples inspired by suggestions from
- Bill Gradwohl <bill@ycc.com>
-
-variables.c
- - find_shell_variable: search for a variable in the list of shell
- contexts, ignore the temporary environment
- - find_variable_tempenv: search for a variable in the list of shell
- contexts, force search of the temporary environment
- - find_variable_notempenv: search for a variable in the list of shell
- contexts, don't force search of the temporary environment
-
-variables.h
- - find_shell_variable: extern declaration
- - find_variable_tempenv: extern declaration
- - find_variable_notempenv: extern declaration
-
-arrayfunc.c
- - bind_array_variable: call find_shell_variable instead of calling
- var_lookup directly
-
-findcmd.c
- - search_for_command: call find_variable_tempenv instead of
- find_variable_internal directly
- - _find_user_command_internal: call find_variable_tempenv instead of
- find_variable_internal directly
-
-builtins/setattr.def
- - set_var_attribute: call find_variable_notempenv instead of
- find_variable_internal directly
- - show_name_attributes: call find_variable_tempenv instead of
- find_variable_internal directly
-
- 6/1
- ---
-sig.c
- - termsig_handler: don't try to save the shell history on a terminating
- signal any more, since it just causes too many problems on Linux
- systems using glibc and glibc malloc
-
-lib/readline/vi_mode.c
- - rl_vi_change_to: change to correctly redo `cc', since `c' is not a vi
- motion character. From Red Hat bug 813289
- - rl_vi_delete_to: change to correctly redo `dd', since `d' is not a vi
- motion character
- - rl_vi_yank_to: change to correctly redo `yy', since `y' is not a vi
- motion character
-
- 6/4
- ---
-lib/sh/mktime.c
- - current versions of VMS do not need to include <stddef.h>. Fix from
- John E. Malmberg <wb8tyw@qsl.net>
-
- 6/5
- ---
-lib/sh/eaccess.c
- - sh_stat: instead of using a static buffer to do the DEV_FD_PREFIX
- translation, use a dynamically-allocated buffer that we keep
- resizing. Fixes potential security hole reported by David Leverton
- <levertond@googlemail.com>
-
- 6/5
- ---
-braces.c
- - expand_seqterm: check errno == ERANGE after calling strtoimax for
- rhs and incr. Part of a set of fixes from Scott McMillan
- <scotty.mcmillan@gmail.com>
- - expand_seqterm: incr now of type `intmax_t', which changes
- arguments to mkseq
- - mkseq: a better fix for detecting overflow and underflow since it's
- undefined in C and compilers `optimize' out overflow checks. Uses
- ADDOVERFLOW and SUBOVERFLOW macros
- - mkseq: use sh_imaxabs (new macro) instead of abs() for intmax_t
- variables
- - mkseq: don't allow incr to be converted to -INTMAX_MIN
- - mkseq: make sure that strvec_create isn't called with a size argument
- greater than INT_MAX, since it only takes an int
-
- 6/6
- ---
-braces.c
- - mkseq: try and be smarter about not overallocating elements in
- the return array if the increment is not 1 or -1
-
- 6/7
- ---
-parse.y
- - history_delimiting_chars: if the parser says we're in the middle of
- a compound assignment (PST_COMPASSIGN), just return a space to avoid
- adding a stray semicolon to the history entry. Fixes bug reported
- by "Davide Brini" <dave_br@gmx.com>
-
- 6/8
- ---
-bashline.c
- - bash_directory_completion_hook: don't attempt spelling correction
- on the directory name unless the direxpand option is set and we are
- going to replace the directory name with the corrected one in the
- readline line. Suggested by Linda Walsh <bash@tlinx.org>
-
-lib/sh/shquote.c
- - sh_backslash_quote: now takes a third argument: flags. If non-zero,
- tildes are not backslash-escaped. Have to handle both printf %q,
- where they should be escaped, and filename completion, where they
- should not when used as usernames
-
-externs.h
- - sh_backslash_quote: declaration now takes a third argument
-
-builtins/printf.def
- - printf_builtin: call sh_backslash_quote with 1 as third argument
- so tildes get escaped
-
-{bashline,bracecomp}.c
- - call sh_backslash_quote with 0 as third argument so tildes are not
- escaped in completed words
-
-doc/bash.1
- - add `coproc' to the list of reserved words. From a report by
- Jens Schweikhardt <schweikh@schweikhardt.net>
-
- 6/10
- ----
-execute_cmd.c
- - line_number_for_err_trap: now global, so parse_and_execute can save
- and restore it with unwind-protect
-
-builtins/evalstring.c
- - parse_prologue: save and restore line_number_for_err_trap along
- with line_number
- - restore_lastcom: new function, unwind-protect to restore
- the_printed_command_except_trap
- - parse_prologue: use restore_lastcom to save and restore the value
- of the_printed_command_except_trap around calls to parse_and_execute
- (eval/source/.)
-
- 6/15
- ----
-lib/readline/complete.c
- - complete_fncmp: change filename comparison code to understand
- multibyte characters, even when doing case-sensitive or case-mapping
- comparisons. Fixes problem reported by Nikolay Shirokovskiy
- <nshyrokovskiy@gmail.com>
-
- 6/20
- ----
-builtins/mapfile.def
- - mapfile: move the line count increment and check for having read
- the specified number of lines to the end of the loop to avoid
- reading an additional line with zgetline. Fixes bug reported by
- Dan Douglas <ormaaj@gmail.com>
-
- 6/21
- ----
-
-execute_cmd.c
- - execute_pipeline: make sure `lastpipe_flag' is initialized to 0 on
- all systems, since it's tested later in the function. Fixes bug
- reported by John E. Malmberg <wb8tyw@qsl.net>
-
- 6/22
- ----
-mailcheck.c
- - file_mod_date_changed: return 0 right away if mailstat() does not
- return success. Fixes bug with using uninitialized values reported
- by szymon.kalasz@uj.edu.pl
-
-builtins/set.def
- - the `monitor' option is not available when the shell is compiled
- without job control, since the underlying `m' flag is not available
-
-nojobs.c
- - job_control: now declared as int variable, initialized to 0, never
- modified
-
-jobs.h
- - job_control: extern declaration no longer dependent on JOB_CONTROL
-
-execute_cmd.c
- - execute_pipeline: made necessary changes so `lastpipe' shell option
- is now available in all shells, even those compiled without
- JOB_CONTROL defined
-
- 6/23
- ----
-lib/glob/glob.c
- - glob_filename: check for interrupts before returning if glob_vector
- returns NULL or an error. Bug reported by Serge van den Boom
- <svdb@stack.nl>, fix from Andreas Schwab <schwab@linux-m68k.org>
- - call run_pending_traps after each call to QUIT or test of
- interrupt_state, like we do in mainline shell code
- - glob_vector: don't call QUIT; in `if (lose)' code block; just free
- memory, return NULL, and let callers deal with interrupt_state or
- other signals and traps
-
- 6/25
- ----
-lib/readline/input.c
- - rl_read_key: restructure the loop that calls the event hook a little,
- so that the hook is called only after rl_gather_tyi returns no input,
- and any pending input is returned first. This results in better
- efficiency for processing pending input without calling the hook
- on every input character as bash-4.1 did. From a report from
- Max Horn <max@quendi.de>
-
- 6/26
- ----
-trap.c
- - signal_is_pending: return TRUE if SIG argument has been received and
- a trap is waiting to execute
-
-trap.h
- - signal_is_pending: extern declaration
-
-lib/glob/glob.c
- - glob_vector: check for pending SIGINT trap each time through the loop,
- just like we check for interrupt_state or terminating_signal, and
- set `lose = 1' so we clean up after ourselves and interrupt the
- operation before running the trap. This may require a change later,
- maybe call run_pending_traps and do that if run_pending_traps returns?
-
-variables.c
- - sv_histtimefmt: set history_comment_character to default (`#') if
- it's 0 when we're turning on history timestamps. The history code
- uses the history comment character to prefix timestamps, and
- leaving it at 0 effectively removes them from the history. From a
- report to help-bash by Dennis Williamson <dennistwilliamson@gmail.com>
-
- 6/27
- ----
-lib/readline/signals.c
- - rl_maybe_restore_sighandler: new function, sets handler for SIG to
- HANDLER->sa_handler only if it's not SIG_IGN. Needs to be called
- on same signals set using rl_maybe_set_sighandler, which does not
- override an existing SIG_IGN handler (SIGALRM is ok since it does
- the check inline; doesn't mess with SIGWINCH)
-
- 6/30
- ----
-variables.h
- - additional defines for the new `nameref' variable attribute
- (att_nameref): nameref_p, nameref_cell, var_setref
-
-variables.c
- - find_variable_nameref: resolve SHELL_VAR V through chain of namerefs
- - find_variable_last_nameref: resolve variable NAME until last in a
- chain of possibly more than one nameref starting at shell_variables
- - find_global_variable_last_nameref: resolve variable NAME until last
- in a chain of possibly more than one nameref starting at
- global_variables
- - find_nameref_at_context: resolve SHELL_VAR V through chain of namerefs
- in a specific variable context (usually a local variable hash table)
- - find_variable_nameref_context: resolve SHELL_VAR V through chain of
- namerefs following a chain of varible contexts
- - find_variable_last_nameref_context: resolve SHELL_VAR V as in
- find_variable_last_context, but return the final nameref instead of
- what the final nameref resolves to
- - find_variable_tempenv, find_variable_notempenv, find_global_variable,
- find_shell_variable, find_variable: modified to follow namerefs
- - find_global_variable_noref: look up a global variable without following
- any namerefs
- - find_variable_noref: look up a shell variable without following any
- namerefs
- - bind_variable_internal: modify to follow a chain of namerefs in the
- global variables table; change to handle assignments to a nameref by
- following nameref chain
- - bind_variable: modify to follow chain of namerefs when binding to a
- local variable
- - unbind_variable: changes to unset nameref variables (unsets both
- nameref and variable it resolves to)
-
-subst.c
- - parameter_brace_expand_word: change to handle expanding nameref whose
- value is x[n]
- - parameter_brace_expand_indir: change to expand in ksh93-compatible
- way if variable to be indirected is nameref and a simple (non-array)
- expansion
- - param_expand: change to expand $foo where foo is a nameref whose value
- is x[n]
-
-execute_cmd.c
- - execute_for_command: changes to implement ksh93 semantics when index
- variable is a nameref
-
-builtins/setattr.def
- - show_var_attributes: change to add `n' to flags list if att_nameref
- is set
-
-builtins/set.def
- - unset_builtin: changes to error messages to follow nameref variables
-
-builtins/declare.def
- - document new -n option
- - declare_internal: new `-n' and `+n' options
- - declare_internal: handle declare -n var[=value] and
- declare +n var[=value] for existing and non-existant variables.
- Enforce restriction that nameref variables cannot be arrays.
- Implement semi-peculiar ksh93 semantics for typeset +n ref=value
-
- 7/5
- ---
-variables.c
- - unbind_variable: unset whatever a nameref resolves to, leaving the
- nameref variable itself alone
- - unbind_nameref: new function, unsets a nameref variable, not the
- variable it references
-
-variables.h
- - unbind_nameref: extern declaration
-
-builtins/set.def
- - unset_builtin: modify to add -n option, which calls unbind_nameref
- leaving unbind_variable for the usual case. This required slight
- changes and additions to the test suite
-
-doc/{bash.1,bashref.texi}
- - document namerefs and typeset/declare/local/unset -n
-
- 7/13
- ----
-lib/sh/casemod.c
- - include shmbchar.h for is_basic and supporting pieces
- - sh_casemod: use _to_wupper and _to_wlower to convert wide character
- case instead of TOUPPER and TOLOWER. Fixes bug reported by
- Dennis Williamson <dennistwilliamson@gmail.com>, fix from
- Andreas Schwab <schwab@linux-m68k.org>
- - cval: short-circuit and return ascii value if is_basic tests true
- - sh_casemod: short-circuit and use non-multibyte case modification
- and toggling code if is_basic tests true
-
-lib/readline/signals.c
- - _rl_{block,release}_sigint: remove the code that actually blocks and
- releases the signals, since we defer signal handling until calls to
- RL_CHECK_SIGNALS()
-
-lib/readline/{callback,readline,util}.c
- - if HAVE_POSIX_SIGSETJMP is defined, use sigsetjmp/siglongjmp without
- saving and restoring the signal mask instead of setjmp/longjmp
-
-lib/readline/rltty.c
- - prepare_terminal_settings: don't mess with IXOFF setting if
- USE_XON_XOFF defined
-
-doc/{bash.1,bashref.texi}
- - add some text to the description of set -e clarifying its effect
- on shell functions and shell function execution. Suggested by
- Rainer Blome <rainer.blome@gmx.de>
-
-bashline.c
- - edit_and_execute_command: increment current_command_line_count before
- adding partial line to command history (for command-oriented-history
- because of rl_newline at beginning of function), then reset it to 0
- before adding the dummy history entry to make sure the dummy entry
- doesn't get added to previous incomplete command. Partial fix for
- problem reported by Peng Yu <pengyu.ut@gmail.com>
-
- 7/24
- ----
-configure.in
- - interix: define RECYCLES_PIDS. Based on a report from Michael
- Haubenwallner <michael.haubenwallner@salomon.at>
-
- 7/26
- ----
-jobs.c
- - make_child: call bgp_delete on the newly-created pid unconditionally.
- Some systems reuse pids before cycling through an entire set of
- CHILD_MAX/_SC_CHILD_MAX unique pids. This is no longer dependent
- on RECYCLES_PIDS. Based on a report from Michael Haubenwallner
- <michael.haubenwallner@salomon.at>
-
-support/shobj-conf
- - Mac OS X: drop MACOSX_DEPLOYMENT_TARGET=10.3 from the LDFLAGS. We
- can finally kill Panther
-
- 7/28
- ----
-subst.c
- - command_substitute: make sure last_made_pid gets reset if make_child
- fails
-
-execute_cmd.c
- - execute_command_internal: case cm_simple: decide whether or not to
- wait_for a child if already_making_children is non-zero, indicates
- that there is an unwaited-for child. More of fix for bug report
- from Michael Haubenwallner <michael.haubenwallner@salomon.at>
-
-jobs.c
- - make_child: call delete_old_job (new_pid) unconditionally, don't
- bother to check whether or not pid wrap occurred. Rest of fix for
- bug report from Michael Haubenwallner
- <michael.haubenwallner@salomon.at>
-
- 7/29
- ----
-shell.c
- - subshell_exit: new function, exits the shell (via call to sh_exit())
- after calling any defined exit trap
-
-externs.h
- - subshell_exit: new extern declaration
-
-execute_cmd.c
- - execute_command_internal: make sure to call subshell_exit for
- {} group commands executed asynchronously (&). Part of fix for
- EXIT trap bug reported by Maarten Billemont <lhunath@lyndir.com>
-
-sig.c
- - reset_terminating_signals: make sure to set termsigs_initialized back
- to 0, so a subsequent call to initialize_terminating_signals works
- right. Rest of fix for bug reported by Maarten Billemont
- <lhunath@lyndir.com>
-
-{execute_cmd,general,jobs,mailcheck,mksyntax,test}.c
-builtins/{cd,fc,pushd,ulimit}.def
-lib/malloc/getpagesize.h
-lib/sh/{clktck,fpurge,inet_aton,mailstat,oslib,pathcanon,pathphys,spell,strerror}.c
- - make inclusion of <sys/param.h> dependent on HAVE_SYS_PARAM_H
- consistently
-
- 8/6
- ---
-lib/readline/histexpand.c
- - history_expand_internal: now takes an additional argument saying
- whether the history expansion occurs within a quoted string, set to
- the open quote character
- - history_expand_internal: use new argument instead of checking prev
- char and initializing quoted_search_delimiter, pass qc directly to
- get_history_event, where it allows a matching quote to terminate a
- string defining an event
- - history_expand: change single-quote handling code so that if
- history_quotes_inhibit_expansion is 0, single quotes are treated
- like double quotes
- - history_expand: change call to history_expand_internal to pass new
- argument of `"' if double-quoted string, `'' if single-quoted string;
- this lets history_expand decide what is a quoted string and what
- is not
-
- 8/7
- ---
-configure.in
- - AC_CANONICAL_BUILD: invoke for later use
-
-lib/readline/macro.c
- - _rl_prev_macro_key: new function, inverse of _rl_next_macro_key:
- backs up the index into the current macro by 1
-
-lib/readline/rlprivate.h
- - _rl_prev_macro_key: extern declaration
-
-
-lib/readline/readline.c
- - _rl_dispatch_subseq, _rl_subseq_result: don't call _rl_unget_char
- if we're currently reading from a macro; call _rl_prev_macro_key
- instead. Fixes bug reported by Clark Wang <clark.wang@oracle.com>
-
- 8/13
- ----
-builtins/evalstring.c
- - evalstring(): new function, wrapper around parse_and_execute.
- make sure we handle cases where parse_and_execute can call `return'
- and short-circuit without cleaning up properly. We call
- parse_and_execute_cleanup() then jump to the previous-saved return
- location
-
-builtins/common.h
- - extern declaration for evalstring()
-
-builtins/eval.def
- - eval_builtin: make sure we handle `eval " ... return"' in contexts
- where `return' is valid by calling evalstring(). Fixes bug with
- `eval return' in sourced files reported by Clark Wang
- <dearvoid@gmail.com>
-
-trap.c
- - run_pending_traps: call evalstring instead of parse_and_execute.
- XXX - still needs to handle saving and restoring token state in the
- presence of `return'; could use unwind_protects for that
-
-builtins/mapfile.def
- - run_callback: call evalstring instead of parse_and_execute
-
- 8/15
- ----
-bashline.c
- - bash_filename_stat_hook: make sure we don't free local_dirname
- before using it to canonicalize any expanded filename. Make sure
- it always points to *dirname and only free it if we're replacing
- it.
-
-lib/readline/complete.c
- - append_to_match: make sure we call rl_filename_stat_hook with
- newly-allocated memory to avoid problems with freeing it twice
-
- 8/17
- ----
-variables.c,config-top.h
- - if ARRAY_EXPORT is defined to 1 when variables.c is compiled, the
- code that allows indexed arrays to be exported is enabled and
- included
-
- 8/19
- ----
-shell.c
- - call start_debugger from main() only if dollar_vars[1] != 0 (close
- enough to a non-interactive shell, since we can be interactive with
- -i while running a shell script). Fixes oddity reported by
- Techlive Zheng <techlivezheng@gmail.com>
-
- 8/20
- ----
-arrayfunc.c
- - quote_array_assignment_chars: don't bother quoting if the word has
- not been marked as an assignment (W_ASSIGNMENT)
- - quote_array_assignment_chars: turn on W_NOGLOB in the word flags
- so assignment statements don't undergo globbing. Partial fix for
- problems reported by Dan Douglas <ormaaj@gmail.com>
-
- 8/21
- ----
-command.h
- - W_NOBRACE: new word flag that means to inhibit brace expansion
-
-subst.c
- - brace_expand_word_list: suppress brace expansion for words with
- W_NOBRACE flag
-
- 8/22
- ----
-builtins/read.def
- - read_builtin: don't call dequote_string on what we've read, even if
- we saw an escape character, unless (input_string && *input_string).
- We may have escaped an IFS whitespace character. Fixes seg fault
- reported by <armandsl@gmail.com>
-
-execute_cmd.c
- - execute_command_internal: set the_printed_command_except trap when
- about to execute a ( ... ) user subshell. For now, set it only if
- ERR is trapped; can relax that later. Fixes bug reported by
- Mike Frysinger <vapier@gentoo.org>
-
- 8/23
- ----
-jobs.c
- - remove references to first_pid and pid_wrap, since we're not using
- them for anything anymore
-
- 8/24
- ----
-subst.c
- - changes for W_NOBRACE everywhere appropriate: so it can be displayed
- for debugging, and passed out of expand_word_internal
-
-doc/{bash.1,bashref.texi}
- - small changes to make it clearer that the = and == operators are
- equivalent, and will cause pattern matching when used with [[.
- From a question from Michal Soltys <soltys@ziu.info>
-
-doc/bashref.texi
- - some small formatting changes from Karl Berry <karl@freefriends.org>
-
- 8/27
- ----
-lib/readline/doc/{history,rlman,rluserman}.texi
- - some small formatting changes from Karl Berry <karl@freefriends.org>
-
-arrayfunc.c
- - assign_array_element_internal, assign_compound_array_list,
- unbind_array_element, array_value_internal: changes to make
- assignment statements to negative indices (a[-1]=2) and unsetting
- array elements using negative indices (unset 'a[-1]') work.
- From suggestions by Dennis Williamson <dennistwilliamson@gmail.com>
- and Chris F. A. Johnson <chris@cfajohnson.com>
-
-subst.c
- - array_length_reference: changes to make length references to array
- elements using negative indices (${#a[-1]}) work
-
- 8/28
- ----
-doc/{bash.1,bashref.texi}
- - document new treatment of negative indices to indexed arrays when
- assigning, referencing, calculating length, and unsetting
-
- 8/29
- ----
-shell.c
- - show_shell_usage: add -l to list of shell invocation options (short
- for --login). From Red Hat bug 852469
-
-configure.ac
- - renamed from configure.in, as latest autoconf versions want. Patches
- Stefano Lattarini <stefano.lattarini@gmail.com>
-
-MANIFEST,Makefile.in,doc/bashref.texi,support/mkconffiles
- - configure.in -> configure.ac
-
- 9/1
- ---
-
-parse.y
- - read_token_word: allow words like {array[ind]} to be valid redirection
- words for constructs like {x}<file
-
-redir.c
- - redir_varassign: bind_var_to_int already handles array assignments,
- so don't need to do anything more for things like {a[i]}<file
- - redir_varvalue: changes to allow references to {a[i]} when
- performing redirections using valid_array_reference and
- get_array_value. Adds functionality requested most recently by
- <unknown@vmw-les.eng.vmware.com>
-
-lib/readline/display.c
- - update_line: if the first difference between the old and new lines
- is completely before any invisible characters in the prompt, we
- should not adjust _rl_last_c_pos, since it's before any invisible
- characters. Fixed in two places
- - prompt_modechar: return a character indicating the editing mode:
- emacs (@), vi command (:), or vi insert (+)
- - _rl_reset_prompt: new function, just calls rl_expand_prompt. Will be
- inlined, placeholder for more changes
- - expand_prompt: if show-mode-in-prompt is enabled, add a character to
- the front of the prompt indicating the editing mode, adjusting the
- various variables as appropriate to keep track of the number of
- visible characters and number of screen positions
-
-lib/readline/bind.c
- - show-mode-in-prompt: new bindable boolean variable, shadowed by
- _rl_show_mode_in_prompt variable
- - hack_special_boolean_var: call _rl_reset_prompt when toggling or
- setting show-mode-in-prompt
-
-lib/readline/readline.c
- - readline_internal_setup: make sure the correct vi mode keymap is set
- before expanding the prompt string for the first time
-
-lib/readline/misc.c
- - rl_emacs_editing_mode: make sure to call _rl_reset_prompt if we're
- showing the editing mode in the prompt
-
-lib/readline/rlprivate.h
- - _rl_reset_prompt, _rl_show_mode_in_prompt: extern declarations
-
-lib/readline/vi_mode.c
- - rl_vi_insertion_mode: call _rl_reset_prompt
- - rl_vi_movement_mode: call _rl_reset_prompt. Finishes changes for
- showing mode in prompt string, originally requested by Miroslav
- Koskar <mkoskar@gmail.com> and most recently by Jordan Michael
- Ziegler <jziegler@bnl.gov>
-
-doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
- - document new show-mode-in-prompt variable, off by default
-
- 9/3
- ---
-
-jobs.c
- - set_childmax: new function, external mechanism for other parts of
- the shell to set js.c_childmax, the number of saved exited child
- statuses to remember
-jobs.h
- - set_childmax: extern declaration
-
-variables.c
- - CHILD_MAX: new special variable, with sv_childmax function to
- run when it changes. Setting CHILD_MAX to a value greater than
- zero but less than some maximum (currently 8192) sets the number of
- exited child statuses to remember. set_childmax (jobs.c) ensures
- that the number does not drop below the posix-mandated minimum
- (CHILD_MAX)
-
-doc/{bash.1,bashref.texi}
- - CHILD_MAX: document new meaning and action when variable is set
-
- 9/5
- ---
-redir.c
- - redir_varassign: call stupidly_hack_special_variables after
- assigning fd number to specified variable, so we can use constructs
- like {BASH_XTRACEFD}>foo. Suggested by Pierre Gaston
- <pierre.gaston@gmail.com>
-
- 9/8
- ---
-expr.c
- - readtok: invalidate previous contents of `curlval' before freeing
- and reallocating tokstr (which, chances are, will get the same
- pointer as before and render curlval inconsistent). Fixes other
- bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 9/9
- ---
-lib/readline/complete.c
- - rl_username_completion_function: protect call to setpwent() with
- #ifdef (HAVE_GETPWENT)/#endif. Fixes bug reported by
- Gerd Hofmann <gerd.hofmann.nbg@googlemail.com>
-
-lib/readline/display.c
- - rl_message: second and subsequent calls to rl_message can result in
- local_prompt being overwritten with new values (e.g., from the
- successive calls displaying the incremental search string). Need
- to free before overwriting if it's not the same as the value saved
- in saved_local_prompt. Fixes memory leak reported by
- Wouter Vermaelen <vermaelen.wouter@gmail.com>
-
-lib/readline/{terminal.c,rlprivate.h}
- - move CUSTOM_REDISPLAY_FUNC and CUSTOM_INPUT_FUNC defines from
- terminal.c to rlprivate.h so other files can use them
-
-expr.c
- - expr_streval: if noeval is non-zero, just return 0 right away,
- short-circuiting evaluation completely. readtok will leave curtok
- set correctly without re-entering the evaluator at all. Rest of
- fix for bug reported by Dan Douglas <ormaaj@gmail.com>
-
- 9/11
- ----
-
-parse.y
- - parse_comsub: make sure the `reserved word ok in this context' flag
- is preserved after we read `do' followed by whitespace. Fixes bug
- reported by Benoit Vaugon <benoit.vaugon@gmail.com>
-
- 9/13
- ----
-configure.ac,config.h.in
- - enable-direxpand-default: new configure option, turns the `direxpand'
- shell option on by default
-
-bashline.c
- - dircomplete_expand, dircomplete_expand_relpath: initialize to 1 if
- DIRCOMPLETE_EXPAND_DEFAULT is defined and non-zero
-
-doc/bashref.texi
- - enable-direxpand-default: document new configure option
-
- 9/14
- ----
-shell.c
- - --protected: make option valid only when wordexp is compiled into
- the shell. Fix from Roman Rakus <rrakus@redhat.com>
-
-configure.ac
- - HP NonStop (*-nsk*): compile --without-bash-malloc. Change from
- Joachim Schmitz <jojo@schmitz-digital.de>
-
- 9/16
- ----
-subst.c,execute_cmd.c,lib/glob/sm_loop.c,lib/sh/shquote.c
- - minor code cleanups from Joachim Schmitz <jojo@schmitz-digital.de>
-
-lib/readline/colors.h
- - workaround for HP NonStop compiler issue with <stdbool.h> from
- Joachim Schmitz <jojo@schmitz-digital.de>
-
- 9/17
- ----
-builtins/printf.def
- - printf_builtin: handle localtime returning NULL, as can happen when
- encountering overflow. Bug report and initial fix from
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
-doc/{bash.1,bashref.texi}
- - emphasize that brace expansion using character ranges ({a..c}) acts
- as if the C locale were in use. Prompted by message from
- Marcel Giannelia <info@skeena.net>
-
- 9/20
- ----
-lib/sh/wcsnwidth.c
- - wcsnwidth: new function, variant of wcwidth, returns the number of
- wide characters from a string that will be displayed to not exceed
- a specified max column position
-
- 9/21
- ----
-builtins/help.def
- - show_builtin_command_help: break code that displays the short-doc
- for each builtin in two columns into a new function: dispcolumn
- - wdispcolumn: multibyte-char version of dispcolumn; uses wide
- chars and printf "%ls" format. Fixes problem reported by
- Nguyá»n Thái Ngá»c Duy <pclouds@gmail.com>
-
- 9/22
- ----
-execute_cmd.c
- - execute_disk_command: before running the command-not-found hook,
- call kill_current_pipeline() to make sure we don't add processes
- to an existing pipeline or wait for processes erroneously
-
- 9/23
- ----
-lib/readline/input.c
- - rl_input_available_hook: new hook function, called from
- _rl_input_available (or _rl_input_queued) to return whether or not
- input is available wherever the input source is
-
-lib/readline/doc/rltech.texi
- - rl_input_available_hook: document
-
- 9/27
- ----
-lib/glob/sm_loop.c:
- - GMATCH: after one or more `*', an instance of ?(x) can match zero or
- 1 times (unlike ?, which has to match one character). The old code
- failed if it didn't match at least once. Fixes `a*?(x)' bug.
- - GMATCH: if we hit the end of the search string, but not the end of
- the pattern, and the rest of the pattern is something that can
- match the NUL at the end of the search string, we should successfully
- match. Fixes `a*!(x)' bug reported by <hans1worst@gmail.com>
-
- 10/2
- ----
-command.h
- - add c_lock member to coproc structure for future use to tell who is
- manipulating it
-
-execute_cmd.c
- - execute_coproc: block SIGCHLD while parent is forking coproc
- process and adding pid to sh_coproc struct to avoid race condition
- where child is reaped before the pid is assigned and the coproc is
- never marked as having died. Fixes race condition identified by
- Davide Baldini <baldiniebaldini@gmail.com>
- - add assignments to c_lock member of struct coproc in various
- functions that manipulate it; was used to identify race condition
- - coproc_pidchk: don't call coproc_dispose to avoid using malloc and
- other functions in a signal handler context
- - coproc_dispose: call BLOCK_SIGNAL/UNBLOCK_SIGNAL for SIGCHLD while
- manipulating the sh_coproc struct
-
- 10/6
- ----
-lib/readline/complete.c
- - rl_display_match_list: if printing completions horizontally, don't
- bother with spacing calculations if limit == 1, which means we are
- printing one completion per line no matter what. Fixes bug
- reported by David Kaasen <kaasen@nvg.ntnu.no>
-
- 10/7
- ----
-builtins/declare.def
- - declare_internal: add error checking for nameref attribute and
- variable assignments: self-references, attempts to make an array
- variable a nameref
-
-subst.c
- - parameter_brace_expand: handle parameter_brace_expand_word returning
- &expand_param_fatal or &expand_param_error and return the appropriate
- error value
- - parameter_brace_expand_word: if a nameref variable's value is not a
- valid identifier, return an error
- - param_expand: if a nameref variable's value is not a valid identifier,
- return an error
-
-test.c
- - unary_operator: add new -R variable, returns true if variable is set
- and has the nameref attribute. From ksh93
-
-builtins/test.def
- - add -R to description of conditional commands for help test
-
-doc/{bash.1,bashref.texi}
- - document new -R unary conditional operator
-
- 10/13
- -----
-trap.c
- - check_signals_and_traps: new function, convenience function for the
- rest of the shell to check for pending terminating and interrupt
- signals, and to check for and process any pending traps
- - any_signals_trapped: new function, returns non-zero if any signals
- are trapped and -1 if not
-
-trap.h
- - extern declaration for check_signals_and_traps
-
-bashline.c
- - bashline_reset: make sure we reset the event hook
- - bash_event_hook: call check_signals_and_traps instead of just
- checking for terminating signals so we can run pending traps and
- react to interrupts, and reset the event hook when we're done
-
-
- 10/14
- -----
-trap.c
- - trap_handler: if executing in a readline signal handler context,
- call bashline_set_event_hook to install bash_event_hook to process
- the signal (if bash cares about it)
-
-sig.c
- - sigint_sighandler: call bashline_set_event_hook to set the event
- hook if we're executing in a readline signal handler context
-
-lib/readline/input.c
- - rl_getc: call RL_CHECK_SIGNALS if read returns -1/EINTR and the caught
- signal is SIGINT or SIGQUIT rather than waiting until the next time
- around the loop
- - rl_getc: call rl_event_hook after calling RL_CHECK_SIGNALS to allow
- an application signal handler to set the event hook in its own
- signal handler (e.g., like bash trap_handler or sigint_sighandler)
-
-
-parse.y
- - yy_readline_get: don't set interrupt_immediately before we call
- readline(). Inspired by report from lanshun zhou
- <zls.sogou@gmail.com>
-
-input.c
- - getc_with_restart: add call to run_pending_traps after call to
- CHECK_TERMSIG
-
-lib/sh/zread.c
- - zread: call check_signals_and_traps if read() returns -1/EINTR
- instead of just ignoring the EINTR and deferring handling any
- signal that generated it
-
-builtins/mapfile.def
- - mapfile: don't set interrupt_immediately before calling zgetline()
- (which uses zread internally)
-
-builtins/read.def
- - read_builtin: don't set interrupt_immediately before calling zread
- (moved code around so that it was only being set right around calls
- to zread to avoid signal handler conflicts). Inspired by report
- from lanshun zhou <zls.sogou@gmail.com>
- - edit_line: don't set interrupt_immediately around call to readline()
- - include shmbutil.h
- - read_builtin: don't call read_mbchar unless is_basic(c) returns
- false for the character we just read
-
- 10/15
- -----
-sig.c
- - throw_to_top_level: if interrupt_state is non-zero, make sure that
- last_command_exit_value reflects 128+SIGINT if it's not already
- greater than 128
-
- 10/20
- -----
-builtins/wait.def
- - WAIT_RETURN: set wait_signal_received back to 0 for the potential
- next call to wait
-
-quit.h
- - CHECK_WAIT_INTR: macro to check whether trap_handler handled a
- signal and set wait_signal_received; longjmp to wait_intr_buf in
- that case
-
-jobs.c
- - wait_for, waitchld: call CHECK_WAIT_INTR at the same places we call
- CHECK_TERMSIG to check for terminating signals
- - wait_sigint_handler: don't longjmp out of the wait builtin unless
- interrupt_immediately is set; otherwise just SIGRETURN from the
- handler
- - wait_sigint_handler: if interrupt_immediately not set, but we are
- executing in the wait builtin and SIGINT is not trapped, treat it
- as a `normally received' SIGINT: restore the signal handler and
- send SIGINT to ourselves
- - waitchld: when in posix mode and running SIGCHLD traps, don't longjmp
- to wait_intr_buf (and let wait be interrupted) if we're running from
- a signal handler. Wait for CHECK_WAIT_INTR to do the longjmp.
- run_pending_traps will run the SIGCHLD trap later
-
-nojobs.c
- - reap_zombie_children, wait_for_single_pid, wait_for: call
- CHECK_WAIT_INTR where we call CHECK_TERMSIG
- - wait_sigint_handler: don't longjmp out of the wait builtin unless
- interrupt_immediately is set; otherwise just SIGRETURN from the
- handler
-
-trap.c
- - trap_handler: make sure wait_signal_received is set if the wait
- builtin is executing, and only longjmp if interrupt_immediately is
- set. This whole set of fixes was prompted by report from
- lanshun zhou <zls.sogou@gmail.com>
-
- 10/24
- -----
-lib/glob/glob.c
- - glob_filename: only check directory_name for globbing chars if
- it's of non-zero length
-
-lib/sh/strchrnul.c
- - new simpler implementation
-
-subst.c
- - command_substitute: call set_shellopts after turning off errexit
- in subshells so it's reflected in $SHELLOPTS
-
- 11/7
- ----
-builtins/evalstring.c
- - parse_and_execute: treat ERREXIT case like reader_loop does: set
- variable_context to 0 before longjmping back to top_level. Don't
- run the unwind-protect context to avoid side effects from popping
- function contexts. Part of fix for problem reported by Nikolai
- Kondrashov <nikolai.kondrashov@redhat.com>
-
-execute_cmd.c
- - execute_simple_command: call unlink_fifo_list only if this is the
- last element of a pipeline (or not in a pipeline), rather than for
- every child. Fixes difference in behavior between /dev/fd and
- FIFOs reported by Zev Weiss <zev@bewilderbeest.net>
- - execute_null_command: do the same thing in the parent branch after
- make_child
-
- 11/14
- -----
-subst.c
- - parameter_brace_expand: a variable is null if it's special ($@, $*),
- the expansion occurs within double quotes, and the expansion turns
- into a quoted null. Fixes debian bug 692447 reported by
- Matrosov Dmitriy <sgf.dma@gmail.com>
-
-jobs.c
- - run_sigchld_trap: make sure `running_trap' sentinel is set
- appropriately
- - waitchld: only run the sigchld trap if we're not in a signal
- handler, not running a trap, and executing the wait builtin.
- Otherwise, queue for later handling. We still run one instance
- of the trap handler per exited child. Bulk of fix for bug
- reported by Elliott Forney <idfah@cs.colostate.edu>
-
-trap.c
- - queue_sigchld_trap: set catch_flag so run_pending_traps notices,
- and set trapped_signal_received for completeness. Rest of fix
- for bug reported by Elliott Forney <idfah@cs.colostate.edu>
-
-lib/malloc/malloc.c
- - block_signals: renamed to _malloc_block_signals, made public
- - unblock_signals: renamed to _malloc_unblock_signals, made public
-
-lib/malloc/imalloc.h
- - extern declarations for _malloc_{un,}block_signals
-
-lib/malloc/table.c
- - mregister_alloc, mregister_free: block signals around table
- manipulation
-
- 11/15
- -----
-trap.c
- - run_pending_traps: set SIG_INPROGRESS flag around calls to
- run_sigchld_handler so other parts of the shell know that the
- SIGCHLD trap handler is executing
- - run_pending_traps: if we get a situation where we are looking at
- running a SIGCHLD trap but the trap string is IMPOSSIBLE_TRAP_HANDLER
- and the SIG_INPROGRESS flag is set, just skip it. This is possible
- if run_pending_traps is called from a SIGCHLD trap handler run by
- run_sigchld_trap
-
-doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
- - corrected description of the effect of `set history-size 0'. Report
- from Vesa-Matti J Kari <vmkari@cc.helsinki.fi>
-
-include/stdc.h
- - CPP_STRING: new define, replaces __STRING
-
-lib/malloc/{malloc.c,imalloc.h}
- - replace __STRING with CPP_STRING
-
- 11/16
- -----
-lib/readline/bind.c
- - sv_histsize: if argument evaluates to a value < 0, unstifle the
- history
-
- 11/22
- -----
-redir.c
- - do_redirection_internal: if we have REDIR_VARASSIGN set in the
- redirection flags and we set up `redirector' using fcntl or dup2,
- don't add a redirect to make sure it stays open. Let the
- script programmer manage the file handle. Fixes bug reported by
- Sam Liddicott <sam@liddicott.com>
-
- 11/24
- -----
-jobs.c
- - wait_for_any_job: new function, waits for an unspecified background
- job to exit and returns its exit status. Returns -1 on no background
- jobs or no children or other errors. Calls wait_for with new
- sentinel value ANY_PID
- - wait_for: changes to handle argument of ANY_PID: don't look up or
- try to modify the child struct, only go through the wait loop once.
- Return -1 if waitpid returns no children
-
-jobs.h
- - ANY_PID: new define
-
-builtins/wait.def
- - new option: -n. Means to wait for the next job and return its exit
- status. Returns 127 if there are no background jobs (or no
- children). Feature most recently requested by Elliott Forney
- <idfah@cs.colostate.edu>
-
-doc/{bash.1,bashref.texi}
- - document new `wait -n' option
-
-execute_cmd.c
- - execute_command_internal: save make_command_string () result in a
- temp variable before calling savestring() on it; avoids evaluating
- make_command_string() result twice. Fix from John E. Malmberg
- <wb8tyw@qsl.net>
-
- 11/28
- -----
-
-builtins/declare.def
- - declare_internal: if an array variable is declared using `declare -a'
- or `declare -A', but not assigned a value, set the `invisible'
- attribute so the variable does not show up as set. Fix for bug
- about variable initialization reported by Tim Friske <me@timfriske.com>
-
-builtins/{mapfile,read}.def
- - after calling find_or_make_array_variable, make sure the invisible
- flag is turned off, in case the variable was declared previously
- using `declare -a' or `declare -A'. Side effect of above change to
- declare_internal
-
-subst.c
- - shell_expand_word_list: handle the W_ASSNGLOBAL flag and put -g into
- the list of options passed to make_internal_declare as appropriate.
- Fix for bug reported by Tim Friske <me@timfriske.com>
-
- 11/30
- -----
-test.c
- - unary_op: make sure -v and -n check that the variable is not marked
- as invisible before calling var_isset. Fix for bug reported by Tim
- Friske <me@timfriske.com>
-
- 12/2
- ----
-subst.c
- - process_substitute: turn off the `expanding_redir' flag, which
- controls whether or not variables.c:find_variable_internal uses the
- temporary environment to find variables. We want to use the
- temp environment, since we don't have to worry about order of
- evaluation in a subshell. Fixes bug reported by Andrey Borzenkov
- <arvidjaar@gmail.com>
-
- 12/4
- ----
-lib/glob/glob.c
- - glob_filename: changes to avoid null filenames and multiple entries
- returned for patterns like **/** (globstar enabled). Fixes bug
- reported by Ulf Magnusson <ulfalizer@gmail.com>
-
- 12/10
- -----
-lib/glob/glob.c
- - glob_filename: finish up a series of changes to make globstar-style
- globbing more efficient, avoid more duplicate filenames, and be more
- compatible with other shells that implement it
- o collapse a sequence of **/**/** to one **
- o note when the directory name is all ** or ends in ** so we
- can treat it specially when the filename is **
- All inspired by report from Andrey Borzenkov <arvidjaar@gmail.com>
-
-lib/sh/zread.c
- - zreadn: new function, like zread, but takes an additional argument
- saying how many bytes to read into the local buffer. Can be used to
- implement `read -N' without so many one-byte calls to zreadc. Code
- from Mike Frysinger <vapier@gentoo.org>
-
- 12/12
- -----
-lib/glob/sm_loop.c
- - PATSCAN (glob_patscan): if passed string already points to end of
- pattern, return NULL immediately. Fixes problem with
- extglob_skipname reported by Raphaël Droz <raphael.droz@gmail.com>
-
- 12/13
- -----
-execute_cmd.c
- - execute_coproc: handle the command's exit status being inverted
- (an oversight). Fixes bug reported by DJ Mills
- <danielmills1@gmail.com> and Andreas Schwab <schwab@linux-m68k.org>
-
- 12/14
- -----
-lib/readline/readline.c
- - bind_arrow_keys_internal: add MINGW key bindings for Home, End,
- Delete, and Insert keys. Fix from Pierre Muller
- <pierre.muller@ics-cnrs.unistra.fr>
-
-builtins/printf.def
- - printf_builtin: '%()T' conversion: if there is no argument supplied,
- behave as if -1 had been supplied (current time). ksh93-like feature
- suggested by Clark Wang <dearvoid@gmail.com>
-
-doc/{bash.1,bashref.texi}
- - document new printf %()T default argument behavior
-
- 12/15
- -----
-lib/readline/display.c
- - displaying_prompt_first_line: new variable, indicates whether or
- not the first line of output is displaying the prompt. Always true
- in normal mode, sometimes false in horizontal scrolling mode
- - rl_redisplay: set displaying_prompt_first_line to true unless we
- are in horizontal mode; set to false in horizontal mode if the left
- margin of the displayed line is greater than the end of the prompt
- string
- - rl_redisplay: when in horizontal scroll mode, don't adjust
- _rl_last_c_pos by the wrap offset unless the line is displaying
- a prompt containing invisible chars
- - update line: don't adjust _rl_last_c_pos by the wrap offset unless
- the line is displaying a prompt containing invisible chars
- - update_line: if shrinking the line by reducing the number of
- displayed characters, but we have already moved the cursor to the
- beginning of the line where the first difference starts, don't
- try to delete characters
-
-builtins/read.def
- - unbuffered_read: set to 2 if invoked as `read -N'
- - if unbuffered_read is set to 2, compute the number of chars we
- need to read and read that many with zreadn. Posix mode still
- uses zreadintr. Code from Mike Frysinger <vapier@gentoo.org>
-
-doc/{bash.1,bashref.texi}
- - read: make it clear that if read times out, it saves any input
- read to that point into the variable arguments. Report from
- Fiedler Roman <Roman.Fiedler@ait.ac.at>
-
-subst.c
- - command_substitute: change direct assignment of exit_immediately_on_error
- to use change_flag ('e', FLAG_OFF) instead
-
-flags.c
- - use errexit_flag as the variable modified by changes to the -e
- option, reflect those changes to exit_immediately_on_error
-
-execute_cmd.c
- - execute_builtin: new global variable, builtin_ignoring_errexit, set
- to 0 by default and set to 1 if eval/source/command executing in a
- context where -e should be ignored
- - execute_builtin: set exit_immediately_on_error to errextit_flag
- after executing eval/source/command in a context where -e should
- be ignored
-
-flags.c
- - if builtin_ignoring_errexit is set, changes to errexit_flag are
- not reflected in the setting of exit_immediately_on_error. Fixes
- bug reported by Robert Schiele <rschiele@gmail.com>
-
- 12/23
- -----
-include/posixjmp.h
- - setjmp_nosigs: new define, call setjmp in such a way that it will
- not manipulate the signal mask
-
-{expr,test,trap}.c
- - setjmp_nosigs: call instead of setjmp; don't need to manipulate
- signal mask
-
-builtins/read.def
- - read_builtin: setjmp_nosigs: call instead of setjmp; don't need
- to manipulate signal mask
-
-builtins/evalstring.c:
- - parse_and_execute: setjmp_nosigs: call instead of setjmp; don't need
- to manipulate signal mask
- - parse_string: setjmp_nosigs: call instead of setjmp; don't need
- to manipulate signal mask
- - parse_and_execute: save and restore the signal mask if we get a
- longjmp that doesn't cause us to return or exit (case DISCARD)
-
- 12/24
- -----
-general.c
- - bash_tilde_expand: only set interrupt_immediately if there are no
- signals trapped; we want to jump to top level if interrupted but
- not run any trap commands
-
- 12/25
- -----
-jobs.c
- - run_sigchld_trap: no longer set interrupt_immediately before calling
- parse_and_execute, even if this is no longer run in a signal handler
- context
-
-input.c
- - getc_with_restart: add call to QUIT instead of CHECK_TERMSIG
-
-parse.y
- - yy_stream_get: now that getc_with_restart calls QUIT, don't need to
- set interrupt_immediately (already had call to run_pending_traps)
-
-execute_cmd.c
- - execute_subshell_builtin_or_function,execute_function,execute_in_subshell:
- setjmp_nosigs: call instead of setjmp when saving return_catch; don't
- need to manipulate signal mask
- - execute_subshell_builtin_or_function,execute_in_subshell:
- setjmp_nosigs: call instead of setjmp where appropriate when saving
- top_level; don't need to manipulate signal mask if we're going to
- exit right away
-
-subst.c
- - command_substitute: setjmp_nosigs: call instead of setjmp when saving
- return_catch; don't need to manipulate signal mask
- - command_substitute: setjmp_nosigs: call instead of setjmp where
- appropriate when saving top_level; don't need to manipulate signal
- mask if we're going to exit right away
-
-trap.c
- - run_exit_trap: setjmp_nosigs: call instead of setjmp when saving
- return_catch; don't need to manipulate signal mask
- - run_exit_trap: setjmp_nosigs: call instead of setjmp where
- appropriate when saving top_level; don't need to manipulate signal
- mask if we're going to exit right away
- - _run_trap_internal: setjmp_nosigs: call instead of setjmp when saving
- return_catch; don't need to manipulate signal mask
-
-builtins/evalfile.c
- - _evalfile: setjmp_nosigs: call instead of setjmp when saving
- return_catch; don't need to manipulate signal mask
-
-builtins/evalstring.c
- - evalstring: setjmp_nosigs: call instead of setjmp when saving
- return_catch; don't need to manipulate signal mask
-
-shell.c
- - main: setjmp_nosigs: call instead of setjmp where appropriate when
- saving top_level; don't need to manipulate signal mask if we're
- going to exit right away
- - run_one_command: setjmp_nosigs: call instead of setjmp where
- appropriate when saving top_level; don't need to manipulate signal
- mask if we're going to exit right away
- - run_wordexp: setjmp_nosigs: call instead of setjmp where
- appropriate when saving top_level; don't need to manipulate signal
- mask if we're going to exit right away
-
-eval.c
- - reader_loop: save and restore the signal mask if we get a longjmp
- that doesn't cause us to return or exit (case DISCARD)
-
- 12/26
- -----
-parse.y
- - shell_input_line_{index,size,len}: now of type size_t; in some cases
- the unsigned property makes a difference
- - STRING_SAVER: saved_line_{size,index} now of type size_t
- - shell_getc: don't allow shell_input_line to grow larger than SIZE_MAX;
- lines longer than that are truncated until read sees a newline;
- addresses theoretical buffer overflow described by Paul Eggert
- <eggert@cs.ucla.edu>
- - set_line_mbstate: size_t changes like shell_getc
- - shell_getc: if shell_input_line is larger than 32K, free it and
- start over to avoid large memory allocations sticking around
-
-variables.c
- - bind_global_variable: new function, binds value to a variable in
- the global shell_variables table
-
-variables.h
- - bind_global_variable: new extern declaration
-
-builtins/declare.def
- - declare_internal: if -g given with name=value, but variable is not
- found in the global variable table, make sure to call
- bind_global_variable so the variable is created and modified at
- global scope. Fixes a bug where declare -g x=y could modify `x'
- at a previous function scope
-
-command.h
- - W_ASSIGNARRAY: new word flag, compound indexed array assignment
-
-subst.h
- - ASS_MKGLOBAL: new assignment flag, forcing global assignment even in
- a function context, used by declare -g
-
-execute_cmd.c
- - fix_assignment_words: set W_ASSIGNARRAY flag if -a option given to
- declaration builtin
-
-subst.c
- - do_assignment_internal: explicitly handle case where we are
- executing in a function and we want to create a global array or
- assoc variable
- - shell_expand_word_list: call make_internal_declare if -a option
- given to declaration builtin (W_ASSIGNARRAY); handle -g option with
- it (W_ASSNGLOBAL). Fixes inconsistency noticed by Vicente Couce
- Diaz <vituko@gmail.com>, where declare -ag foo=(bar) could modify
- array variable foo at previous function scope, not global scope
-
- 12/27
- -----
-bashline.c
- - Minix needs the third argument to tputs to be a void funtion taking
- an int argument, not an int-returning function. Fix from
- John E. Malmberg <wb8tyw@qsl.net> as part of VMS bash port
-
- 12/29
- -----
-configure.ac,version.c,patchlevel.h
- - bash-4.3-devel: new version, new shell compatibility level (43)
-
-subst.c
- - parameter_brace_patsub: put the bash-4.2 code back in from the
- change of 3/3 that runs the replacement string through quote
- removal, make it dependent on shell_compatibility_level <= 42
-
-builtins/shopt.def
- - compat42: new shopt option
- - set_compatibility_level: change logic to set and unset various
- compat variables and shell_compatibility_level
-
-COMPAT
- - new documentation for bash-4.3 compatibility changes
-
-doc/{bash.1,bashref.texi}
- - compat42: document new shopt option
-
-builtins/shopt.def
- - set_compatibility_opts: new function, sets the various shopt
- compat variables based on the value of shell_compatibility_level
-
-builtins/common.h
- - set_compatibility_opts: new extern declaration
-
-variables.c
- - BASH_COMPAT: new special variable; sets the shell compatibility
- level. Accepts values in decimal (4.2) or integer (42) form;
- Unsetting variable, setting it to empty string, or setting it to
- out-of-range value sets the shell's compatibility level to the
- default for the current version. Valid values are 3.1/31 through
- the current version
- - sv_shcompat: new function implementing logic for BASH_COMPAT
-
-variables.h
- - sv_shcompat: new extern declaration
-
-doc/{bash.1,bashref.texi}
- - BASH_COMPAT: description of new variable
-
-lib/readline/complete.c
- - _rl_colored_stats: default back to 0 for 4.3 release branch
-
- 1/5/2013
- --------
-quit.h
- - remove spurious call to itrace in CHECK_WAIT_INTR
-
-bashline.c
- - bash_event_hook: if we're going to jump to top_level, make sure we
- clean up after readline() by calling rl_cleanup_after_signal().
- Fixes bug reported against devel branch by Raphaël Droz
- <raphael.droz@gmail.com>
- - bash_event_hook: reset the event hook before checking for signals
- or traps in case we longjmp
-
-doc/{bash.1,bashref.texi}
- - small additions to the set -e section to make it more clear that
- contexts where -e is ignored extend to compound commands as well
- as shell functions
-
-lib/readline/readline.h
- - rl_signal_event_hook: new extern declaration
-
-lib/readline/input.c
- - rl_signal_event_hook: new variable, hook function to call when a
- function (currently just read(2)) is interrupted by a signal and
- not restarted
- - rl_getc: call rl_signal_event_hook instead of rl_event_hook
-
-lib/readline/doc/rltech.texi
- - rl_signal_event_hook: document new function
-
-bashline.c
- - changes to set rl_signal_event_hook instead of rl_event_hook
-
-lib/readline/readline.h
- - change readline version numbers to 6.3
-
- 1/6
- ---
-doc/{bash.1,bashref.texi}
- - a couple of changes to the descriptions of the ERR trap and its
- effects based on a message from Rob Nagler <nagler@bivio.biz>
-
- 1/9
- ---
-expr.c
- - expassign: invalidate curlval before freeing and NULLing tokstr to
- avoid aliasing issues. Fixes bug reported by Eduardo A. Bustamante
- López<dualbus@gmail.com> and Dan Douglas <ormaaj@gmail.com>
-
-braces.c
- - array_concat: don't be so aggressive in trying to short-circuit. We
- can only short-circuit if we have a single-element array where the
- element is an empty string (array[0] == "" array[1] = 0x0). Existing
- practice requires us to replicate arrays and prefix or append empty
- strings. Fixes bug reported by Eduardo A. Bustamante López
- <dualbus@gmail.com>
-
- 1/11
- ----
-execute_cmd.c
- - execute_builtin: since mapfile uses evalstring() to run its callbacks
- internally, just like eval, so it needs to handle the case where the
- temp environment given to mapfile persists throughout the entire
- set of callback commands. This might be a problem with trap also, but
- trap isn't run in the same way. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
- 1/13
- ----
-redir.c
- - redirection_error: before expanding the redirection word (if
- expandable_redirection_filename returns true), disable command
- substitution during expansion. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
-subst.c
- - expand_word_internal: case '\\': if the next character is an IFS
- character, and the expansion occurs within double quotes, and the
- character is not one for which backslash retains its meaning, add
- the (escaped) '\' and the (escaped) character. Fixes bug reported
- by Dan Douglas <ormaaj@gmail.com>
-
- 1/15
- ----
-builtins/cd.def
- - cd_builtin: make sure call to internal_getopt handles -e option.
- Fixes bug reported by <mashimiao.fnst@cn.fujitsu.com>
-
- 1/17
- ----
-subst.c
- - expand_word_list_internal: make sure tempenv_assign_error is
- initialized to 0
-
-execute_cmd.c
- - execute_simple_command: make sure tempenv_assign_error is reset to 0
- after it's tested to see if an error should force the shell to exit.
- Fixes problem where a the failure of a tempenv assignment preceding
- a non-special builtin `sticks' and causes the next special builtin
- to exit the shell. From a discussion on bug-bash started by
- douxin <wq-doux@cn.fujitsu.com>
-
- 1/20
- ----
-subst.c
- - parameter_brace_expand_rhs: call stupidly_hack_special_variables
- after assigning with ${param[:]=word} even if IFS is changing.
- Suggested by Dan Douglas <ormaaj@gmail.com> [TENTATIVE, needs work
- on IFS side effects]
-
-command.h
- - W_GLOBEXP (which was unused) is now W_SPLITSPACE (which isn't used
- yet)
-
-{execute_cmd,subst,variables}.c
- - removed all code that mentioned W_GLOBEXP
- - removed mention of gnu_argv_flags and code that set it
-
- 1/22
- ----
-subst.c
- - param_expand: set W_SPLITSPACE if we expand (unquoted) $* and
- IFS is unset or null so we can be sure to split this on spaces
- no matter what happens with IFS later
- - expand_word_internal: note that param_expand returns W_SPLITSPACE
- in the returned word flags and keep track of that state with
- `split_on_spaces'
-
- 1/23
- ----
-subst.c
- - expand_word_internal: if split_on_spaces is non-zero, make sure
- we split `istring' on spaces and return the resultant word. The
- previous expansions should have quoted spaces in the positional
- parameters where necessary. Suggested by Dan Douglas
- <ormaaj@gmail.com>
-
-execute_cmd.c
- - execute_command_internal: make sure any subshell forked to run a
- group command or user subshell at the end of a pipeline runs any
- EXIT trap it sets. Fixes debian bash bug 698411
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411
-
-subst.c
- - shell_expand_word_list: fix code that creates args for and calls
- make_internal_declare to avoid calling it twice (missing `else'
- in 12/26 change)
- - do_assignment_internal: fix code from 12/26 change to fix problem
- where an existing assoc variable could be converted to an array
- without checking `mkassoc'
-
- 1/24
- ----
-builtins/evalfile.c
- - _evalfile: add missing `close (fd)' calls before returning to
- avoid fd leaks. Bug and fix from Roman Rakus <rrakus@redhat.com>
-
- 1/25
- ----
-builtins/read.def
- - read_builtin: don't try to play tricks with the top of the unwind-
- protect stack after read gets a SIGALRM; save input_string to new
- memory, run the stack, then restore input_string and assign the
- variables. Part of fix for bug reported by konsolebox
- <konsolebox@gmail.com>; the rest of the fix is with the changes in
- trap and signal handling and doing away with interrupt_immediately
-
- 1/26
- ----
-redir.c
- - redirection_expand, write_here_string, write_here_document: before
- calling any of the word expansion functions, after setting
- expanding_redir to 1 (which bypasses the temp environment in the
- variable lookup functions), call sv_ifs to reset the cached IFS-
- related variables set by subst.c:setifs(). This ensures that
- redirections will not get any IFS values that are set in the
- temporary environment, as Posix specifies. Then, after the word
- expansions, after resetting expanding_redir to 0, call sv_ifs
- again to make sure the cached IFS values are set from any
- assignments in the temporary environment. We force executing_builtin
- to 1 to `fool' the variable lookup functions into using any temp
- environment, then reset it to its old value after sv_ifs returns.
- This is what allows read() to use the (cached) IFS variables set
- in the temp environment. Fixes inconsistency reported by Dan Douglas
- <ormaaj@gmail.com>
-
- 1/29
- ----
-lib/readline/display.c
- - update_line: fix off-by-one error when updating vis_lbreaks array
- in a multibyte locale that occurs when moving multibyte chars from
- one line down to another. Bug report and fix from Egmont
- Koblinger <egmont@gmail.com>
-
- 1/30
- ----
-configure.ac
- - changed version to 4.3-alpha
-
-redir.c
- - redir_open: handle open returning -1/EINTR, which seems to happen
- a lot with FIFOs and SIGCHLD, and call QUIT to handle other
- signals that can interrupt open(2). Bug report and initial fix
- from Mike Frysinger <vapier@gentoo.org>
-
- 1/31
- ----
-subst.c
- - parameter_brace_expand: make sure to propagate the PF_ASSIGNRHS flag
- to parameter_brace_expand_word
- - parameter_brace_expand_word: make sure that if the PF_ASSIGNRHS flag
- is set and we are expanding ${a[@]} or ${a[*]} we set quoted to
- include Q_DOUBLE_QUOTES before calling array_value_internal, mirroring
- what we do for $@ and $*. Fixes inconsistency reported by Dan
- Douglas <ormaaj@gmail.com>
-
-configure.ac
- - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it
- will find $host-prefixed versions of utilities. Report and fix from
- Mike Frysinger <vapier@gentoo.org>
-
-builtins/setattr.def
- - set_var_attribute: check whether bind_variable (called when the
- variable whose attributes are being modified is found in the temp
- environment) just modified a read-only global variable, and don't
- bother marking the temporary variable for propagation if so. The
- propagation is superfluous and will result in a strange error
- message
-
- 2/2
- ---
-variables.c
- - initialize_shell_variables: don't try to import function definitions
- with invalid names from the environment if already in posix mode,
- but create them as (invisible) exported variables so they pass
- through the environment. Print an error message so user knows
- what's wrong. Fixes bug reported by Tomas Trnka <ttrnka@mail.muni.cz>
-
- 2/9
- ---
-
-builtins/read.def
- - sigalrm_seen, alrmbuf: now global so the rest of the shell (trap.c)
- can use them
- - sigalrm: just sets flag, no longer longjmps to alrmbuf; problem was
- longjmp without manipulating signal mask, leaving SIGALRM blocked
-
-quit.h
- - move CHECK_ALRM macro here from builtins/read.def so trap.c:
- check_signals() can call it
-
-trap.c
- - check_signals: add call to CHECK_ALRM before QUIT
- - check_signals_and_traps: call check_signals() instead of including
- CHECK_ALRM and QUIT inline. Integrating check for read builtin's
- SIGALRM (where zread call to check_signals_and_traps can see it)
- fixes problem reported by Mike Frysinger <vapier@gentoo.org>
-
- 2/12
- ----
-lib/glob/xmbsrtowcs.c
- - xdupmbstowcs2: fixed but where end of string was not handled
- correctly, causing loop to go past end of string in a bunch of cases.
- Fixes bug reported by "Dashing" <dashing@hushmail.com>
-
-
- 2/13
- ----
-builtins/pushd.def
- - popd_builtin: treat any argument that isn't -n or of the form
- [-+][[:digit:]]* as an error. Fixes problem reported by Bruce
- Korb <bruce.korb@gmail.com>
-
- 2/14
- ----
-configure.ac
- - add check for sig_atomic_t; already a placeholder for it in
- config.h.in
-
- 2/15
- ----
-subst.c
- - do_compound_assignment: don't call assign_compound_array_list with
- a NULL variable in case make_local_xxx_variable returns NULL
- (it will if you try to shadow a readonly or noassign variable).
- Fixes bug reported by Richard Tollerton <rich.tollerton@ni.com>
-
- 2/16
- ----
-variables.c
- - make_local_variable: print error messager if an attempt is made to
- create a local variable shadowing a `noassign' variable. Previously
- we just silently refused to do it
-
-trap.[ch]
- - get_original_signal: now global so rest of the shell can use it
-
-sig.c
- - initialize_shell_signals: install a signal handler for SIGTERM
- that does nothing except set a sigterm_received flag instead of
- ignoring it with SIG_IGN, as long as SIGTERM is not ignored when
- the shell is started. Use get_original_signal early to get the
- original handler, since we will do that later anyway
- - set_signal_handler: if installing sigterm_sighandler as the SIGTERM
- handler, make sure to add SA_RESTART flag to make it as close to
- SIG_IGN as possible
-
-sig.h
- - sigterm_sighandler: new extern declaration
-
-quit.h
- - RESET_SIGTERM: set sigterm_receved to 0
- - CHECK_SIGTERM: check sigterm_received; if it's non-zero, treat it
- as a fatal signal and call termsig_handler to exit the shell
-
-jobs.c
- - make_child: call RESET_SIGTERM just before fork() so we can detect
- if the child process received a SIGTERM before it's able to change
- the signal handler back to what it was when the shell started
- (presumably SIG_DFL). Only has effect if the shell installed
- sigterm_sighandler for SIGTERM, interactive shells that were not
- started with SIG_IGN as the SIGTERM handler
- - make_child: call RESET_SIGTERM in the parent after fork() so the
- rest of the shell won't react to it
-
-execute_cmd.c
- - execute_simple_command: call CHECK_SIGTERM after make_child in child
- to catch SIGTERM received after fork() and before restoring old
- signal handlers
- - execute_disk_command: call CHECK_SIGTERM after make_child in child
- process after restoring old signal handlers and again just before
- calling shell_execve. Fixes race condition observed by
- Padraig Brady <p@draigbrady.com> when testing with his `timeout'
- program
-
-lib/readline/display.c
- - open_some_spaces: new function, subset of insert_some_chars that just
- opens up a specified number of spaces to be overwritten
- - insert_some_spaces: now just calls to open_some_spaces followed by
- _rl_output_some_chars
- - update_line: use col_temp instead of recalculating it using
- _rl_col_width in the case where we use more columns with fewer bytes
- - update_line: use open_some_spaces and then output the right number
- of chars instead of trying to print new characters then overwrite
- existing characters in two separate calls. This includes removing
- some dodgy code and making things simpler. Fix from Egmont
- Koblinger <egmont@gmail.com>
- - use new variable `bytes_to_insert' instead of overloading temp in
- some code blocks (nls - nfd, bytes that comprise the characters
- different in the new line from the old)
-
- 2/18
- ----
-redir.c
- - do_redirection_internal: add undoable redirection for the implicit
- close performed by the <&n- and >&n- redirections. Fixes bug
- reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 2/19
- ----
-sig.c
- - termsig_handler: an interactive shell killed by SIGHUP and keeping
- command history will try to save the shell history before exiting.
- This is an attempt to preserve the save-history-when-the-terminal-
- window-is-closed behavior
-
- 2/21
- ----
-braces.c
- - brace_expand: if a sequence expansion fails (e.g. because the
- integers overflow), treat that expansion as a simple string, including
- the braces, and try to process any remainder of the string. The
- remainder may include brace expansions. Derived from SuSE bug
- 804551 example (https://bugzilla.novell.com/show_bug.cgi?id=804551)
-
- 2/23
- ----
-{quit,sig}.h,sig.c
- - sigterm_received declaration now in sig.h; type is sig_atomic_t
- - sigwinch_received type now sig_atomic_t
- - sig.h includes bashtypes.h and <signal.h> if SIG_DFL not defined
- (same logic as trap.h) to pick up sig_atomic_t
-
-unwind_prot.c
- - include sig.h before quit.h (reverse order)
-
- 2/27
- ----
-builtins/shopt.def
- - reset_shopt_options: make sure check_window_size is reset to the
- default from config.h, not unconditionally to 0
-
-jobs.[ch]
- - last_made_pid, last_asynchronous_pid: now volatile. Change from SuSE
-
-jobs.c
- - wait_for: if we're using sigaction to install a handler for SIGCHLD,
- make sure we specify SA_RESTART
-
-lib/{tilde,readline}/shell.c
- - get_home_dir: instead of looking in the password file every time,
- look once and cache the result
-
-sig.[ch]
- - sigwinch_received, sigterm_received: now `volatile' qualified
-
-sig.c,quit.h
- - interrupt_state,terminating_signal: now sig_atomic_t
-
- 3/1
- ---
-MANIFEST,examples/*
- - removed around 120 files without FSF copyrights; requested by
- Karl Berry in early January
-
- 3/2
- ---
-lib/malloc/malloc.c
- - morecore: only check whether SIGCHLD is trapped if SIGCHLD is defined
-
-doc/bashref.texi
- - Fixed most of the examples in the GNU Parallel section to use better
- shell idioms following complaints on bug-bash; added a couple of
- examples and smoothed out the text
-
-quit.h
- - include "sig.h" for sig_atomic_t
-
-lib/readline/display.c
- - update_line: when inserting one or more characters at the end of
- the display line in a non-multibyte environment, just write from the
- first difference to the end of the line and return. We don't have
- to adjust _rl_last_c_pos. This is needed to adjust from the old
- two-part copy to a single call to _rl_output_some_chars (change of
- 2/16)
-
- 3/4
- ---
-Makefile.in,doc/Makefile.in
- - PACKAGE_TARNAME, docdir: new variables substituted by autoconf
- - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary
- documentation files to be installed into $(docdir)
- - install: add new rule to install $(OTHER_DOCS)
- - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS)
-
-doc/bash.1
- - add URL to `POSIX' file in `SEE ALSO' section; put pointer to that
- section in --posix and set -o posix descriptions
-
-examples/
- - removed around 110 examples at the request of the FSF due to copyright
- issues
-
- 3/5
- ---
-builtins/setattr.def
- - readonly: modified help text slightly to make it clearer that
- functions aren't changed or displayed unless the -f option is given.
- Report from <gotmynick@gmail.com>
-
- 3/9
- ---
-include/typemax.h
- - SIZE_MAX: define to 65535 (Posix minimum maximum) if not defined
-
-parse.y
- - include "typemax.h" for possible SIZE_MAX definition, make sure we
- include it after shell.h
-
-{braces,expr}.c
- - include "typemax.h" for possible INTMAX_MIN and INTMAX_MAX definitions
-
- 3/10
- ----
-bashline.c
- - bash_default_completion: make sure completion type of `!' (same as
- TAB but with show-all-if-ambiguous set) and glob-word-completion
- sets rl_filename_completion_desired to 0 so extra backslashes don't
- get inserted by `quoting' the completion. We can't kill all the
- matches because show-all-if-ambiguous needs them. Bug report from
- Marcel (Felix) Giannelia <info@skeena.net>
-
-[bash-4.3-alpha frozen]
-
- 3/14
- ----
-general.c
- - trim_pathname: use memmove instead of memcpy since the source and
- destination pathnames may overlap. Report and fix from Matthew
- Riley <mattdr@google.com>
-
- 3/18
- ----
-configure.ac
- - socklen_t is defined as `unsigned int' if configure can't find it
-
- 3/20
- ----
-lib/readline/complete.c
- - S_ISVTX: since it's not defined on all platforms (Minix), make sure
- its use is protected with #ifdef
-
- 3/21
- ----
-doc/{bash.1,bashref.texi}
- - Added mention of ${!name[@]} and ${!name[*]} expansions to get all
- indices of an array. Suggested by Jonathan Leffler
- <jonathan.leffler@gmail.com>
-
- 3/24
- ----
-subst.h
- - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that
- single quotes (for now) will be treated as ordinary characters
-
-subst.c
- - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now
-
- 3/25
- ----
-support/config.{guess,sub}
- - updated to versions from autoconf-2.69
-
- 3/31
- ----
-lib/sh/shquote.c
- - sh_single_quote: short-circuit quoting a single "'" instead of
- creating a long string with empty single-quoted strings
-
-parser.h
- - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single-
- quote results of $'...' expansion because quote removal will be
- done later. Right now this is only done for ${word/pat/rep}
-
-parse.y
- - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern
- substitution word expansion so we don't treat single quote specially
- in the pattern or replacement string
- - parse_matched_pair: if we're parsing a dollar-brace word expansion
- (${...}) and we're not treating single quote specially within
- double quotes, single-quote the translation of $'...' ansi-c
- escaped strings. Original report and fix from Eduardo A.
- Bustamante López <dualbus@gmail.com>
-
-subst.c
- - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the
- DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat
- single quotes specially within a double-quoted string
-
-execute_cmd.c
- - fix_assignment_words: skip over assignment statements preceding a
- command word before trying to figure out whether or not assignment
- statements following a possible declaration command should be
- treated specially. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
- 4/4
- ---
-lib/readline/readline.c
- - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether
- the key is a text modification command) if the key sequence length
- is 1. That keeps the arrow keys from setting the last command
- when called in vi command mode. Fixes bug reported by Ian A.
- Watson <watson_ian_a@lilly.com>
-
- 4/6
- ---
-lib/readline/bind.c
- - rl_parse_and_bind: when parsing a double-quoted string as the value
- of a variable, make sure we skip past the leading double quote.
- Fix from Andreas Schwab <schwab@linux-m68k.org>
-
-variables.c
- - hash_lookup: set new local variable last_table_searched to the table
- a successful lookup appears in; tested in make_local_variable to
- solve the problem below
- - make_local_variable: if we find a variable with the tempenv flag
- set at the same `level' as variable_context', but not found in the
- temporary_env (temp environment preceding the builtin), return it.
- The temp environment preceding the function call has already been
- merged (in execute_function) into the list of variable contexts the
- function sees as shell_variables by the time this is called. Fixes
- inconsistency pointed out by Dan Douglas <ormaaj@gmail.com>
-
-subst.c
- - expand_arith_string: expanded out contents of expand_string,
- expand_string_internal, expand_string_if_necessary to create a
- WORD_DESC and call call_expand_word_internal() on it directly.
- We don't want process substitution to be performed ( 1<(2) ) should
- mean something different in an arithmetic expression context.
- It doesn't work to just turn on the DQUOTE flag, since that means
- that things like ${x["expression"]} are not expanded correctly.
- Fixes problem pointed out by Dan Douglas <ormaaj@gmail.com>
-
- 4/13
- ----
-subst.c
- - process_substitute: run the EXIT trap before exiting, as other
- shells seem to. Fixes problem pointed out by Dan Douglas
- <ormaaj@gmail.com>
-
-lib/readline/readline.c
- - readline_internal_setup: call rl_vi_insertion_mode to enter vi
- mode instead of rl_vi_insert_mode to avoid resetting the saved last
- command information. Posix says that `.' can repeat a command
- that was entered on a previous line so we need to save the info.
- Fixes bug reported by Ian A. Watson <watson_ian_a@lilly.com>
-
- 4/14
- ----
-lib/readline/complete.c
- - rl_completion_matches: make sure xrealloc returns something non-null
- (can happen when interrupted by a signal) before trying to add
- matches to match_list
-
-subst.c
- - array_remove_pattern: return NULL right away if array_variable_part
- returns an invisible variable
- - array_length_reference: handle array_variable_part returning an
- invisible variable
- - get_var_and_type: handle array_variable_part returning an invisible
- variable
-
- 4/15
- ----
-execute_cmd.c
- - execute_command_internal: make sure to run the EXIT trap for group
- commands anywhere in pipelines, not just at the end. From a point
- raised by Andreas Schwab <schwab@linux-m68k.org>
-
-variables.c
- - bind_int_variable: make sure invisible flag is unset. Fixes problems
- like "declare -ai a; : $(( a[4]=4 ));"
-
-arrayfunc.c
- - array_variable_part: return variable even if invisible flag set,
- callers must handle invisible vars
-
- 4/18
- ----
-builtins/set.def
- - unset_builtin: if -n flag given, call unset_nameref instead of
- unset_variable
-
-variables.c
- - find_variable_nameref: print warning message if nameref circular
- reference detected, return NULL and let caller deal with it
-
-builtins/declare.def
- - declare_builtin: only disallow global references at this point if
- we are at the global scope
-
- 5/16
- ----
-configure.ac
- - update release status to beta
-
- 5/23
- ----
-trap.c
- - run_pending_traps: save and restore pipeline around calls to
- evalstring() in case we get a trap while running a trap. Have to
- figure out the recursive running traps issue elsewhere. Fixes
- bug reported by Roman Rakus <rrakus@redhat.com>
- - run_pending_traps: make sure to set running_trap to the appropriate
- signal value when running a trap command
- - run_pending_traps: short-circuit immediately if running_trap set
- when invoked. Could change this later to only skip if it would
- run the same trap as currently being run (running_trap == sig + 1)
-
-configure.ac
- - add warning if bison not found
-
-lib/readline/doc/rltech.texi
- - new section with an example program illustrating the callback
- interface. Suggested by Peng Yu <pengyu.ut@gmail.com>
-
-examples/loadables/Makefile.in
- - remove references to `cut' and `getconf', which were removed in
- early March
-
- 5/28
- ----
-lib/sh/pathphys.c
- - sh_realpath: correct inverted two arguments to call to sh_makepath.
- Report and fix from Julien Thomas <jthomas@exosec.fr>
-
- 6/7
- ---
-execute_cmd.c
- - executing_line_number: the else clauses that are conditional on
- various options being defined can simply be if clauses -- they are
- mutually exclusive and all have `return' in the body. Fixes bug
- reported by Flavio Medeiros <flaviomotamedeiros@gmail.com>
-
- 6/25
- ----
-lib/readline/readline.c
- - readline_internal_setup: only sent the meta-key enable string to the
- terminal if we've been told to use one and the terminal has been
- successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0).
- Suggested by Dan Mick <dan.mick@inktank.com>
-
-lib/readline/signals.c
- - _rl_signal_handler: call any defined signal hook after calling
- rl_resize_terminal when handling a SIGWINCH. We already have called
- the original SIGWINCH handler but will not be resending the signal
- to ourselves
-
- 6/27
- ----
-lib/readline/doc/history.3, doc/bash.1
- - fix description of the `$' modifier to note that it expands to the
- last *word*, which is not always the last argument. Report from
- ariyetz@gmail.com via gnu.org RT
-
- 6/29
- ----
-lib/glob/smatch.c
- - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead
- of 0 (0 if not defined)
-
-configure.ac,config.h.in
- - --enable-glob-asciiranges-default: new option, controls the value of
- GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on
- by default
-
-doc/bashref.texi
- - document new --enable-glob-asciiranges-default configure option
-
-variables.c
- - assign_in_env: implement += value appending semantics for assignments
- preceding command names
-
- 7/4
- ---
-expr.c
- - set lasttok = NUM in all of the functions that result in a number,
- even if it's a boolean, to avoid errors with constructs like
- 1 * x = 1, which should be an asignment error. Fixes problem
- pointed out by Dan Douglas <ormaaj@gmail.com>
-
-parse.y
- - decode_prompt_string: don't bother to call strcpy if
- polite_directory_format returns its argument unchanged. It's not
- necessary and Mac OS X 10.9 aborts because of a supposed overlapping
- string copy. Bug and fix from simon@hitzemann.org
-
-subst.c
- - parameter_brace_find_indir: new function, code from
- parameter_brace_expand_indir that looks up the indirectly-referenced
- variable, but does not expand it
- - parameter_brace_expand_indir: call parameter_brace_find_indir to
- look up indirected variable reference
- - get_var_and_type: call parameter_brace_find_indir if it looks like we
- are trying to manipulate an indirect variable reference like
- ${!b%%foo}. This makes a difference if !b references an array
- variable. Bug report from Dan Douglas <ormaaj@gmail.com>
-
- 7/6
- ---
-lib/sh/casemod.c
- - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX,
- since cval can convert something to a wchar_t greater than UCHAR_MAX.
- Fixes bug reported by Tomasz Tomasik <scx.mail@gmail.com>
-
- 7/8
- ---
-lib/readline/history.c
- - add_history_time: if history_length == 0, referencing history_length
- - 1 will result in an array bounds error, so make history_length be
- at least 1 before going on. Fixes bug reported by Geng Sheng Liu
- <gsliu.tju@gmail.com>
-
-builtins/setattr.def
- - show_func_attributes: display definition (if NODEFS argument is 0) and
- attributes for a particular function; used by `declare -fp name'
-
-builtins/declare.def
- - declare_internal: call show_func_attributes if -f supplied with -p.
- Fixes inconsistency observed by Linda Walsh <bash@tlinx.org>
-
-builtins/common.h
- - new extern declaration for show_func_attributes
-
-builtins/read.def
- - read_builtin: check the first supplied variable name for validity
- before attempting to read any input, since we know we will have to
- at least use that one. Don't check any other names yet. Suggested
- by jidanni@jidanni.org
-
- 7/10
- ----
-redir.c
- - do_redirection_internal: when closing a file descriptor with
- r_close_this ([n]<&-) count close errors as redirection errors if
- errno ends up as EIO or ENOSPC. Originally reported back in April
- 2012 by Andrey Zaitsev <jstcdr@gmail.com>
-
- 7/11
- ----
-redir.c
- - do_redirection_internal: before calling check_bash_input, make sure
- that we don't call check_bash_input for an asynchronous process that
- is replacing stdin with something else. The seek backwards affects
- the parent process as well, since parents and children share the
- file pointer. Fixes problem originally reported in March 2013 by
- Martin Jackson <mjackson220.list@gmail.com>
-
- 7/13
- ----
-doc/{bash.1,bashref.texi}
- - slight change to add a description of `shopt -o' suggested by Bruce
- Korb <bruce.korb@gmail.com>
-
- 7/19
- ----
-lib/readline/histfile.c
- - history_do_write: if close returns < 0, make sure we restore the
- backup history file and return a non-zero value
- - history_truncate_file: if write or close return < 0, make sure we
- return a non-zero value
-
-[bash-4.3-beta frozen]
-
- 7/21
- ----
-lib/readline/isearch.c
- - rl_display_search: now takes an entire search context flags word as
- the second argument, instead of just reverse flag; changed callers
- - rl_display_search: if the search has failed, add `failed ' to the
- beginning of the search prompt
- - _rl_isearch_dispatch: if the search has failed, display the entire
- search string with an indication that the search failed but with the
- last matching line. Suggested by jidanni@jidanni.org
-
-command.h
- - W_ASSIGNINT: new word flag; used internally for make_internal_declare
- and set by fix_assignment_words
-
-execute_cmd.c
- - fix_assignment_words: set W_ASSIGNINT if compound assignment and -i
- given as option. We don't do anything with the value yet
-
-subst.c
- - shell_expand_word_list: rework the way the option list that is
- passed to make_internal_declare is created
-
- 8/1
- ---
-doc/{bash.1,bashref.texi}
- - minor changes to description of $! based on a report from Chris
- Down <chris@chrisdown.name>
-
-arrayfunc.c
- - assign_array_element_internal: before trying to get an array's max
- index to process a negative subscript, make sure the array exists.
- Bug report from Geir Hauge <geir.hauge@gmail.com>
-
- 8/2
- ---
-arrayfunc.c
- - assign_array_element_internal: before using array_max_index() when
- processing a negative subscript, make sure the variable is an array.
- if it's not, use 0 as array_max_index assuming it's a string.
- Fixes bug report from Geir Hauge <geir.hauge@gmail.com>
-
- 8/3
- ---
-Makefile.in
- - pcomplete.o: add dependency on $(DEFDIR)/builtext.h. Suggested by
- Curtis Doty <curtis@greenkey.net>
-
- 8/5
- ---
-lib/glob/sm_loop.c
- - strcompare: short-circuit and return FNM_NOMATCH if the lengths of the
- pattern and string (pe - p and se - s, respectively) are not equal
- - strcompare: don't bother trying to set *pe or *se to '\0' if that's
- what they already are. Fixes bug reported by Geir Hauge
- <geir.hauge@gmail.com>
-
- 8/6
- ---
-doc/{bash.1,bashref.texi},builtins/hash.def,lib/readline/doc/rluser.texi
- - minor typo changes from Geir Hauge <geir.hauge@gmail.com>
-
-bultins/help.def
- - show_longdoc: avoid trying to translate the empty string because it
- often translates to some boilerplate about the project and
- translation. Report and fix from Geir Hauge <geir.hauge@gmail.com>
-
- 8/8
- ---
-builtins/help.def
- - help_builtin: try two passes through the list of help topics for each
- argument: one doing exact string matching and one, if the first pass
- fails to find a match, doing string prefix matching like previous
- versions. This prevents `help read' from matching both `read' and
- `readonly', but allows `help r' to match everything beginning with
- `r'. Inspired by report from Geir Hauge <geir.hauge@gmail.com>
-
- 8/13
- ----
-builtins/fc.def
- - fc_builtin,fc_gethnum: calculate `real' end of the history list and
- use it if -0 is specified as the beginning or end of the history
- range to list. Doesn't work for fc -e or fc -s by design. Feature
- requested by Mike Fied <micfied@gmail.com>
-
- 8/16
- ----
-trap.c
- - _run_trap_internal: use {save,restore}_parser_state instead of
- {save,restore}_token_state. It's more comprehensive
-
- 8/23
- ----
-doc/bash.1
- - disown: remove repeated text. Report and fix from Thomas Hood
- <jdthood@gmail.com>
-
- 8/25
- ----
-lib/readline/rltty.c
- - set_special_char: fix prototype (last arg is rl_command_func_t *)
-
-sig.c
- - set_signal_handler: return oact.sa_handler only if sigaction
- succeeds; if it doesn't, return SIG_DFL (reasonable default). From
- https://bugzilla.redhat.com/show_bug.cgi?id=911404
-
-bashline.c
- - attempt_shell_completion: fix to skip assignment statements preceding
- command name even if there are no programmable completions defined.
- From https://bugzilla.redhat.com/show_bug.cgi?id=994659
- - attempt_shell_completion: if still completing command word following
- assignment statements, do command completion even if programmable
- completion defined for partial command name entered so far
-
- 8/26
- ----
-pcomplete.c
- - pcomp_filename_completion_function: make sure rl_filename_dequoting_function
- is non-NULL before trying to call it. Bug and fix from
- Andreas Schwab <schwab@linux-m68k.org>
-
-bashline.c
- - bash_command_name_stat_hook: if *name is not something we're going
- to look up in $PATH (absolute_program(*name) != 0), just call the
- usual bash_filename_stat_hook and return those results. This makes
- completions like $PWD/exam[TAB] add a trailing slash
-
- 9/2
- ---
-builtins/read.def
- - read_builtin: before comparing what we read to the delim, make sure
- we are not supposed to be ignoring the delimiter (read -N). We
- set the delim to -1, but it's possible to read a character whose
- int value ends up being between -1 and -128. Fixes bug
- reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
-doc/{bash.1,bashref.texi}
- - word splitting: crib some language from Posix to make it clear that
- characters in IFS are treated as field *terminators*, not field
- *separators*. Addresses issue raised by DJ Mills
- <danielmills1@gmail.com>
-
-lib/readline/{util.c,rldefs.h}
- - _rl_stricmp,_rl_strnicmp: now take const char * string arguments;
- changed prototype declarations
-
- 9/5
- ---
-doc/{bash.1,bashref.texi}
- - [[: modify description of pattern matching to make it clear that the
- match is performed as if the extglob option were enabled. From Red
- Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=1002078
-
- 9/12
- ----
-lib/readline/isearch.c
- - _rl_isearch_dispatch: if we read an ESC and it's supposed to
- terminate the search, make sure we check for typeahead with
- _rl_pushed_input_available, since installing a hook function causes
- typeahead to be collected in `ibuffer' (input.c). If there is any,
- make sure we still use the ESC as a prefix character. Bug and fix
- from Mike Miller <mtmiller@ieee.org>
-
- 9/16
- ----
-builtins/{caller,cd,kill,pushd,wait}.def
- - builtin_usage(): make sure call to this sets return status to
- EX_USAGE
-
- 9/18
- ----
-terminal.c
- - rl_change_environment: new application-settable variable; if non-
- zero (the default), readline will modify LINES and COLUMNS in the
- environment when it handles SIGWINCH
- - _rl_get_screen_size: if rl_change_environment is non-zero, use setenv
- to modify LINES and COLUMNS environment variables
-
-readline.h
- - rl_change_environment: new extern declaration for applications
-
- 9/22
- ----
-configure.ac
- - relstatus: bumped version to bash-4.3-beta2
-
- 9/24
- ----
-
-lib/readline/readline.c
- - bind_arrow_keys_internal: added more key bindings for the numeric key
- pad arrow keys on mingw32. Patch from Pierre Muller
- <pierre.muller@ics-cnrs.unistra.fr>
-
- 10/19
- -----
-
-bashline.c
- - maybe_restore_tilde: version of restore_tilde that honors `direxpand';
- calls restore_tilde after saving directory expansion hook if
- necessary. Report from Andreas Schwab <schwab@linux-m68k.org>
-
-builtins/cd.def
- - -@: new option, allows cd to use `extended attributes' present in
- NFSv4, ZFS; idea taken from ksh93. Attributes associated with a
- file are presented as a directory containing the attributes as
- individual files. Original patch contributed by Cedric Blancher
- <cedric.blancher@gmail.com>
-
- 10/20
- -----
-aclocal.m4
- - BASH_CHECK_MULTIBYTE: check for wcwidth being broken with unicode
- combining characters needs a value to use when cross-compiling.
- Bug report from Bert Sutherland <bertsutherland@gmail.com>
-
-doc/{bash.1,bashref.texi}
- - document new -@ option to cd builtin
-
- 10/28
- -----
-lib/glob/{{gmisc,glob}.c,glob.h}
- - extglob_pattern renamed to extglob_pattern_p, declared in glob.h
-
-subst.c
- - expand_word_internal: typo fix: case to fix " $@\ " bug in bash-4.2
- had a typo (& isexp instead of &&)
-
- 10/29
- -----
-input.c
- - getc_with_restart: make sure local_index and local_bufused are
- reset to 0 before returning EOF, in case we are running an interactive
- shell without line editing and ignoreeof is set. Report and fix
- from Yong Zhang <yong.zhang@windriver.com>
-
-lib/readline/search.c
- - _rl_nsearch_init: take out extra third argument to rl_message; it
- only matches prototype (and maybe format) in cases where
- PREFER_STDARG and USE_VARARGS are both undefined, which is rare
-
- 10/31
- -----
-subst.c
- - process_substitute: when opening the named pipe in the child, open
- without O_NONBLOCK to avoid race conditions. Happens often on AIX.
- Bug report and fix from Michael Haubenwallner
- <michael.haubenwallner@salomon.at>
-
-builtins/ulimit.def
- - RLIMIT_NTHR: if RLIMIT_PTHREAD is not defined, but RLIMIT_NTHR is,
- use RLIMIT_NTHR (NetBSD)
-
- 11/5
- ----
-locale.c
- - set_default_locale_vars,set_locale_var: if TEXTDOMAINDIR has been
- set, and default_dir has a non-null value, call bindtextdomain(3)
- when TEXTDOMAIN is assigned a value. Fixes problem reported by
- Michael Arlt <qwertologe@googlemail.com>
-
- 11/6
- ----
-builtins/cd.def
- - cdxattr: only create synthetic pathname in `buf' if NDIRP argument
- is non-null
- - change_to_directory: if we have specified -@ and cdxattr returns
- failure, fail immediately. Fixes bug reported by Joshuah Hurst
- <joshhurst@gmail.com>
-
- 11/12
- -----
-redir.c
- - print_redirection: change r_err_and_out (&>) and its append form,
- r_append_err_and_out (&>>) cases to separate redirection operator
- from filename by a space, in case we have a process substitution.
- Fixes bug reported by admn ombres <admn.ombres@gmail.com>
-
- 11/15
- -----
-execute_cmd.c
- - execute_simple_command: don't close process substitution fds until
- we are finished executing any current shell function. Partial fix
- for bug reported by John Dawson <john.dawson@gmail.com>
-
-support/shobj-conf
- - add support for Darwin 13 (Mac OS X 10.9, Mavericks). Based on a
- report by Ludwig Schwardt <ludwig.schwardt@gmail.com>
-
- 11/20
- -----
-[bash-4.3-rc1 frozen]
-
- 11/24
- -----
-builtins/printf.def
- - bind_printf_variable: make sure that the variable assigned to is
- no longer marked as invisible. Fixes bug reported by NBaH
- <nbah@sfr.fr>
-
- 11/28
- -----
-jobs.c
- - delete_old_job: fix off-by-one error in job index in call to
- internal_warning. Bug report from Peter Cordes <peter@cordes.ca>
-
- 11/30
- -----
-doc/bashref.texi
- - add string to description of special parameters with name of
- special parameter prefixed by a $, so you can search for $#,
- for instance
-
- 12/2
- ----
-lib/readline/{histexpand.c
- - get_history_event: account for current_history() possibly returning
- NULL. Report and fix from Pankaj Sharma <pankaj.s01@samsung.com>
-
-
- 12/11
- -----
-
-lib/readline/parse-colors.c
- - get_funky_string: don't call abort if we see something we can't
- parse; just return an error
- - _rl_parse_colors: if we encounter an error while parsing $LS_COLORS
- we need to leave _rl_color_ext_list as NULL after freeing its
- elements, then turn off _rl_colored_stats. Report and fix from Martin
- Wesdorp <mwesdorp@casema.nl>
-
- 12/13
- -----
-
-lib/readline/parse-colors.c
- - _rl_parse_colors: if we encounter an unrecognized prefix, throw an
- error but try to recover and go on to the next specification
-
-variables.c
- - make_local_variable: for new variables this function creates, set
- the att_invisible attribute. All callers from declare_internal.
- Indirectly, this is a fix for bug with `declare -n var; var=foo;'
- reported by Pierre Gaston <pierre.gaston@gmail.com>
- - bind_variable: if assigning to nameref variable that doesn't have
- a value yet (e.g., with `declare -n var; var=foo'), don't try to
- use the unset name. Fixes a segfault reported by Pierre Gaston
- <pierre.gaston@gmail.com>
-
-execute_cmd.c
- - execute_command_internal: make sure last_command_exit_value is set
- to 0 after any command executed in the background. Fixes bug
- reported by Martin Kealey <martin@kurahaupo.gen.nz>
-
- 12/17
- -----
-support/config.{guess,sub}
- - updated to latest versions from git
-
- 12/19
- -----
-parse.y
- - struct STRING_SAVER: now has a new `flags' element, to identify the
- caller: alias expansion, double-paren parsing, or parse_and_execute
- - push_string: now sets flags to PSH_ALIAS if `ap' argument is non-NULL
- - push_string: now doesn't attempt to call strlen on a NULL string to
- set shell_input_line_size
- - parser_expanding_alias, parser_save_alias, parser_restore_alias: new
- functions to provide an external interface to push_string and
- pop_string; parser_save_alias sets flags element to PSH_SOURCE (could
- be renamed PSH_EXTERN someday)
- - shell_getc: when yy_getc returns '\0', instead of just testing
- whether the pushed_string_list is not-empty before popping it, don't
- pop if if the saved string has flags PSH_SOURCE, indicating that
- parse_and_execute set it before setting bash_input to the string.
- We should continue reading to the end of that string before popping
- back to a potential alias. Partial solution for the problem of aliases
- with embedded newlines containing `.' commands being executed out of
- order reported by Andrew Martin <andrew.martin@gmail.com>
- - shell_getc: when yy_getc returns '\0' and there is a saved string of
- type PSH_SOURCE, restart the read without popping the string stack
- if we have not read to the end of bash_input.location.string. Rest
- of fix for out-of-order execution problem
-
-externs.h
- - parser_expanding_alias, parser_save_alias, parser_restore_alias: new
- extern function declarations
-
-builtins/evalstring.c
- - pe_prologue: if the parser is expanding an alias, make sure to add
- an unwind-protect to restore the alias; undoes the work that will be
- performed by parse_and_execute/parse_string
- - parse_and_execute,parse_string: after calling push_stream to save
- bash_input, check whether or not the parser is currently expanding
- an alias (parser_expanding_alias() != 0). If it is, we want to save
- that string in the pushed_string_list, which we do with
- parser_save_alias.
-
- 12/23
- -----
-execute_cmd.c
- - execute_for_command: make sure to set line_number before expanding
- the word list, so expansion errors have the right line number.
- From a report from Ben Okopnik <ben@okopnik.com>
-
-expr.c
- - exp2: save token pointer before calling readtok(), arrange to use
- saved token pointer when printing error token on a division by 0
- error
-
- 12/27
- -----
-lib/readline/display.c
- - rl_redisplay: when calculating effects of invisible characters in a
- prompt that is split across physical screen lines to set the indices
- of linebreaks, don't bother testing local_prompt_prefix (line 751).
- That prefix doesn't matter when calculating prompt visible and
- invisible characters. Fixes problem reported by Jinesh Choksi
- <jinesh@onelittlehope.com>
-
-Makefile.in
- - install: make sure to use $(DESTDIR) when installing OTHER_DOCS.
- Report and fix from Matthias Klose <doko@debian.org>
-
-doc/texinfo.tex
- - updated to version of 2013-09-11
-
- 12/28
- -----
-lib/readline/undo.c
- - rl_do_undo: if we are undoing from a history entry (rl_undo_list ==
- current_history()->data), make sure the change to rl_line_buffer is
- reflected in the history entry. We use the guts of
- rl_maybe_replace_line to do the work. Fixes problem reported by
- gregrwm <backuppc-users@whitleymott.net>
-
- 12/30
- -----
-sig.c
- - sigint_sighandler: if we get a SIGINT (and this signal handler is
- installed) while the wait builtin is running, note that we received
- it in the same way as jobs.c:wait_sigint_handler and return. The
- various wait_for functions will look for that with CHECK_WAIT_INTR.
- This fixes the wait builtin not being interruptible in an interactive
- job control shell
-
- 12/31
- -----
-trap.c
- - set_signal_hard_ignored: rename set_signal_ignored to this, since it
- both sets original_signals[sig] and sets the HARD_IGNORE flag
- - set_signal_ignored: new function, now just sets original_signals[sig]
-
-trap.h
- - set_signal_hard_ignored: new external declaration
-
-sig.c
- - initialize_terminating_signals: call set_signal_hard_ignored instead
- of set_signal_ignored for signals with disposition SIG_IGN when the
- shell starts
-
-execute_cmd.c
- - setup_async_signals: make sure we get the original dispositions for
- SIGINT and SIGQUIT before starting the subshell, and don't call
- set_signal_ignored because that sets original_signals[sig]. If we
- don't, subsequent attempts to reset handling using trap will fail
- because it thinks the original dispositions were SIG_IGN. Posix
- interpretation 751 (http://austingroupbugs.net/view.php?id=751)
-
- 1/2/2014
- --------
-lib/sh/stringvec.c
- - strvec_mcreate, strvec_mresize: versions of create and resize that
- use malloc and realloc, respectively, instead of xmalloc/xrealloc
-
-braces.c
- - expand_amble,mkseq: use strvec_mcreate/strvec_mresize so we can
- catch and handle memory allocation failures instead of aborting
- with the xmalloc/xrealloc interface
-
-lib/sh/strdup.c
- - strdup replacement function for ancient systems that don't have it
-
-lib/sh/itos.c
- - mitos: new function, itos that uses strdup instead of savestring
-
-externs.h
- - strvec_mcreate/strvec_mresize: new extern declarations
- - mitos: new extern declaration
-
-configure.ac
- - bash version moved to 4.3-rc2
-
- 1/6
- ---
-doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
- - separate the description of what happens when readline reads the
- tty EOF character from the description of delete-char, leaving a
- note in the delete-char description about common binding for ^D.
- From suggestion by Parke <parke.nexus@gmail.com>
-
-lib/readline/doc/{version.texi,history.3,*.texi}
- - updated email addresses and copyright dates
-
- 1/7
- ---
-variables.c
- - delete_var: new function, just removes a variable from a hash table
- and frees it, without doing anything else
- - make_variable_value: if we are trying to assign to a nameref variable,
- return NULL if the value is null or the empty string or not a valid
- identifier
-
-variables.h
- - delete_var: new extern declaration
-
-subst.h
- - ASS_NAMEREF: new define for assignments, means assigning to a nameref
- variable
-
-builtins/declare.def
- - declare_internal: if we are creating and assigning to a nameref
- variable, make sure the value is a valid variable name (checks done
- by make_variable_value via bind_variable_value) and display an
- error message, deleting the variable we just created, if it is not.
- Fixes bug reported by Peggy Russell <prusselltechgroup@gmail.com>
-
- 1/9
- ---
-builtins/declare.def
- - declare_internal: turning on nameref attribute for an existing
- variable turns off -i/-l/-u/-c attributes (essentially the ones
- that cause evaluation at assignment time) for ksh93 compat
-
-builtins/setattr.def
- - show_name_attributes: if asked to display attributes and values for
- a nameref variable, don't follow the nameref chain to the end. More
- ksh93 compat
-
- 1/10
- ----
-trap.c
- - _run_trap_internal: use {save,restore}_parser_state instead of
- {save,restore}_token_state, like in run_pending_traps(); don't
- need to save and restore last_command_exit_value as a result
- - _run_trap_internal: call {save,restore}_pipeline like in
- run_pending_traps()
- - run_pending_traps: since we no longer run traps in a signal handler
- context, do not block and unblock the trapped signal while the
- trap is executing
- - run_pending_traps: allow recursive invocations (basically, running
- traps from a trap handler) with only a warning if the shell is
- compiled in debug mode. If a caller doesn't want this to happen,
- it should test running_trap > 0. signal_in_progress (sig) only works
- for the signals the shell handles specially
-
-bashline.c
- - bash_event_hook: make sure we clean up readline if interrupt_state
- is set, not only when SIGINT is not trapped. check_signals_and_traps
- will call check_signals, which calls QUIT, which will longjmp back
- to top_level, running the interrupt trap along the way. Fixes the
- problem of signal handlers being reset out from under readline, and
- not being set properly the next time readline is called, because
- signals_set_flag is still set to 1. XXX - might need to do this
- for other signals too?
-
- 1/11
- ----
-subst.h
- - SD_GLOB: new define for skip_to_delim; means we are scanning a
- glob pattern.
-
-subst.c
- - skip_to_delim: if flags include SD_GLOB, assume we are scanning a
- glob pattern. Currently only used to skip bracket expressions
- which may contain one of the delimiters
-
- 1/12
- ----
-subst.c
- - parameter_brace_expand: when expanding $@ as part of substring
- expansion, pattern substitution, or case modification, don't turn
- on the QUOTED_NULL flag. The code that constructs the word to be
- returned from expand_word_internal expects a different code path
- when $@ is being expanded. Fixes bug reported by Theodoros
- V. Kalamatianos <thkala@gmail.com>
-
- 1/19
- ----
-subst.c
- - list_dequote_escapes: new function; analogue of list_quote_escapes
-
-pathexp.c
- - quote_string_for_globbing: fix case where unescaped ^A is last char
- in string; need to pass it through unaltered instead of turning it
- into a bare backslash
- - quote_string_for_globbing: when quoting for regexp matching in [[,
- don't treat backslash as a quote character; quote the backslash as
- any other character. Part of investigation into reports from
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 1/25
- ----
-builtins/gen-helpfiles.c
- - write_helpfiles: add prototype
- - make sure to #undef xmalloc/xfree/xrealloc/free if USING_BASH_MALLOC
- is defined. the code does not use them, and we don't link against
- xmalloc.o. Report from Linda Walsh <bash@tlinx.org>
-
-Makefile.in
- - variables.o: add dependency on builtins/builtext.h; helps with
- parallel builds. Report from Linda Walsh <bash@tlinx.org>
-
-support/shobj-conf
- - darwin: combine the stanzas into one that will not require them to
- be updated on each Mac OS X release. Report and fix from Max Horn
- <max@quendi.de>
-
- 1/27
- ----
-support/shobj-conf
- - darwin: changed the install_name embedded into the shared library
- to contain only the major version number, not the minor one. The
- idea is that the minor versions should all be API/ABI compatible,
- and it is better to link automatically with the latest one. Idea
- from Max Horn <max@quendi.de>
-
- 1/29
- ----
-[bash-4.3-rc2 released]
-
- 1/30
- ----
-lib/readline/readline.h
- - rl_clear_history, rl_free_keymap: add extern declarations. Report
- from Hiroo Hayashi <hiroo.hayashi@computer.org>
-
-general.c
- - include trap.h for any_signals_trapped() prototype
-
-lib/sh/unicode.c
- - include <stdio.h> for sprintf prototype
-
- 1/31
- ----
-execute_cmd.c
- - execute_simple_command: only posix-mode shells should exit on an
- assignment failure in the temporary environment preceding a special
- builtin. This is what the documentation and code comments have
- always said
- - execute_simple_command: make sure redirection errors, word expansion
- errors, and assignment errors to Posix special builtins cause a
- non-interactive posix mode shell to exit. Previously the shell
- would not exit if the failed special builtin was on the LHS of ||
- or &&
-
-pathexp.c
- - quote_string_for_globbing: when quoting a regular expression
- (QGLOB_REGEXP), allow an unquoted backslash to pass through
- unaltered. Don't use it as a quote character or quote it. More
- investigation from 1/24 and report by Mike Frysinger
- <vapier@gentoo.org>
- - quote_string_for_globbing: when quoting a regular expression
- (QGLOB_REGEXP), turn CTLESC CTLESC into CTLESC without adding a
- backslash to quote it. We should not have to quote it because it is
- not a character special to EREs. More investigation from 1/24
-
-lib/glob/glob.c
- - glob_testdir: now takes a second flags argument (currently unused);
- changed prototype and callers
-
- 2/1
- ---
-lib/glob/glob.c
- - glob_testdir: if flags argument includes GX_ALLDIRS (globstar), use
- lstat so we skip symlinks when traversing the directory tree.
- Originally reported by Chris Down <chris@chrisdown.name>
-
- 2/2
- ---
-lib/readline/undo.c
- - rl_do_undo: make sure CUR is non-zero before dereferencing it to
- check cur->data against rl_undo_list. Report and fix from
- Andreas Schwab <schwab@linux-m68k.org>
-
-doc/{bash.1,bashref.texi}
- - added slight clarifying language to the description of $*,
- describing what happens when the expansion is not within double
- quotes
-
- 2/4
- ---
-test.c
- - unary_test: add code to -v case so that it interprets `bare' array
- references (foo[1]) and returns true if that index has a value
-
- 2/5
- ---
-trap.c
- - restore_default_signal: fix SIGCHLD special case for SIG_TRAPPED flag
- off but SIG_INPROGRESS mode set and handler IMPOSSIBLE_TRAP_HANDLER;
- continue with resetting handler in this case. maybe_set_sigchld_trap
- will check these things before resetting sigchld trap from
- run_sigchld_trap. Fixes (apparently long-standing?) problem reported
- by Alexandru Damian <alexandru.damian@intel.com>
-
- 2/6
- ---
-lib/sh/strtrans.c
- - ansic_quote: fixed a bug when copying a printable character that
- consumes more than one byte; byte counter was not being incremented.
- Bug report from jidanni@jidanni.org
-
- 2/7
- ---
-input.c
- - getc_with_restart: if read(2) returns -1/EINTR and interrupt_state or
- terminating_signal is set (which means QUIT; will longjmp out of this
- function), make sure the local buffer variables are zeroed out to
- avoid reading past the end of the buffer on the next call. Bug report
- from Dan Jacobson <jidanni@jidanni.org>
-
- 2/9
- ---
-bashline.c
- - command_word_completion_function: if a directory in $PATH contains
- quote characters, we need to quote them before passing the candidate
- path to rl_filename_completion_function, which performs dequoting on
- the pathname it's passed. Fixes bug reported by Ilyushkin Nikita
- <ilyushkeane@gmail.com>
-
- 2/11
- ----
-parse.y
- - xparse_dolparen: save and restore shell_eof_token around call to
- parse_string, intead of just leaving it set to ')'
- - shell_getc: when -v is set, only print the command line when
- shell_eof_token is 0, so we don't print it multiple times when
- recursively entering the parser to parse $(...) commands. Fixes
- bug reported by Greg Wooledge <wooledg@eeg.ccf.org>
-
-[changed release status to 4.3-release]
-
- 2/13
- ----
-lib/sh/strtrans.c
- - ansic_quote: handle case where mbrtowc reports that the multibyte
- sequence is incomplete or invalid. Fixes bug reported by
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 2/14
- ----
-variables.c
- - find_variable_nameref_context: fix a problem that caused the loop
- to go one context too close to the global context. In some cases,
- simple variable assignment would set a variable in the global
- context instead of a local context. Bug report from
- Geir Hauge <geir.hauge@gmail.com>
-
- 2/26
- ----
-[bash-4.3 released]
-
- 2/27
- ----
-aclocal.m4
- - broken wcwidth check: fix typo reported by David Michael
- <fedora.dm0@gmail.com>
-
- 2/28
- ----
-support/bashbug.sh
- - add ${BUGADDR} to error message printed if sending mail fails
-
-trap.c
- - _run_trap_internal: don't call {save,restore}_pipeline if running
- DEBUG trap; run_debug_trap calls them itself. Fixes bug reported
- by Moe Tunes <moetunes42@gmail.com>
-
-test.c
- - unary_test: fix 'R' case by using find_variable_noref instead of
- find_variable
- - test_unop: add back missing 'R' case. Fixes bug reported by
- NBaH <nbah@sfr.fr>
-
- 3/2
- ---
-jobs.c
- - end_job_control: if job control is active, we changed the terminal's
- process group, so make sure we restore it. Fixes bug reported by
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 3/7
- ---
-pcomplete.c
- - pcomp_curtxt: new variable, holds the original text to be completed
- as passed to the programmable completion code
- - pcomp_filename_completion_function: if we are running compgen
- (presumably in a shell function completion) and performing readline
- completion, check the word being completed. If it's not empty, but
- the original word passed to the programmable completion code is an
- empty string (""), call a dequoting function if one is available.
- This compensates for an assumption in bash-completion. Reported by
- Albert Shih <Albert.Shih@obspm.fr>
-
-lib/readline/readline.c
- - _rl_dispatch_subseq: when deciding whether or not to set vi mode's
- idea of the last command, use whether or not the dispatching keymap
- is vi_movement_keymap instead of the key sequence length. The `c',
- `d', and `y' commands all take motion commands as `arguments' and
- will produce key sequences longer than 1 character. The arrow keys
- will end up dispatching out of a different keymap, so the test will
- prevent arrow keys from setting the last command (the problem in
- bash-4.2). Bug report from Daan van Rossum <daan@flash.uchicago.edu>
-
-lib/readline/vi_mode.c
- - _rl_vi_motion_command: convenience function to test whether a key is
- a vi-mode motion command
-
-lib/readline/rlprivate.h
- - _rl_vi_motion_command: extern declaration
-
-parse.y
- - parse_matched_pair: we should not skip processing single quotes in
- posix mode if dolbrace_state == DOLBRACE_QUOTE2 (pattern
- substitution). Fixes bug reported by David Sines
- <dave.gma@googlemail.com>
-
- 3/10
- ----
-lib/readline/readline.c
- - _rl_dispatch_callback: treat a return value of -1 as the end of
- a command dispatch sequence if the current context doesn't
- indicate that we're reading a multi-key sequence
- ((cxt->flags & KSEQ_SUBSEQ) == 0). Turn off the multikey flag
- and free the context chain in this case. Fixes one bug reported
- by Felix Yan <felixonmars@gmail.com> to bug-readline list
- - _rl_dispatch_callback: treat a return value of > 0 the same as 0
- and return from the function, since only values < 0 cause us to
- simulate recursion. Rest of fix for bug tracked down by
- Anatol Pomozov <anatol.pomozov@gmail.com>
-
- 3/11
- ----
-
-execute_cmd.c
- - execute_in_subshell: if a longjmp occurs, set result to
- EXECUTION_FAILURE only if last_command_exit_value == EXECUTION_SUCCESS;
- use value of last_command_exit_value otherwise. Fixes cosmetic
- issue reported by Dennis Lambe Jr. <malsyned@malsyned.net>
-
-doc/bash.1
- - shell-kill-word and shell-backward-kill-word should be documented
- as unbound by default. Report from Oliver Hartley
- <ohartley@talktalk.net>
-
-trap.c
- - run_pending_traps: save value of $? before running trap commands in
- trap_saved_exit_value, like run_exit_trap
- - _run_trap_internal: save value of $? before running trap commands in
- trap_saved_exit_value, like run_exit_trap
-
-builtins/common.c
- - get_exitstat: when running `return' in a trap action, and it is not
- supplied an argument, use the saved exit status in
- trap_saved_exit_value. Fixes Posix problem reported by
- Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 3/13
- ----
-lib/sh/shquote.c
- - sh_contains_quotes: new function, returns true if a given string
- contains any of the shell quote characters (single quote, double
- quote, or backslash)
-
-externs.h
- - sh_contains_quotes: new extern declaration
-
-pcomplete.c
- - pcomp_filename_completion_function: more changes for the benefit of
- bash-completion: if the argument is not the same as the original
- argument passed to the programmable completion code (pcomp_curtxt),
- and we are being run by compgen as part of a completion, dequote the
- argument as bash-completion expects. Fix for the complete-word-
- with-quoted-special-chars problem with bash-completion
-
- 3/17
- ----
-execute_cmd.c
- - execute_intern_function: when in posix mode, make defining a function
- with the same name as a special builtin a fatal error only when the
- shell is not interactive. Interactive shells display an error
- message and go on. From a discussion with Doug McIlroy
- <doug@cs.dartmouth.edu>
-
- 3/18
- ----
-arrayfunc.c
- - assign_compound_array_list: when using expand_assignment_string_to_string
- to expand the value in a ( [x]=y ) compound assignment, make sure
- that we convert 0x0 to "" when expanding [x]= so it doesn't appear as
- if the index is unset. Fixes bug reported by Geir Hauge
- <geir.hauge@gmail.com>
-
-builtins/common.c
- - get_exitstat: update fix of 3/11 to allow the DEBUG trap to use the
- current value of $? instead of the value it had before the trap
- action was run. This is one reason the DEBUG trap exists, and
- extended debug mode uses it. Might want to do this only in Posix
- mode
-
-doc/{bash.1,bashref.texi}
- - return: add language cribbed from Posix saying what happens when
- return is run without an argument from a trap, including the DEBUG
- trap exception
-
- 3/19
- ----
-lib/glob/gmisc.c
- - extglob_pattern_p: make sure ?(patlist) is flagged as an extglob
- pattern
-
-lib/glob/glob.c
- - extglob_skipname: rewrite to handle patterns that begin but do not
- end with an extglob pattern; change test for easy case and loop
- through patterns accordingly. Fixes problem with matching filenames
- with a leading dot reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
- - wextglob_skipname: make analogous changes
-
- 3/20
- ----
-Makefile.in
- - pass -DDEBUG down to builds in readline and history directories
-
-lib/readline/util.c
- - _rl_trace and related functions are now only compiled in if DEBUG
- is defined
-
-lib/readline/Makefile.in
- - substitute @DEBUG@ and pass -DDEBUG, if necessary, to compilation
- in LOCAL_CFLAGS
-
- 3/21
- ----
-parse.y
- - shell_getc: when checking whether or not to reallocate
- shell_input_line to add trailing newline, don't try to subtract from
- shell_input_line_size. size_t is unsigned, so if its value is less
- than 3 (like, say, 2), size-3 is a very large number and the string
- will not be reallocated. Use len+3 > size instead of len > size-3.
- Fixes bug reported in
- https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1295467
-
- 3/27
- ----
-lib/readline/display.c
- - _rl_clean_up_for_exit: don't bother to call _rl_move_vert to whatever
- readline thinks the last displayed line is if it's 0. Two reasons: a
- minor optimization, and it protects against unwanted moving if this
- function is called twice, as it is when ^C is pressed. Fixes bug
- reported by Egmont Koblinger <egmont@gmail.com>
-
- 3/28
- ----
-bashline.c
- - invalid_completion: new function, used to identify attempts to
- complete words that are syntax errors
- - attempt_shell_completion: if invalid_completion returns true for a
- word in a command position, punt on all completions. Fixes cosmetic
- issue reported by Uwe Storbeck <uwe@ibr.ch>
- - attempt_shell_completion: add clause so that in_command_position
- remains set to 1 for an empty word following a command separator like
- (, &, or |
-
-lib/readline/kill.c
- - rl_yank, rl_yank_nth_arg_internal: don't return -1 from bindable
- functions, return 1 instead
-
-lib/readline/text.c
- - rl_rubout, _rl_rubout_char, rl_delete, rl_change_case,
- rl_transpose_chars, rl_transpose_words, _rl_set_mark_at_pos,
- rl_exchange_point_and_mark, _rl_insert_next, _rl_char_search,
- _rl_char_search_internal:
- don't return -1 from bindable functions, return 1 instead
-
-lib/readline/vi_mode.c
- - rl_vi_end_word, rl_vi_rubout, rl_vi_delete, rl_vi_char_search,
- rl_vi_match, _rl_vi_set_mark, _rl_vi_goto_mark:
- don't return -1 from bindable functions, return 1 instead
-
-lib/readline/macro.c
- - rl_start_kbd_macro, rl_end_kbd_macro:
- don't return -1 from bindable functions, return 1 instead
-
-builtins/setattr.def
- - set_var_attribute: honor setting of no_invisible_vars when setting
- att_invisible on a variable
- - include "../flags.h" for no_invisible_vars
-
-builtins/declare.def
- - declare_internal: honor setting of no_invisible_vars when setting
- att_invisible on a variable
- - include "../flags.h" for no_invisible_vars
-
-Makefile.in,builtins/Makefile.in
- - make sure declare.o and setattr.o depend on flags.h
-
-execute_cmd.c
- - decpoint: new function, returns locale's decimal point or `.' default
- - mkfmt: use decpoint() to get decimal point instead of unconditionally
- using `.'. Fixes bug reported by Andrey Tataranovich
- <tataranovich@gmail.com> in debian bug 741669
-
- 4/10
- ----
-lib/readline/rltypedefs.h
- - add back old Function/VFunction/etc typedefs, since other packages
- (python, samba) use them. Mark as deprecated using gcc and clang
- attributes. Report and fix from Max Horn <max@quendi.de>
-
- 4/14
- ----
-jobs.c
- - run_sigchld_trap: unwind-protect value of this_shell_builtin, since
- it matters in some cases whether or not we are running `wait' or
- `eval'. Fixes bug reported by Eduardo A. Bustamante López
- <dualbus@gmail.com>
-
- 4/18
- ----
-shell.h
- - sh_parser_state_t: add `need_here_doc' flags member, since
- xparse_dolparen (via parse_command) sets it to 0
-
-parse.y
- - gather_here_documents: make sure need_here_doc is > 0, since we
- don't want to just decrement it forever if it ends up < 0. Partial
- fix for bug reported by Jared Yanovich <slovichon@gmail.com>
- - {save,restore}_parser_state: save and restore need_here_doc flag.
- Rest of fix for bug reported by Jared Yanovich <slovichon@gmail.com>
-
- 4/19
- ----
-subst.c
- - cond_expand_word: since we are not supposed to be performing word
- splitting here, set expand_no_split_dollar_star to 1 in addition to
- setting W_NOSPLIT2
- - expand_word_internal: if we have a case where we have an unquoted
- $@ but we are in a case where we don't want to split (W_NOSPLIT2),
- make sure we return a list consisting of a single word with the
- arguments separated by spaces and don't do word splitting. Fixes
- bug reported by Greg Wooledge <wooledg@eeg.ccf.org> from an IRC
- discussion
-
-builtins/hash.def
- - print_portable_hash_info: single-quote pathnames and hashed filenames
- that contain shell metacharacters. Fixes bug reported by
- <g1pi@libero.it> in debian bash bug #739853
-
- 4/20
- ----
-lib/readline/display.c
- - When using horizontal scrolling, the redisplay code erases too much
- of the line containing successful results, so make sure we only
- erase to the end of the line after making sure we move the cursor
- to the end. Fixes bug reported by <Trond.Endrestol@ximalas.info>
-
- 4/23
- ----
-{bashhist,bashline}.c
-builtins{bind,help,type}.def
-lib/glob/glob.c, lib/intl/{loadmsgcat,localealias}.c,lib/sh/mktime.c
- - fixes to memory leaks uncovered by coverity scan
-
- 4/24
- ----
-{bashhist,subst,redir,assoc,jobs,array,trap}.c
-lib/intl/l10flist.c
-builtins/complete.def
- - fixes to memory leaks and other resource usage problems uncovered by
- coverity scan
-
-redir.c
- - do_redirection_internal: if dup2 fails (presumably because of a
- resource limit), close the file descriptor we opened before returning
- error
-
- 4/25
- ----
-config-top.h
- - DEFAULT_BASHRC: new define with the name of the default shell
- startup file
-
-bashline.c
- - bash_directory_completion_matches: don't dequote the directory name.
- If rl_completion_found_quote is non-zero, readline will dequote the
- filename itself. Fixes bug reported by Clark Wang
- <dearvoid@gmail.com>
-
- 4/27
- ----
-subst.c
- - parameter_brace_expand_rhs: if parameter_brace_find_indir returns
- NULL or "", or if it returns something that is not a valid identifier,
- report an error and return &expand_wdesc_error so the error can
- propagate up. Fixes bug reported by Andre Holzhey
- <andre.holzhey@gmx.de>
-
- 4/29
- ----
-subst.c
- - parameter_brace_substring: don't short-circuit right away if the
- value is NULL but we are looking at the positional parameters. Part
- of fix for bug reported by Pierre Gaston <pierre.gaston@gmail.com>
- - pos_params: if there are no positional parameters, only short-circuit
- if we are looking for $1 and above. Rest of fix for bug reported
- by Pierre Gaston <pierre.gaston@gmail.com>
-
-subst.h
- - SD_NOPROCSUB: new flag for skip_to_delim, means to not allow any
- process subsitutions (should not have overloaded SD_NOSKIPCMD)
-
-subst.c
- - skip_to_delim: honor SD_NOPROCSUB flag
-
-make_cmd.c
- - make_arith_for_expr: set W_NOPROCSUB flag in the created word
- - make_arith_for_command: set SD_NOPROCSUB in the flags argument to
- skip_to_delim so we don't treat <( or >( as a process substitution
- (we won't evaluate them in eval_arith_for_expr anyway). Fixes
- bug reported by Pierre Gaston <pierre.gaston@gmail.com>
-
- 5/1
- ---
-lib/glob/gmisc.c
- - glob_dirscan: new function, takes a pattern and a directory separator
- argument and advances the pattern to the last occurrence of the
- separator. Like strrchr, but understands extended glob patterns and
- uses glob_patscan to skip over them
-
-lib/glob/glob.c
- - extglob_skipname: if the extended globbing pattern is invalid, don't
- skip the name
- - glob_filename: if there is a slash in the pattern to be matched, and
- extglob is enabled, use glob_dirscan to find the real last occurrence
- of `/' to avoid being confused by slashes in extglob patterns. Fix
- for bug reported by Pierre Gaston <pierre.gaston@gmail.com>
-
- 5/6
- ---
-variables.c
- - make_local_variable: only set the att_invisible attribute if
- no_invisible_vars isn't set
- - find_variable_for_assignment: new function, intended to be called by
- code that eventually wants to assign a value to the variable; will not
- skip invisible variables; currently identical to find_variable
- - find_variable_no_invisible: new function, finds the first visible
- instance of variable with a given name in the variable context chain;
- eventually will be used to replace find_variable; separate right now
- for testing
-
-variables.h
- - find_variable_for_assignment: extern declaration
- - find_variable_no_invisible: extern declaration
-
- 5/7
- ---
-variables.c
- - make_local_variable: don't clear `invisible' attribute if we are
- returning an existing local variable at the right context. Let the
- upper layers do that. Fixes bug reported by Dan Douglas
- <ormaaj@gmail.com>
-
- 5/8
- ---
-lib/readline/input.c
- - rl_getc: call RL_CHECK_SIGNALS if a read(2) is interrupted (-1/EINTR)
- by SIGALRM or SIGVTALRM (placeholder for non-keyboard-generated
- signals of interest)
-
-builtins/read.def
- - edit_line: call bashline_set_event_hook and
- bashline_reset_event_hook around call to readline(), so the right
- signal handling happens
- - read_builtin: make sure we add an unwind_protect call to
- bashline_reset_event_hook. These changes fix bug reported in
- https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1317476
-
-bashline.c
- - bash_event_hook: make sure we clean up the readline state by calling
- rl_cleanup_after_signal if sigalrm_seen is non-zero. The read builtin
- sets this when it times out
-
- 5/12
- ----
-doc/{bash.1,bashref.texi}
- - clarify language to make it clear that changing attributes of a
- nameref variable (e.g., export), actually changes the attributes of
- the referenced variable. Fixes omission noted by Jeff Haemer
- <jeffrey.haemer@gmail.com>
-
-arrayfunc.c
- - bind_array_var_internal: make sure ENTRY no longer has invisible
- attribute before returning. Fixes bug reported by Geir Hauge
- <geir.hauge@gmail.com>
-
- 5/22
- ----
-execute_cmd.c
- - shell_execve: if execve fails and we return 127 or 126, make sure to
- set last_command_exit_value if a call to file_error or report_error
- causes the shell to exit. This ensures that the shell exits with
- the right value.
-
- 6/6
- ---
-shell.c
- - drop_priv_mode: print an error message on setuid() failure, optionally
- exit if errno == EAGAIN, as it can be on Linux when RLIMIT_NPROC for
- the target user is exceeded.
-
-config-top.h
- - EXIT_ON_SETUID_FAILURE: new settable define, will cause the shell to
- exit if setuid fails with errno == EAGAIN
-
- 6/10
- ----
-parse.y
- - time_command_acceptable: fix so time is accepted everywhere the
- grammar is looking for a `compound_list'. Fixes bug reported by
- Dale Worley <worley@alum.mit.edu>
-
- 6/12
- ----
-subst.c
- - clear_fifo_list: new function, clears FDs associated with open pipes
- in current FIFO list without closing the file descriptors. Can
- possibly be used when shell_execve fails and the shell jumps back
- to top_level and we don't want the shell to close the open FIFOs
- each time through the read-execute loop. Bug reported by Harald
- Koenig <koenig@tat.physik.uni-tuebingen.de>
-
-
- 6/16
- ----
-builtins/shopt.def
- - compat42: make sure the `compat42' option sets the correct variable
- for compatibility level. Fixes bug reported by Ondrej Oprala
- <ooprala@redhat.com>
-
-support/bashbug.sh
- - fix typo when echoing $USAGE. Report from Shantanu Kulkarni
- <djbware@shantanukulkarni.org>
-
-execute_cmd.c
- - shell_execve: before longjmp back to subshell_top_level, clear out the
- FIFO fd list by calling clear_fifo_list so the FDs (which we inherited
- from our parent) aren't closed every time through the read-eval loop.
- Fix for bug reported by Harald Koenig <koenig@tat.physik.uni-tuebingen.de>
-
- 6/18
- ----
-subst.c
- - extract_process_subst: add additional argument: xflags, allow callers to
- pass flags like extract_command_subst
- - extract_process_subst: call xparse_dolparen like command substitution
- to avoid problems when parsing commands constructs with embedded open
- parens. Fixes bug reported by Tim Friske <me@timfriske.com>
-
-subst.h
- - extract_process_subst: modified prototype for extern declaration
-
- 6/19
- ----
-execute_cmd.c
- - execute_pipeline: if running with lastpipe enabled, make sure that we
- check whether or not the job id is valid using INVALID_JOB before
- calling job_exit_status. the jobs list can get frozen and unfrozen in
- the presence of nested pipelines and loops and wait_for can clear a
- job table entry. Fixes bug reported by <scorp.dev.null@gmail.com>
-
-jobs.c
- - freeze_jobs_list: now returns old value of jobs_list_frozen; unused at
- current time
-
-jobs.h
- - freeze_jobs_list: change return value
-
- 6/20
- ----
-lib/glob/smatch.c
- - MEMCHR: single-byte and wide character defines (memchr/wmemchr)
-
-lib/glob/sm_loop.c
- - GMATCH: when the wildcards are the last element of the pattern, make
- sure they do not match a string containing a `/' if FNM_PATHNAME is
- set in FLAGS
- - GMATCH: when recursively calling GMATCH after we see a `*', don't
- try to consume the rest of the pattern with `*' if FNM_PATHNAME is
- set in FLAGS, just consume up to the next slash and then see whether
- or not the rest of the pattern matches. Fixes bug reported by Ian
- Kelling <ian@iankelling.org>
- - GMATCH: when processing `*' in the pattern, after skipping consecutive
- wildcards, if we hit a literal `/' in the pattern and we're looking
- for a pathname, skip characters in the string until we find a `/'
- (no slash means the match fails), and try to match the rest of the
- pattern against the portion of the string after the next `/'. Picked
- up from gnulib/glibc
-
-pathexp.c
- - split_ignorespec: since split_ignorespec gets globbing patterns,
- make sure we call skip_to_delim with the SD_GLOB flag so delimiters
- that occur within bracket expressions don't delimit the pattern.
- Fixes problem with [[:digit:]] in GLOBIGNORE reported by Ian Kelling
- <ian@iankelling.org>
-
-unwind_prot.c
- - unwind_protect_tag_on_stack: new function, returns 1 if unwind-protect
- frame corresponding to `tag' argument is on unwind-protect stack
-
-unwind_prot.h
- - unwind_protect_tag_on_stack: extern declaration
-
- 6/30
- ----
-lib/readline/misc.c
- - _rl_revert_all_lines: set entry->data to 0 after assigning it to
- rl_undo_list to avoid pointer aliasing problems that would result
- in entry->line being freed by an undo. The subsequent free would
- be a double free. Report and fix from Jared Yanovich
- <slovichon@gmail.com>
-
-subst.c
- - command_substitute: other shells do not appear to inherit the -v
- option when reading and executing command substitutions. Reported
- by Ondrej Oprala <ooprala@redhat.com>
-
- 7/1
- ---
-config-top.h
- - CHECKHASH_DEFAULT: new define that supplies the default value for
- check_hashed_filenames (`checkhash' shopt option); still 0 by default
-
-findcmd.c
- - check_hashed_filenames: initialize using CHECKHASH_DEFAULT
-
-lib/readline/histexpand.c
- - history_expand: double quotes can inhibit recognition of the history
- comment character if history_quotes_inhibit_expansion is non-zero
-
-lib/readline/doc/{history.3,hstech.texi}
- - history_quotes_inhibit_expansion: expand definition to note that it
- inhibits scanning for the history comment character as well; correct
- typo to make it clear that it only works on double-quoted strings
-
-lib/sh/zgetline.c
- - add new fourth argument: DELIM, allows delimiter to be something
- other than newline (if DELIM != '\n', UNBUFFERED_READ should be
- non-zero)
- - UNBUFFERED_READ is now fifth argument
- - check character against DELIM rather than strictly newline
-
-externs.h
- - zgetline: change function prototype for extern declaration
-
-builtins/mapfile.def
- - mapfile: change calling sequence for zgetline calls
- - mapfile_builtin: new -d option: DELIM, like in read builtin
- - mapfile_builtin: pass `delim' to mapfile() as new argument; default
- to '\n' unless -d option supplied
- - mapfile: take new DELIM argument, pass to zgetline
- - mapfile: if DELIM != '\n', set unbuffered_read to 1
-
-doc/{bash.1,bashref.texi}
- - mapfile: document new `-d DELIM' option
-
- 7/5
- ---
-lib/readline/histfile.c
- - history_truncate_file: if there is an error writing the truncated
- history list back to the history file, use the same strategy as
- history_do_write: create a backup file, rename the history file to
- the backup file, and restore the original history file from the
- backup file name if the write or the close fails. Suggestion from
- Chen Gang <gang.chen.5i5j@gmail.com> to bug-readline
-
-execute_cmd.c
- - evalnest, evalnest_max: new variables establishing maximum number of
- recursive `eval' calls; current max is 4096
- - execute_builtin: unwind-protect value of evalnest around calls to
- eval builtin. Suggested by Oliver Morais <oliver.morais@gmail.com>
- - {initialize_subshell,execute_subshell_builtin_or_function}: reset
- evalnest to 0 in a subshell
-
-builtins/setattr.def
- - show_name_attributes: show a variable's attributes even if it's
- invisible (don't show any value since it has none). This means that
- declare -p var will display VAR's attributes even when var marked
- as invisible. Feature request from Peggy Russell
- <prusselltechgroup@gmail.com>
- - show_var_attributes: don't print assignment if array or assoc
- attribute is set but variable marked as invisible
-
-tests/array.right
- - special note: changed all declare -a output tests because the shell
- will no longer print out values for invisible array variables. This
- is a change, but one for correctness:
-
- declare -a foo='()'
- and
- declare -a foo
- are not equivalent
-
- 7/22
- ----
-subst.c
- - parameter_brace_expand: after calling parameter_brace_expand_indir,
- turn off the W_ARRAYIND flag in the word it returns, because there
- is no way for it to return the index that should be used, and the
- rest of the function assumes that IND is valid if W_ARRAYIND is set.
- Fixes bug reported by Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
-
- 8/2
- ---
-parse.y
- - read_token_word: if we read a character that will end a command
- substitution, don't skip over quoted newlines when we read an
- additional character to figure out whether it's a two-character
- token. This lets the higher layers deal with quoted newlines after
- the command substitution. Fixes bug reported by EmanueL Czirai
- <amanual@riseup.net>
-
- 8/11
- ----
-execute_cmd.c
- - execute_pipeline: check whether lastpipe_jid corresponds to a valid
- job before calling append_process, for the same reason as fix from
- 6/19. Fixes bug reported by <lolilolicon@gmail.com>
-
- 8/12
- ----
-lib/sh/unicode.c
- - stub_charset: use strncpy instead of strcpy because we are copying
- into a local fixed-length buffer. Fixes vulnerability reported by
- <romerox.adrian@gmail.com>
-
-execute_cmd.c
- - execute_pipeline: if we don't call append_process, call
- wait_for_single_pid to get the status of `lastpid', since that will
- check the status of already-reaped processes. Fixes spurious error
- message about non-existent process from fix of 8/11
-
- 8/15
- ----
-jobs.c
- - running_in_background: new variable, keeps track of whether or not we
- are running in the background (not perfect yet)
- - initialize_job_control: even if we are not turning on job control,
- get the terminal pgrp so we can use it later
- - {set_job_control,initialize_job_control}: set running_in_background
- to 1 if terminal pgrp != shell pgrp
- - {stop_pipeline,make_child,wait_for}: if we are running in the
- background, don't mess with the terminal's process group; assume that
- the parent shell will do that. Fixes bug reprted by Greg Wooledge
- <wooledg@eeg.ccf.org>
-
-shell.c
- - shell_reinitialize: reset running_in_background back to 0
-
- 8/24
- ----
-execute_cmd.c
- - {execute_connection,execute_command_internal}: make sure that
- asynchronous commands always set $? to 0 and are not affected by the
- command's exit status being inverted using `!'. Fixes bug reported
- by Vincent Lefevre <vincent@vinc17.net>
-
-lib/readline/display.c
- - rl_message: call vsnprintf with full msg_bufsiz, since it counts
- one fewer than the buffer length passed as an argument. Bug report
- and fix from Dylan Cali <calid1984@gmail.com>
-
- 8/26
- ----
-builtins/evalstring.c
- - evalstring: if CURRENT_TOKEN == yacc_EOF, reset it to newline. This
- is instead of calling reset_parser(); that might still be needed.
- Fixes bug with eval and a subsequent statement ending with EOF
- reported by <jim.avera@gmail.org>
-
-pcomplete.c
- - filter_stringlist: when extglob is on, a leading ! in the filter
- pattern should be left alone when it introduces a !(pat) pattern;
- otherwise it messes up the pattern. Fixes bug reported by David
- Korn <dgkorn@gmail.com>
-
- 8/27
- ----
-doc/{bash.1,bashref.texi}
- - clarify the behavior of bash when given the -c option, since $0 is
- technically not a positional parameter. Bug reported by Stephane
- Chazelas <stephane.chazelas@gmail.com>
-
- 8/28
- ----
-lib/readline/history.c
- - add_history: use history_max_entries (if history is stifled) or
- DEFAULT_HISTORY_INITIAL_SIZE if not (new define, defaults to 502)
- to size the initial allocation of the history array. Assumption
- is that this will reduce the number of allocations
-
- 8/29
- ----
-execute_command.c:
- - sourcenest, sourcenest_max: new variables used to track level of
- sourced files and (maybe) one day catch infinite source recursion
- - execute_builtin: if current source level exceeds sourcenest_max,
- trigger an error and jump back to the top level
- - {initialize_subshell,execute_subshell_builtin_or_function}: reset
- sourcenest to 0 in a subshell
-
- 9/2
- ---
-variables.c
- - bind_variable: if a nameref expands to an array reference, make
- sure that assign_array_element gets called (maybe even
- recursively) instead of bind_variable_internal, so invalid variable
- names (like arr[0]) don't get created. Fixes bug reported by
- <lolilolicon@gmail.com>
-
- 9/3
- ---
-execute_cmd.c
- - evalnest_max,sourcenest_max: initialize from EVALNEST_MAX and
- SOURCENEST_MAX, respectively. Feature suggested by
- <bogun.dmitriy@gmail.com>
-
-config-top.h
- - define EVALNEST_MAX and SOURCENEST_MAX to 0
-
- 9/6
- ---
-bashline.c
- - find_cmd_start: fix to (crudely) deal with >| token; even though
- skip_to_delim finds `|' as a delimiter, we call it again and use
- what the second call finds. Fixes bug reported by Dan Jacobson
- <jidanni@jidanni.org>
-
-findcmd.c
- - find_in_path_element: if in posix mode, do not expand a literal
- tilde in a $PATH element
-
-doc/bashref.texi
- - add change to tilde expansion in $PATH elements to posix mode
- description
-
-builtins/common.h
- - ISHELP: new define for builtins that do their own option parsing
- and don't use internal_getopt(); checks whether argument is --help
- - CHECK_HELPOPT: convenience define to help builtins that do their
- own option parsing to check for --help with one line of code
- - CASE_HELPOPT: convenience define to help builtins that use
- internal_getopt() check for --help with one line of code
-
-builtins/help.def
- - builtin_help: new function, prints out --help output for current
- builtin
-
-builtins/{kill,let,pushd}.def
- - add CHECK_HELPOPT to builtins that use ISOPTION; call builtin_help
- and return EX_USAGE (kill/let/pushd/popd/dirs)
-
-builtins/{caller,fg_bg}.def
- - use CHECK_HELPOPT to recognize --help, since these builtins perform
- checks that can cause them to return before calling no_options
- (caller/fg/bg)
-
-builtins/{exit,return}.def
- - use CHECK_HELPOPT to recognize --help before calling get_exitstat()
- (return/exit/logout)
-
-builtins/{break,shift}.def
- - use CHECK_HELPOPT to recognize --help before any other checks
- (break/continue/shift)
-
-builtins/bashgetopt.h
- - GETOPT_EOF: convenience define
- - GETOPT_HELP: new define, to indicate internal_getopt saw --help
-
-builtins/bashgetopt.c
- - internal_getopt: return GETOPT_HELP for --help
-
-builtins/common.c
- - no_options: recognize --help, call builtin_help and return 2
- (builtin/eval/source/./times)
-
-builtins/command.def
- - use CASE_HELPOPT() to handle --help after calling internal_getopt()
- (command)
-
-builtins/{colon,echo,test}.def
- - do not recognize --help (:/true/false/echo/test)
-
- 9/8
- ---
-sig.c
- - termsig_sighandler: if readline is active now, set the bashline event
- hook. Old code just set it for interactive shells. Part of fix for
- bug reported by <mickael9@gmail.com>
-
-bashline.c
- - bash_event_hook: call rl_cleanup_after_signal if terminating_signal
- is non-zero, since check_signals_and_traps() will cause the shell to
- exit if it is and we want to clean up the readline state first. Rest
- of fix for bug reported by <mickael9@gmail.com>
-
- 9/9
- ---
-jobs.c
- - waitchld: when running the wait builtin in posix mode, with a trap set
- on SIGCHLD, use queue_sigchld_trap instead of trap_handler (SIGCHLD),
- otherwise you will lose SIGCHLDs when children_exited > 1. Fixes bug
- reported by <crispusfairbairn@gmail.com>
-
-builtins/read.def
- - read_builtin: if we are changing the tty settings, call
- initialize_terminating_signals so we have a chance to catch all
- terminating signals and potentially clean up the terminal before
- exiting
- - read_builtin: tty_modified: new variable, set to 1 if we change the
- terminal attributes and have to call ttyrestore() to restore them
- - if one of the `reads' returns -1/EINTR due to a terminating signal,
- and we have modified the terminal, call ttyrestore before calling
- CHECK_TERMSIG
- - ttyrestore: set tty_modified to 0 when called
-
- 9/10
- ----
-builtins/read.def
- - termsave: now global to file so other functions can use it
- - read_tty_cleanup: if tty_modified is non-zero, call ttycleanup to restore
- old terminal settings and turn off tty_modified
-
-sig.c
- - termsig_handler: call read_tty_cleanup if currently executing read
- builtin; it does the right thing. Final piece of fix for bug reported
- by Jan Rome <jan.rome@gmail.com>
-
- 9/11
- ----
-general.c
- - printable_filename: general function to return a printable representation
- of a string (presumed to be a filename)
-
-general.h
- - extern declaration for printable_filename
-
-execute_cmd.c
- - execute_disk_command: use printable_filename
-
-builtins/{bind,cd,enable,hash,source}.def
- - use printable_filename as appropriate when printing error messages.
- From a suggestion by Vincent Lefevre <vincent@vinc17.net>
-
-builtins/bind.def
- - use CASE_HELPOPT() to handle --help after calling internal_getopt()
- (bind)
-
- 9/12
- ----
-builtins/common.h
- - SEVAL_FUNCDEF: new flag for parse_and_execute; it means that we only
- accept a single function definition command, as when we are importing
- functions from the environment
- - SEVAL_ONECMD: new flag for parse_and_execute; for future use
-
-builtins/evalstring.c
- - parse_and_execute: if the SEVAL_FUNCDEF flag is set, disallow anything
- but a function definition command
-
-variables.c
- - initialize_shell_variables: don't allow functions with invalid names
- to be imported from the environment, even though we still allow them
- to be defined
- - initialize_shell_variables: when importing function definitions from
- the environment, call parse_and_execute with the SEVAL_FUNCDEF flag
- to force the command to be just a function definition
-
-subst.c
- - param_expand: when expanding a $name variable expansion, make sure that
- the variable is visible and set before following the nameref chain
- - param_expand: when expanding a $name variable expansion and following the
- nameref chain, make sure the resulting variable is visible and set
- before using it
-
- 9/13
- ----
-variables.c
- - initialize_shell_variables: when importing function definitions from
- environment, use SEVAL_ONECMD flag for parse_and_execute. Part of
- CVE-2014-6271
-
-builtins/evalstring.c
- - parse_and_execute: if SEVAL_ONECMD flag set, return immediately after
- calling execute_command_internal. Final piece for fix for bug
- reported by Stephane Chazelas <stephane.chazelas@gmail.com>. Part of
- CVE-2014-6271
-
- 9/24
- ----
-parse.y
- - reset_parser: reset eol_ungetc_lookahead to 0 here, since we don't want
- shell_getc returning it on the next call. Fixes problem reported by
- Tavis Ormandy <taviso@cmpxchg8b.com> and Michal Zalewski
- <lcamtuf@coredump.cx>. Potentially part of CVE-2014-6271; fix for
- CVE-2014-7169
-
- 9/25
- ----
-parse.y
- - push_heredoc: new function, pushes a here-doc redirection onto
- redir_stack handling overflow of redir_stack. Exits on overflow.
- Original fix from Florian Weimer <fweimer@redhat.com>. Fix for
- CVE-2014-7186
- - change straight assignments to redir_stack to call push_redir
- - add one to size of word_lineno stack to avoid off-by-one error
- below in read_token_word. Overflow just results in line numbers
- being wrong. Fix for CVE-2014-7187
-
- 9/27
- ----
-{execute_cmd,trap}.c
- - changes to make minimal-config builds work again, mostly missing
- #ifdefs for optional features
-
-builtins/common.c
- - builtin_help: dummy version to be included if HELP_BUILTIN not
- defined, for minimal-config builds
-
-variables.c
- - initialize_shell_variables: incorporated patches from Florian
- Weimer <fweimer@redhat.com> to change the strings bash looks
- for when importing shell functions from the environment. It
- adds a prefix (BASH_FUNC_) and a suffix (%%) to the name to
- mark it as having been created by bash as an exported function.
- Fix for remote attacks part of CVE-2014-6271 and CVE-2014-7169
- - mk_env_string: takes new argument, indicating whether we are
- constructing a function
- - mk_env_string: encodes function names as described above, so
- initialize_shell_variables can find them
-
- 9/28
- ----
-copy_cmd.c
- - copy_redirects: before calling savestring on here_doc_eof, make
- sure it's not NULL (it could have been the result of a here
- document delimited by EOF or EOS). Fixes bug reported by
- Michal Zalewski <lcamtuf@coredump.cx>. Fix for CVE-2014-6277
-
-make_cmd.c
- - make_redirection: initialize here_doc_eof member to NULL. Rest of
- fix for CVE-2014-6277
-
- 9/29
- ----
-parse.y
- - current_input_line_state: return a sh_input_line_state_t containing
- the current shell_input_line and its index and size variables
-
-shell.h
- - current_input_line_state: extern declaration
-
-builtins/evalstring.c
- - parse_and_execute: call reset_parser() before returning if
- SEVAL_ONECMD set. Fixes bug reported by Michal Zalewski
- <lcamtuf@coredump.cx> and designated CVE-2014-6278
- - parse_and_execute: if we parse a function definition when
- SEVAL_FUNCDEF is set, but don't consume the entire passed string,
- throw an error, reset the parser, and return. Part of fix for
- CVE-2014-6278
- - parse_and_execute: if parsing the shell function definition when
- SEVAL_FUNCDEF is set transforms the function name (e.g., if it
- begins with a newline or begins or ends with whitespace), throw
- an error, reset the parser, and return. Fixes bug reported by
- Eric Kobrin <ekobrin@akamai.com>
-
- 10/2
- ----
-jobs.c
- - bgp_prune: don't do anything if bgpids.npid == 0 or bgpids.list == NULL.
- This can happen if something gets run before the job control framework
- is initialized. Bug report from <mancha1@zoho.com>
-
- 10/3
- ----
-parse.y
- - xparse_dolparen: don't set token_to_read to newline after calling
- parse_string() and cleaning up when the shell is not interactive. This
- makes the parser thing it's ok to read new commands even if it's not in
- a state where that should be possible. Underlying fix for bug reported
- by Michal Zalewski <lcamtuf@coredump.cx> and designated CVE-6278
- - parser_remaining_input: new function, returns the portion of
- shell_input_line that hasn't yet been read
- - current_input_line_state: removed
-
-shell.h
- - parser_remaining_input: extern declaration
- - current_input_line_state: removed
-
-builtins/evalstring.c
- - parse_and_execute: change code that checks whether parse_command has
- consumed the entire passed string when SEVAL_FUNCDEF is used to use
- parser_remaining_input instead of messing around with (new)
- current_input_line_state. Part of fix for CVE-2014-6278
-
-variables.c
- - initialize_shell_variables: if we don't call parse_and_execute, free the
- temporary string, since parse_and_execute won't. Report and fix from
- Eric Kobrin <ekobrin@akamai.com>
-
- 10/4
- ----
-print_cmd.c
- - print_function_def: when in posix mode, print shell function
- definitions as posix specifies them, without the leading
- `function' keyword
-
-general.c
- - exportable_function_name: return 1 if the passed string can be
- added to the environment as an exported function name. Currently
- prohibits function names containing `/' and `=' from being
- exported
-
-general.h
- - exportable_function_name: extern declaration
-
-builtins/setattr.def
- - set_or_show_attributes: if exporting a function with export -f,
- call exportable_function_name to determine whether the function
- should be exported; don't export function if it returns 0
-
- 10/7
- ----
-builtins/setattr.def
- - set_or_show_attributes: don't show identifiers that are invisible
- and imported from the environment, since that combination of
- attributes means that the imported variable is not a valid shell
- identifier. Report from Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 10/8
- ----
-shell.c
- - shell_initialize: set new variable should_be_restricted, which
- says whether or not the shell will be a restricted one based on the
- shell name; use in calls to initialize_shell_variables (to inhibit
- importing shell functions) and initialize_shell_options (to inhibit
- parsing $SHELLOPTS) and initialize_bashopts (to inhibit parsing
- $BASHOPTS). Report from <paulfm@umn.edu>
-
- 10/12
- -----
-execute_cmd.c
- - execute_function: unwind-protect loop_level, set loop_level to 0
- when entering a function so break and continue in functions don't
- break loops running outside of the function. Fix picked up from
- dash via Herbert Xu <herbert@gnodor.apana.org.au>
-
- 10/13
- -----
-doc/Makefile.in
- - bashref.pdf: create using texi2dvi --pdf rather than postprocessing the
- dvi file, so we have PDF bookmarks and links. Fix from
- Siep Kroonenberg <siepo@cybercomm.nl>
-
- 10/14
- -----
-subst.h
- - Q_ARITH: new quoting flag. Semantics are per Posix's spec for arithmetic
- expansion: act as if string is quoted, but don't treat double quotes
- specially (in this case, they will be removed by quote removal)
- - Q_ARRAYSUB: new quoting flag, indicates we are expanding an indexed array
- subscript
-
-subst.c
- - expand_arith_string: if we are not expanding the string, but we saw a quote
- with Q_ARITH specified as one of quoting flags, perform quote removal even
- if Q_DOUBLE_QUOTES is specified
- - param_expand: change calls to expand_arith_string for $[ and $(( cases to
- specify Q_ARITH. Now $(( "$x" )) and $(( "x" )) work if x has a value that
- evaluates to a valid number, as Posix specifies
- - expand_word_internal: add test for quoted&Q_ARITH to the tilde case, so we
- continue to perform tilde expansion in arithmetic contexts
- - expand_word_internal: if quoted&Q_ARITH, continue processing when we see a
- `"', acting as if the double quote isn't present (already Q_DOUBLE_QUOTED)
-
-arrayfunc.c
- - array_expand_index: pass Q_DOUBLE_QUOTED|Q_ARITH|Q_ARRAYSUB as quoted argument
- in call to expand_arith_string. This inhibits word splitting
- (Q_DOUBLE_QUOTED) while discarding double quotes (Q_ARITH), identical to the
- quote flags passed while expanding $(( )) and $[ ]. Q_ARRAYSUB reserved for
- future use. Fixes problem reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
-
- 10/16
- -----
-subst.c
- - parameter_brace_expand_word: if the PF_ASSIGNRHS flag is set and we
- are expanding what looks like an array subscripted with @ or *,
- make sure the variable we're expanding is actually an array before
- we add Q_DOUBLE_QUOTES to the flags. If we don't, things like
- scalar[@] will remain quoted. Fixes ubuntu bug 1381567
- https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1381567
-
- 10/17
- -----
-{jobs,nojobs}.c
- - get_original_tty_job_signals: get original signal dispostions for
- SIGTSTP, SIGTTIN, SIGTTOU before we start manipulating them in
- make_child
- - default_tty_job_signals: make sure we set SIGTSTP, SIGTTIN, or
- SIGTTOU to SIG_IGN if they were ignored at shell startup instead of
- unconditionally setting them to SIG_DFL. Fixes bug reported by
- idallen@idallen.ca
-
-jobs.h
- - get_original_tty_job_signals: extern declaration
-
-trap.c
- - initialize_traps: add call to get_original_tty_job_signals
-
- 10/22
- -----
-subst.c
- - expand_string_for_rhs: when expanding in this context (rhs of a word
- expansion or pattern removal), we don't perform word splitting, so
- we don't want to split $* if IFS is empty. Fixes bug reported by
- Stephane Chazelas <stephane.chazelas@gmail.com>
-
- 10/23
- -----
-subst.c
- - param_expand: when expanding $* in a pattern context where the
- expansion is quoted (Q_PATQUOTE), don't quote the expansion --
- the outer quotes don't make the characters in the expansion of
- $* special. Posix interp 221. Reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>
-
- 10/28
- -----
-lib/readline/bind.c
- - enable-bracketed-paste: new bindable variable, enables support for
- a terminal's `bracketed paste mode'. Code contributed by
- Daniel Colascione <dancol@dancol.org>
-
-doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
- - enable-bracketed-paste: add description
-
-lib/readline/{readline.c,rlprivate.h}
- - _rl_enable_bracketed_paste: declarations
- - #defines for use by bracketed paste implementation
-
-lib/readline/rltty.c
- - rl_prep_terminal: send BRACK_PASTE_INIT string to terminal if we
- are supposed to enable bracketed-paste mode; change terminal_prepped
- to indicate we sent that string and need to clean up
- - rl_deprep_terminal: if terminal_prepped indicates we sent the
- bracketed-paste mode init string to the terminal, send the cleanup
- string before restoring the terminal modes
-
-lib/readline/kill.c
- - rl_bracketed_paste_begin: function to read bracketed paste until
- BRACK_PASTE_SUFF; discard the suffix, and insert the rest of the
- paste as a single (undoable) object. Bound to BRACK_PASTE_PREF
-
-lib/readline/funmap.c
- - bracketed-paste-begin: new bindable command, executes
- rl_bracketed_paste_begin
-
-lib/readline/readline.c
- - bind_bracketed_paste_prefix: new function, sets up to recognize
- the bracketed paste prefix sequence (BRACK_PASTE_PREF) in emacs
- keymap and vi insertion keymap
- - readline_initialize_everything: call bind_bracketed_paste_prefix
-
- 11/1
- ----
-builtins/ulimit.def
- - RLIMIT_POSIXLOCKS: now synonym for RLIMIT_LOCKS
- - -k: new option: RLIMIT_KQUEUES, max kqueues allocated for this
- process
- - -P: new option: RLIMIT_NPTS, max number of pseudoterminals available
- to this process
-
-doc/{bash.1,bashref.texi}
- - document `ulimit -k' option
- - document `ulimit -P' option
-
-parse.y
- - `timespec list_terminator' production: if the list terminator is `;'
- set last_read_token to `;' to allow things like `time ; command' to
- time null commands and not throw a syntax error. Patch from
- Piotr Grzybowski <narsil.pl@gmail.com>
- - `BANG list_terminator' production: do the same thing
-
-variables.c
- - sv_optind: use find_shell_variable and get_variable_value so we can
- have the variable's context in the case we need to do something
- when we are restoring a previous variable context's value
-
-builtins/getopt.h
- - sh_getopt_state_t: struct to save sh_getopt's internal state so we
- can restore it around function calls in the event that we have a
- local copy of OPTIND
-
-builtins/getopt.[ch]
- - sh_getopt_{save,restore}_istate: new functions to save and restore
- getopt's internal state
- - sh_getopt_{alloc,dispose}_istate: new functions to allocate and
- deallocate sh_getopt_istate_t objects
-
-execute_cmd.c
- - maybe_restore_getopt_state: restore sh_getopt state after executing
- function body iff the funtion declared a local copy of OPTIND
- - execute_function: save sh_getopt state before executing function body
- - execute_function: note in getopt_state->flags whether or not the
- function declared a local copy of OPTIND; used by maybe_restore_getopt_state
- - execute_function: maybe restore sh_getopt state before returning via
- call to maybe_restore_getopt_state. Fixes bugs with getopts and
- state between calls reported in 2011 by Bernd Eggink <monoped@sudrala.de>
- and in 2014 by Oyvind Hvidsten <oyvind.hvidsten@dampir.no>
-
-configure.ac
- - enable-function-import: new option, controls whether function imports
- are included. Enabled by default. Patch from David Galos
- <davegalos@google.com>
-
-config.h.in
- - FUNCTION_IMPORT: define controlled by enable-function-import above
-
-variables.c
- - initialize_shell_variables: include code to import function definitions
- from the environment if FUNCTION_IMPORT is defined
-
-doc/bashref.texi
- - --enable_function-import: document new configuration option
-
- 11/5
- ----
-lib/readline/history.c
- - history_lines_read_from_file: new variable, set by read_history and
- read_history_range to the actual number of lines read from the
- history file. The value is valid immediately after a call to one
- of those functions
- - history_lines_written_to_file: new variable, set by write_history,
- history_do_write, and history_truncate_file to the actual number of
- lines written to the history file. The value is valid immediately
- after a call to one of those functions
-
-variables.c
- - sv_histsize: set history_lines_in_file after history_truncate_file()
- only if hmax < history_lines_in_file (lines we've already read); a
- cosmetic change only
-
-bashhist.c
- - load_history: set history_lines_in_file after read_history() from
- history_lines_read_from_file, since read_history reads all of the
- lines from the history file even if it's more than $HISTSIZE
- - maybe_save_shell_history: after calling write_history(), set
- history_lines_in_file to history_lines_written_to_file, since we
- can assume that we read everyhing we just wrote
-
-builtins/history.def
- - history_builtin: after calling read_history (history -r), set the
- new value of history_lines_in_file, for the same reason as above
- - history_builtin: after calling read_history_range (history -n), set
- history_lines_in_file from history_lines_read_from_file
-
- 11/6
- ----
-lib/readline/histfile.c
- - history_truncate_file: since we move the old file to a backup copy
- before truncating, make sure the new file is owned by the same uid
- as the old
- - history_do_write: use chown in the same way as history_truncate_file
-
- 11/12
- -----
-lib/readline/display.c
- - expand_prompt: takes a new `flags' argument; only one flag defined
- so far: PMT_MULTILINE
- - expand_prompt: changed all callers to add new flags argument
- - rl_expand_prompt, redraw_prompt: make sure to set PMT_MULTILINE in
- FLAGS argument to expand_prompt if expanding parts of a prompt
- containing embedded newlines
- - expand_prompt: only add mode char to last line of a prompt with
- embedded newlines, so mode indicator doesn't get lost and gets
- updated properly. Fixes problem reported by Renlin Li
- <lirenlin@gmail.com>
-
- 11/13
- -----
-
-lib/readline/display.c
- - prompt_modestr: changed prompt_modechar to return a string denoting
- the editing mode; default strings for emacs and both vi modes are
- #defines in this file. prompt_modestr takes an argument in which
- it returns the length of the mode string
- - expand_prompt: if expanding mode strings in the prompt, get the
- mode string to use and add it at the beginning of the prompt string,
- before expanding it. This will allow future work allowing the mode
- string to contain invisible characters
-
- 11/15
- -----
-lib/readline/rlprivate.h
- - _rl_{emacs,vi_cmd,vi_ins}_mode_str: extern declarations for
- variables to hold current values of user-settable mode strings;
- variables to hold lengths
-
-lib/readline/rlconf.h
- - defines for default values of the mode strings for each editing mode
- and keymap
-
-lib/readline/display.c
- - _rl_{emacs,vi_cmd,vi_ins}_mode_str: new variables to hold values of
- user-settable mode strings
- - _rl_{emacs,vi_cmd,vi_ins}_modestr_len: new variables to hold lengths
- of corresponding mode string variables
- - prompt_modestr: return appropriate user-settable mode string
- variables
-
-lib/readline/bind.c
- - {emacs,vi-ins,vi-cmd}-mode-string: new user-settable mode string
- variables
- - sv_{emacs,viins,vicmd}_modestr: variable handling functions for user-
- settable mode string variables. Non-null values are run through
- rl_translate_keyseq so users can include invisible character
- sequences in the mode strings; null values restore the default
- - _rl_get_string_variable_value: handle values for new user-settable
- mode string variables. Original code contributed by Dylan Cali
- <calid1984@gmail.com>
-
-lib/readline/doc/rluser.texi
- - {emacs,vi-ins,vi-cmd}-mode-string: document, including the fact that
- you can use \1 and \2 to bracket sequences of non-printing
- characters
-
- 11/16
- -----
-lib/readline/history.c
- - add_history: replace loop that copies history list down one item
- with call to memmove to take advantage of whatever efficiencies
- libc can offer. Won't be any slower than current loop
-
-lib/readline/display.c
- - rl_redraw_prompt_last_line: new function, calls redraw_prompt if
- the prompt contains multiple lines; calls rl_forced_update_display
- if not
-
-lib/readline/readline.h
- - rl_redraw_prompt_last_line: extern declaration, undocumented in
- texinfo manual until I get it a little more work
-
-bashline.c
- - bash_execute_unix_command: instead of unconditionally calling
- rl_forced_update_display, call rl_redraw_prompt_last_line if we
- cleared the last line before executing the command. This keeps
- commands that don't display any other output but just manipulate
- the contents of the line buffer from redisplaying the prompt lines
- before the last newline multiple times. Fixes bug reported by
- Jesper Nygards <jesper.nygards@gmail.com> and Rob Foehl
- <rwf@loonybin.net>. This means that commands that display output
- will *only* display the final line of the prompt
- - bash_execute_unix_command: if the command returns 124, we redraw
- the line unconditionally, including all lines of the prompt
-
- 11/18
- -----
-builtins/mapfile.def
- - mapfile_builtin: don't allow a valid array reference through to
- mapfile(), since it will just create a shell variable with that name.
- Bug and fix from Eduardo A. Bustamante López <dualbus@gmail.com>
-
- 11/19
- -----
-lib/readline/complete.c
- - _rl_colored_completion_prefix: new variable, if non-zero, and color
- support is compiled in, and the $LS_COLORS variable exists and
- contains color definitions, display any common prefix of a set of
- completions in blue when displaying all the possible completions.
- Doesn't work with menu-complete, which inserts possible completions
- inline
- - colored_prefix_start(), colored_prefix_end(): new functions, used to
- bracket colored completion prefixes
- - fnprint: if prefix_bytes is non-zero, and _rl_colored_completion_prefix
- is > 0, display the first PREFIX_BYTES bytes of the word bracketed
- by calls to colored_prefix_start and colored_prefix_end
- - print_filename: if _rl_colored_completion_prefix is > 0, compute the
- length in bytes of the common prefix and pass that to fnprint
-
-lib/readline/readline.c
- - readline_initialize_everything: initialize the colors from $LS_COLORS
- if _rl_colored_completion_prefix is non-zero
-
-lib/readline/colors.c
- - _rl_print_prefix_color: new function, changes text color to that
- defined for the common prefix of a set of possible completions
- (currently cyan, same as directories); currently uses C_PREFIX,
- defined in colors.h as C_DIR
-
-lib/readline/colors.h
- - _rl_print_prefix_color: new extern declaration
-
-lib/readline/bind.c
- - colored-completion-prefix: new bindable variable, if set, common
- prefix of a set of possible completions is displayed in color.
- Feature requested by several, most recently by Richard Neill
- <rn214@richardneill.org> (in a slightly different form) and
- Duy Nguyen <pclouds@gmail.com>
-
- 11/20
- -----
-builtins/printf.def
- - printf_builtin: allow null (empty) format strings supplied with
- -v var to set `var' to the empty string. That is, printf -v var ""
- is now the same as var="". Change suggested by Mike Frysinger
- <vapier@gentoo.org>
-
-pathexp.h
- - FNMATCH_NOCASEGLOB: macro to decide whether or not to pass
- FNM_CASEFOLD flag to strmatch depending on whether glob_ignore_case
- is set; analogout to FNMATCH_IGNCASE
-
-pathexp.c
- - glob_name_is_acceptable: use FNMATCH_NOCASEMATCH to determine flags
- passed to strmatch; if nocaseglob is used to generate glob matches,
- it should be used to generate ignored matches
-
- 11/21
- -----
-pcomplete.c
- - filter_stringlist: the call to strmatch now honors the setting of
- nocasematch. Feature request from Ville Skytta <ville.skytta@iki.fi>
- back in 2010
-
-doc/bash.1,lib/readline/doc/rluser.texi
- - complete -X: document that filtering the list of possible completions
- honors the nocasematch option when performing matching
-
-lib/glob/gmisc.c
- - include chartypes.h and strmatch.h for new defines
- - match_pattern_{wchar,char}: now take new third FLAGS argument, flags
- have same meanings as strmatch(); intent is to handle case
- insensitive comparisons under same conditions as strmatch
- - FOLD: imported case-folding define from sm_loop.c; wide and single-
- byte character versions
- - match_pattern_{wchar,char}: use FOLD when comparing characters to
- honor FNM_CASEFOLD if set in FLAGS argument
-
-externs.h
- - match_pattern_{wchar,char}: updated extern declarations
-
-subst.c
- - match_{upattern,wpattern}: update strmatch/wcsmatch calls to include
- FNMATCH_IGNCASE in flags argument
- - match_{upattern,wpattern}: update match_pattern_{char,wchar} calls
- to include FNMATCH_IGNCASE in flags argument (consistent with calls
- to strmatch). This makes pattern substitution word expansion honor
- nocasematch shell option. Feature requested by Davide Baldini
- <baldiniebaldini@gmail.com>
- - match_wpattern: make sure to fold case if necessary when doing simple
- matching
-
-doc/{bash.1,bashref.texi}
- - pattern substitution: updated description to include honoring setting
- of nocasematch when performing matching
-
-subst.c
- - expand_word_internal: optimize handling of "$@" idiom by calling
- list_rest_of_args() and quote_list() directly at the top of the
- function instead of going through normal code path
- - cached_quoted_dollar_at: WORD_LIST of quoted positional parameters,
- used by same code above that optimizes "$@"; if non-null we just
- return a copy of the list; if null, we save a copy of the list we
- create
- - invalidate_cached_quoted_dollar_at: convenience function to allow
- other parts of the shell (e.g., remember_args()) to destroy the
- cached list of quoted positional parameter when the positional
- parameters change
-
-builtins/common.c
- - remember_args: call invalidate_cached_quoted_dollar_at()
-
-builtins/shift.def
- - shift_builtin: call invalidate_cached_quoted_dollar_at after modifying
- dollar_vars[]
-
-builtins/source.def
- - maybe_pop_dollar_vars: call invalidate_cached_quoted_dollar_at just
- to be safe
-
- 11/23
- -----
-builtins/evalfile.c
- - _evalfile: return -1 if errno == ENOENT and the flags don't include
- FEVAL_ENOENTOK. If we print an error message we should return an
- error
- - force_execute_file: new function, reads and executes commands from
- a file but returns an error if file doesn't exist
-
-builtins/common.h
- - force_execute_file: new extern declaration
-
-shell.c
- - main: call start_debugger even if dollar_vars[1] == 0 if the shell
- isn't interactive (interactive_shell == 0)
- - start_debugger: call force_execute_file instead of maybe_execute_file;
- turn off debugging mode if it returns value < 0
-
- 11/24
- -----
-hashlib.h
- - DEFAULT_HASH_BUCKETS: doubled to 128, cost in memory use is small but
- changes traversal order when not sorting results
-
- 11/25
- -----
-doc/{bash.1,bashref.texi}
- - make it clearer, by breaking it out into a separate paragraph, that
- referencing an array without a subscript is equivalent to referencing
- it with subscript 0
- - add text saying that referencing any variable using a valid subscript
- is OK
-
- 11/28
- -----
-
-arrayfunc.c
- - bind_array_variable, bind_assoc_variable: allow binding value to a
- readonly variable if the ASS_FORCE flag is set in the FLAGS
- argument
-
-subst.h
- - ASS_FORCE: new assignment flag; means to allow assignment even if
- variable is marked readonly
-
-builtins/declare.def
- - when assigning a value to an array or assoc variable using
- something like `declare -r foo=bar' where foo is an existing array
- variable, pass the ASS_FORCE to assign_array_var_from_string so
- the assignment is allowed. Fixes debian bug 765759
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=765759
-
-builtins/setattr.def
- - var_attribute_string: new function to return (as argument) a char
- array with attribute flag values for a given variable; returns the
- length of the array
-
-lib/sh/shquote.c
- - sh_quote_reusable: function returning a version of its string
- argument that is quoted for reuse
-
-externs.h
- - sh_quote_reusable: extern declaration
-
-builtins/common.h
- - MAX_ATTRIBUTES: define used to size arrays for attribute flag
- characters
- - var_attribute_string: new extern function declaration
-
-subst.c
- - array_remove_pattern: fixed a bug where `var' instead of `v' was
- tested for invisible attribute
- - get_var_and_type: fill in a valid *VARP if returning VT_VARIABLE
- because callers may need to use it
- - parameter_brace_transform: family of functions to implement the new
- mksh-inspired ${param@spec} transformation word expansions. Some
- of the operators transform the (expanded) value of the parameter,
- the rest expand to information about the parameter itself
- (array_transform, parameter_list_transform, list_transform,
- string_transform, pos_params_assignment, array_var_assignment,
- string_var_assignment)
- - parameter_brace_expand: changes to parse the new `@' word expansion
- operator and call parameter_brace_transform appropriately
- - parameter_brace_expand: make sure we handle ${#@} as we have before
- even in the presence of the new `@' operator
-
-variables.c
- - push_temp_var: make sure to call bind_variable_internal with the
- ASS_FORCE flag so we override readonly variables created with
- something like `tempvar=foo declare -r foo'.
- - bind_variable_internal: honor ASS_FORCE flag to allow binding even
- if a variable is readonly
-
-execute_cmd.c
- - struct func_array_state: new state to save state of BASH_LINENO,
- BASH_SOURCE, and FUNCNAME during function execution so it can be
- restored on a jump to top level
- - restore_funcarray_state: new function to restore func_array_state
- - execute_function: fill in func_array_state variable, add unwind-
- protect to restore it on jump to top level, call explicitly at
- end of function if subshell != 0 (may not be necessary, but safe
- for now). Fixes bug with local assignments to FUNCNAME reported
- by Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
-
- 11/29
- -----
-arrayfunc.c
- - assign_compound_array_list: turn off ASS_APPEND flag when processing
- each individual assignment inside the parens in var+=(...). The
- outer += should not affect assignments to existing subscripts;
- those should be treated like usual assignments unless += supplied
- inside the parens. Bug report from Maarten Billemont
- <lhunath@lyndir.com>, fix from Eduardo A. Bustamante López
- <dualbus@gmail.com>
-
-config.h.in
- - HAVE_PSELECT: define if pselect(2) available
-
-configure.ac
- - check for pselect(2), define HAVE_PSELECT if found
-
-lib/readline/input.c
- - rl_getc: use pselect(2) to wait for input ready on readline's
- input fd or for a signal to arrive, will handle SIGWINCH (which
- does not interrupt read(2)) and thus allow resize to happen without
- having to wait to read more input. Only works if pselect available
- and returns -1/EINTR on a signal even if the signal was installed
- with SA_RESTART. From a suggestion from Egmont Koblinger
- <egmont@gmail.com>
-
- 12/3
- ----
-variables.c
- - flush_temporary_env: new function, disposes all temp variables in
- temporary_env hash table
- - bind_variable: only try to update a temporary variable's value in the
- temporary env if the value argument is not null. Fixes bug reported
- by <tangqinghao@360.cn>
-
-variables.h
- - flush_temporary_env: new extern declaration
-
-subst.c
- - command_substitute: if running command substitution as part of
- expanding a redirection (expanding_redir == 1), flush any temporary
- environment we've inherited as part of this command, since we are not
- supposed to have access to the temporary environment. Since
- expanding_redir only controls access to the temporary environment for
- variable lookup and binding, we can turn it off in the subshell
-
- 12/4
- ----
-builtins/printf.def
- - printstr: make sure a missing precision specifier after a `.' is
- treated as 0, as printf(3) specifies. Fixes ubuntu bash bug
- 1399087 (https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1399087)
-
- 12/5
- ----
-subst.c
- - skip_to_delim: if scanning past process substitution (skipcmd == 1,
- noprocsub == 0), use extract_delimited_string instead of
- extract_process_subst, which was changed a while back (bash-4.3.23)
- to use xparse_dolparen. xparse_dolparen complains if the command
- or process substitution is unterminated, since it runs the parser,
- which is not what we want here. Command substitution does the same
- thing. Fixes bug reported by Daniel Kahn Gillmor
- <dkg@fifthhorseman.net> as Debian bash bug 771968
- (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771968)
-
- 12/6
- ----
-subst.c
- - command_substitute: short-circuit without forking on a command string
- that consists entirely of <blank>s and newlines
-
-jobs.c
- - make_child: changes to allow interrupts through if fork fails and
- we are sleeping for `forksleep' seconds
- - waitchld: make things a little more resilient if CHILD ends up NULL
-
- 12/12
- -----
-lib/readline/complete.c
- - rl_display_match_list: when calculating common prefix to display in
- color, make sure we correctly handle a common prefix with a trailing
- `/' as we do when checking whether or not to add an ellipis.
- printable_part() doesn't return the whole pathname if it ends in a
- slash, to avoid printing null strings, so we have to make sure we
- have the entire prefix
-
-lib/readline/complete.c
- - _rl_complete_display_matches_interrupt: new variable, set to 1 by
- _rl_complete_sigcleanup to let rl_display_match_list know it has
- freed the match list
- - display_matches: check for signals during the printing loops with
- RL_SIG_RECEIVED(), return immediately if there is a pending signal
- (might not want to do this if it's SIGWINCH -- CHECK)
- - rl_complete_internal: if _rl_complete_display_matches_interrupt
- set after calling display_matches, just null out `matches' since
- it's already been freed and call any application-set signal hook
-
- 12/14
- -----
-parse.y
- - time_command_acceptable: if the token before a newline is `|',
- return 0, since it's not really valid to time inside a pipeline.
- Only handles a single newline but allows things like
- echo a |
- time cat
- to invoke /usr/bin/time, which is probably enough to catch the
- stray carriage return. Fixes bug reported by Andre Majorel
- <aym-ung@teaser.fr>
-
-builtins/declare.def
- - declare_internal: don't try to perform compound assignments unless
- the WORD_DESC has flags including W_COMPASSIGN (maybe should check
- W_ASSIGNMENT as well), avoiding unexpected evaluation if a word
- is of the form (word) and is assigned to an array variable like so:
- declare -x var=$value. Bug reported by Stephane Chazelas
- <stephane.chazelas@gmail.com>. Will eventually be contingent on
- compatibility level > 43, but not there yet
-
- 12/15
- -----
-lib/sh/Makefile.in
- - add missing dependencies for shmatch.o. Pointed out by Sergey
- Mikhailov <sergey.mikhailov@gmail.com>
-
- 12/16
- -----
-{execute_cmd,subst}.c
- - W_ASSIGNINT: remove, not used any more
-
-execute_cmd.c
- - fix_assignment_words: don't look for `-i' option and set W_ASSIGNINT
- flag any more; doing things a different way
- - shell_expand_word_list: instead of using W_ASSIGNINT flag, since it
- doesn't take into account all options that can transform values on
- assignment (-l/-u/-c can also), go through option arguments looking
- for options that need special handling and add them to the `opts'
- array for make_internal_declare to use. Fixes bug with constructs
- like `declare -al foo=(UPONE UPTWO UPTHREE)' not being lowercased on
- assignment reported by Linda Walsh <bash@tlinx.org>
-
- 12/18
- -----
-lib/readline/readline.c
- - rl_internal_char: when we read EOF on a non-empty line, check for
- signals and invoke any readline signal handling and any application-
- installed signal hook
-
- 12/20
- -----
-lib/readline/readline.c
- - rl_internal_char: if we read EOF on a non-empty line, set c to
- _rl_eof_char the first time through. If we read EOF the next time,
- return EOF from readline(). If callbacks are defined, this returns
- EOF immediately, since lastc isn't available
diff --git a/CWRU/POSIX.NOTES.old b/CWRU/POSIX.NOTES.old
deleted file mode 100644
index 1707ab10..00000000
--- a/CWRU/POSIX.NOTES.old
+++ /dev/null
@@ -1,82 +0,0 @@
-Starting bash with the `--posix' command-line option or executing
-`set -o posix' while bash is running will cause bash to conform more
-closely to the Posix.2 standard by changing the behavior to match that
-specified by Posix.2 in areas where the bash default differs.
-
-The following list is what's changed when `posix mode' is in effect:
-
-1. When a command in the hash table no longer exists, bash will re-search
- $PATH to find the new location. This is also available with
- `shopt -s checkhash'.
-
-2. The >& redirection does not redirect stdout and stderr.
-
-3. The message printed by the job control code and builtins when a job
- exits with a non-zero status is `Done(status)'.
-
-4. Reserved words may not be aliased.
-
-5. The Posix.2 PS1 and PS2 expansions of `!' -> history number and
- `!!' -> `!' are enabled, and parameter expansion is performed on
- the value regardless of the setting of the `promptvars' option.
-
-6. Interactive comments are enabled by default. (Note that bash has
- them on by default anyway.)
-
-7. The Posix.2 startup files are executed ($ENV) rather than the normal
- bash files.
-
-8. Tilde expansion is only performed on assignments preceding a command
- name, rather than on all assignment statements on the line.
-
-9. The default history file is ~/.sh_history (default value of $HISTFILE).
-
-10. The output of `kill -l' prints all the signal names on a single line,
- separated by spaces.
-
-11. Non-interactive shells exit if `file' in `. file' is not found.
-
-12. Redirection operators do not perform pathname expansion on the word
- in the redirection unless the shell is interactive
-
-13. Function names must be valid shell identifiers. That is, they may not
- contain characters other than letters, digits, and underscores, and
- may not start with a digit. Declaring a function with an illegal name
- causes a fatal syntax error in non-interactive shells.
-
-14. Posix.2 `special' builtins are found before shell functions during command
- lookup.
-
-15. If a Posix.2 special builtin returns an error status, a non-interactive
- shell exits. The fatal errors are those listed in 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.
-
-16. The environment passed to executed commands is not sorted. Neither is
- the output of `set'. This is not strictly Posix.2 behavior, but sh
- does it this way. Ksh does not. It's not necessary to sort the
- environment; no program should rely on it being sorted.
-
-17. If the `cd' builtin finds a directory to change to using $CDPATH, the
- value it assigns to $PWD does not contain any symbolic links, as if
- `cd -P' had been executed.
-
-18. A non-interactive shell exits with an error status if a variable
- assignment error occurs when no command name follows the assignment
- statements. A variable assignment error occurs, for example, when
- trying to assign a value to a read-only variable.
-
-19. A non-interactive shell exits with an error status if the iteration
- variable in a for statement or the selection variable in a select
- statement is a read-only variable.
-
-20. Process substitution is not available.
-
-21. Assignment statements preceding POSIX.2 `special' builtins persist in
- the shell environment after the builtin completes.
-
-There is other Posix.2 behavior that bash does not implement. Specifically:
-
-1. Assignment statements affect the execution environment of all builtins,
- not just special ones.
diff --git a/CWRU/old/set.def.save b/CWRU/old/set.def.save
deleted file mode 100644
index 87b78d7c..00000000
--- a/CWRU/old/set.def.save
+++ /dev/null
@@ -1,544 +0,0 @@
-This file is set.def, from which is created set.c.
-It implements the "set" and "unset" builtins in Bash.
-
-Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc.
-
-This file is part of GNU Bash, the Bourne Again SHell.
-
-Bash is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 1, or (at your option) any later
-version.
-
-Bash is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with Bash; see the file COPYING. If not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-$PRODUCES set.c
-
-#include <stdio.h>
-#include "../shell.h"
-#include "../flags.h"
-
-#include "bashgetopt.h"
-
-extern int interactive;
-extern int noclobber, posixly_correct;
-#if defined (READLINE)
-extern int rl_editing_mode, no_line_editing;
-#endif /* READLINE */
-
-$BUILTIN set
-$FUNCTION set_builtin
-$SHORT_DOC set [--abefhkmnptuvxldBCHP] [-o option] [arg ...]
- -a Mark variables which are modified or created for export.
- -b Notify of job termination immediately.
- -e Exit immediately if a command exits with a non-zero status.
- -f Disable file name generation (globbing).
- -h Locate and remember function commands as functions are
- defined. Function commands are normally looked up when
- the function is executed.
- -i Force the shell to be an "interactive" one. Interactive shells
- always read `~/.bashrc' on startup.
- -k All keyword arguments are placed in the environment for a
- command, not just those that precede the command name.
- -m Job control is enabled.
- -n Read commands but do not execute them.
- -o option-name
- Set the variable corresponding to option-name:
- allexport same as -a
- braceexpand same as -B
-#if defined (READLINE)
- emacs use an emacs-style line editing interface
-#endif /* READLINE */
- errexit same as -e
- histexpand same as -H
- ignoreeof the shell will not exit upon reading EOF
- interactive-comments
- allow comments to appear in interactive commands
- monitor same as -m
- noclobber disallow redirection to existing files
- noexec same as -n
- noglob same as -f
- nohash same as -d
- notify save as -b
- nounset same as -u
- physical same as -P
- posix change the behavior of bash where the default
- operation differs from the 1003.2 standard to
- match the standard
- privileged same as -p
- verbose same as -v
-#if defined (READLINE)
- vi use a vi-style line editing interface
-#endif /* READLINE */
- xtrace same as -x
- -p Turned on whenever the real and effective user ids do not match.
- Disables processing of the $ENV file and importing of shell
- functions. Turning this option off causes the effective uid and
- gid to be set to the real uid and gid.
- -t Exit after reading and executing one command.
- -u Treat unset variables as an error when substituting.
- -v Print shell input lines as they are read.
- -x Print commands and their arguments as they are executed.
- -l Save and restore the binding of the NAME in a FOR command.
- -d Disable the hashing of commands that are looked up for execution.
- Normally, commands are remembered in a hash table, and once
- found, do not have to be looked up again.
-#if defined (BRACE_EXPANSION)
- -B the shell will perform brace expansion
-#endif /* BRACE_EXPANSION */
-#if defined (BANG_HISTORY)
- -H Enable ! style history substitution. This flag is on
- by default.
-#endif /* BANG_HISTORY */
- -C If set, disallow existing regular files to be overwritten
- by redirection of output.
- -P If set, do not follow symbolic links when executing commands
- such as cd which change the current directory.
-
-Using + rather than - causes these flags to be turned off. The
-flags can also be used upon invocation of the shell. The current
-set of flags may be found in $-. The remaining n ARGs are positional
-parameters and are assigned, in order, to $1, $2, .. $n. If no
-ARGs are given, all shell variables are printed.
-$END
-
-/* An a-list used to match long options for set -o to the corresponding
- option letter. */
-struct {
- char *name;
- int letter;
-} o_options[] = {
- { "allexport", 'a' },
-#if defined (BRACE_EXPANSION)
- { "braceexpand",'B' },
-#endif
- { "errexit", 'e' },
- { "histexpand", 'H' },
- { "monitor", 'm' },
- { "noexec", 'n' },
- { "noglob", 'f' },
- { "nohash", 'd' },
-#if defined (JOB_CONTROL)
- { "notify", 'b' },
-#endif /* JOB_CONTROL */
- {"nounset", 'u' },
- {"physical", 'P' },
- {"privileged", 'p' },
- {"verbose", 'v' },
- {"xtrace", 'x' },
- {(char *)NULL, 0},
-};
-
-#define MINUS_O_FORMAT "%-15s\t%s\n"
-
-void
-list_minus_o_opts ()
-{
- register int i;
- char *on = "on", *off = "off";
-
- printf (MINUS_O_FORMAT, "noclobber", (noclobber == 1) ? on : off);
-
- if (find_variable ("ignoreeof") || find_variable ("IGNOREEOF"))
- printf (MINUS_O_FORMAT, "ignoreeof", on);
- else
- printf (MINUS_O_FORMAT, "ignoreeof", off);
-
- printf (MINUS_O_FORMAT, "interactive-comments",
- interactive_comments ? on : off);
-
- printf (MINUS_O_FORMAT, "posix", posixly_correct ? on : off);
-
-#if defined (READLINE)
- if (no_line_editing)
- {
- printf (MINUS_O_FORMAT, "emacs", off);
- printf (MINUS_O_FORMAT, "vi", off);
- }
- else
- {
- /* Magic. This code `knows' how readline handles rl_editing_mode. */
- printf (MINUS_O_FORMAT, "emacs", (rl_editing_mode == 1) ? on : off);
- printf (MINUS_O_FORMAT, "vi", (rl_editing_mode == 0) ? on : off);
- }
-#endif /* READLINE */
-
- for (i = 0; o_options[i].name; i++)
- {
- int *on_or_off, zero = 0;
-
- on_or_off = find_flag (o_options[i].letter);
- if (on_or_off == FLAG_UNKNOWN)
- on_or_off = &zero;
- printf (MINUS_O_FORMAT, o_options[i].name, (*on_or_off == 1) ? on : off);
- }
-}
-
-set_minus_o_option (on_or_off, option_name)
- int on_or_off;
- char *option_name;
-{
- int option_char = -1;
-
- if (STREQ (option_name, "noclobber"))
- {
- if (on_or_off == FLAG_ON)
- bind_variable ("noclobber", "");
- else
- unbind_variable ("noclobber");
- stupidly_hack_special_variables ("noclobber");
- }
- else if (STREQ (option_name, "ignoreeof"))
- {
- unbind_variable ("ignoreeof");
- unbind_variable ("IGNOREEOF");
- if (on_or_off == FLAG_ON)
- bind_variable ("IGNOREEOF", "10");
- stupidly_hack_special_variables ("IGNOREEOF");
- }
-
-#if defined (READLINE)
- else if ((STREQ (option_name, "emacs")) || (STREQ (option_name, "vi")))
- {
- if (on_or_off == FLAG_ON)
- {
- rl_variable_bind ("editing-mode", option_name);
-
- if (interactive)
- with_input_from_stdin ();
- no_line_editing = 0;
- }
- else
- {
- int isemacs = (rl_editing_mode == 1);
- if ((isemacs && STREQ (option_name, "emacs")) ||
- (!isemacs && STREQ (option_name, "vi")))
- {
- if (interactive)
- with_input_from_stream (stdin, "stdin");
- no_line_editing = 1;
- }
- else
- builtin_error ("not in %s editing mode", option_name);
- }
- }
-#endif /* READLINE */
- else if (STREQ (option_name, "interactive-comments"))
- interactive_comments = (on_or_off == FLAG_ON);
- else if (STREQ (option_name, "posix"))
- {
- posixly_correct = (on_or_off == FLAG_ON);
- unbind_variable ("POSIXLY_CORRECT");
- unbind_variable ("POSIX_PEDANTIC");
- if (on_or_off == FLAG_ON)
- {
- bind_variable ("POSIXLY_CORRECT", "");
- stupidly_hack_special_variables ("POSIXLY_CORRECT");
- }
- }
- else
- {
- register int i;
- for (i = 0; o_options[i].name; i++)
- {
- if (STREQ (option_name, o_options[i].name))
- {
- option_char = o_options[i].letter;
- break;
- }
- }
- if (option_char == -1)
- {
- builtin_error ("%s: unknown option name", option_name);
- return (EXECUTION_FAILURE);
- }
- if (change_flag (option_char, on_or_off) == FLAG_ERROR)
- {
- bad_option (option_name);
- return (EXECUTION_FAILURE);
- }
- }
- return (EXECUTION_SUCCESS);
-}
-
-/* Set some flags from the word values in the input list. If LIST is empty,
- then print out the values of the variables instead. If LIST contains
- non-flags, then set $1 - $9 to the successive words of LIST. */
-set_builtin (list)
- WORD_LIST *list;
-{
- int on_or_off, flag_name, force_assignment = 0;
-
- if (!list)
- {
- SHELL_VAR **vars;
-
- vars = all_shell_variables ();
- if (vars)
- {
- print_var_list (vars);
- free (vars);
- }
-
- vars = all_shell_functions ();
- if (vars)
- {
- print_var_list (vars);
- free (vars);
- }
-
- return (EXECUTION_SUCCESS);
- }
-
- /* Check validity of flag arguments. */
- if (*list->word->word == '-' || *list->word->word == '+')
- {
- register char *arg;
- WORD_LIST *save_list = list;
-
- while (list && (arg = list->word->word))
- {
- char c;
-
- if (arg[0] != '-' && arg[0] != '+')
- break;
-
- /* `-' or `--' signifies end of flag arguments. */
- if (arg[0] == '-' &&
- (!arg[1] || (arg[1] == '-' && !arg[2])))
- break;
-
- while (c = *++arg)
- {
- if (find_flag (c) == FLAG_UNKNOWN && c != 'o')
- {
- char s[2];
- s[0] = c; s[1] = '\0';
- bad_option (s);
- if (c == '?')
- builtin_usage ();
- return (c == '?' ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
- }
- }
- list = list->next;
- }
- list = save_list;
- }
-
- /* Do the set command. While the list consists of words starting with
- '-' or '+' treat them as flags, otherwise, start assigning them to
- $1 ... $n. */
- while (list)
- {
- char *string = list->word->word;
-
- /* If the argument is `--' or `-' then signal the end of the list
- and remember the remaining arguments. */
- if (string[0] == '-' && (!string[1] || (string[1] == '-' && !string[2])))
- {
- list = list->next;
-
- /* `set --' unsets the positional parameters. */
- if (string[1] == '-')
- force_assignment = 1;
-
- /* Until told differently, the old shell behaviour of
- `set - [arg ...]' being equivalent to `set +xv [arg ...]'
- stands. Posix.2 says the behaviour is marked as obsolescent. */
- else
- {
- change_flag ('x', '+');
- change_flag ('v', '+');
- }
-
- break;
- }
-
- if ((on_or_off = *string) &&
- (on_or_off == '-' || on_or_off == '+'))
- {
- int i = 1;
- while (flag_name = string[i++])
- {
- if (flag_name == '?')
- {
- builtin_usage ();
- return (EXECUTION_SUCCESS);
- }
- else if (flag_name == 'o') /* -+o option-name */
- {
- char *option_name;
- WORD_LIST *opt;
-
- opt = list->next;
-
- if (!opt)
- {
- list_minus_o_opts ();
- continue;
- }
-
- option_name = opt->word->word;
-
- if (!option_name || !*option_name || (*option_name == '-'))
- {
- list_minus_o_opts ();
- continue;
- }
- list = list->next; /* Skip over option name. */
-
- if (set_minus_o_option (on_or_off, option_name) != EXECUTION_SUCCESS)
- return (EXECUTION_FAILURE);
- }
- else
- {
- if (change_flag (flag_name, on_or_off) == FLAG_ERROR)
- {
- char opt[3];
- opt[0] = on_or_off;
- opt[1] = flag_name;
- opt[2] = '\0';
- bad_option (opt);
- builtin_usage ();
- return (EXECUTION_FAILURE);
- }
- }
- }
- }
- else
- {
- break;
- }
- list = list->next;
- }
-
- /* Assigning $1 ... $n */
- if (list || force_assignment)
- remember_args (list, 1);
- return (EXECUTION_SUCCESS);
-}
-
-$BUILTIN unset
-$FUNCTION unset_builtin
-$SHORT_DOC unset [-f] [-v] [name ...]
-For each NAME, remove the corresponding variable or function. Given
-the `-v', unset will only act on variables. Given the `-f' flag,
-unset will only act on functions. With neither flag, unset first
-tries to unset a variable, and if that fails, then tries to unset a
-function. Some variables (such as PATH and IFS) cannot be unset; also
-see readonly.
-$END
-
-#define NEXT_VARIABLE() any_failed++; list = list->next; continue;
-
-unset_builtin (list)
- WORD_LIST *list;
-{
- int unset_function, unset_variable, unset_array, opt, any_failed;
- char *name;
-
- unset_function = unset_variable = unset_array = any_failed = 0;
-
- reset_internal_getopt ();
- while ((opt = internal_getopt (list, "fv")) != -1)
- {
- switch (opt)
- {
- case 'f':
- unset_function = 1;
- break;
- case 'v':
- unset_variable = 1;
- break;
- default:
- builtin_usage ();
- return (EXECUTION_FAILURE);
- }
- }
-
- list = loptend;
-
- if (unset_function && unset_variable)
- {
- builtin_error ("cannot simultaneously unset a function and a variable");
- return (EXECUTION_FAILURE);
- }
-
- while (list)
- {
- SHELL_VAR *var;
- int tem;
-#if defined (ARRAY_VARS)
- char *t;
-#endif
-
- name = list->word->word;
-
-#if defined (ARRAY_VARS)
- if (!unset_function && valid_array_reference (name))
- {
- t = strchr (name, '[');
- *t++ = '\0';
- unset_array++;
- }
-#endif
-
- var = unset_function ? find_function (name) : find_variable (name);
-
- if (var && !unset_function && non_unsettable_p (var))
- {
- builtin_error ("%s: cannot unset", name);
- NEXT_VARIABLE ();
- }
-
- /* Posix.2 says that unsetting readonly variables is an error. */
- if (var && readonly_p (var))
- {
- builtin_error ("%s: cannot unset: readonly %s",
- name, unset_function ? "function" : "variable");
- NEXT_VARIABLE ();
- }
-
- /* Unless the -f option is supplied, the name refers to a variable. */
-#if defined (ARRAY_VARS)
- if (var && unset_array)
- {
- if (array_p (var) == 0)
- {
- builtin_error ("%s: not an array variable", name);
- NEXT_VARIABLE ();
- }
- else
- tem = unbind_array_element (var, t);
- }
- else
-#endif /* ARRAY_VARS */
- tem = makunbound (name, unset_function ? shell_functions : shell_variables);
-
- /* This is what Posix.2 draft 11+ says. ``If neither -f nor -v
- is specified, the name refers to a variable; if a variable by
- that name does not exist, a function by that name, if any,
- shall be unset.'' */
- if ((tem == -1) && !unset_function && !unset_variable)
- tem = makunbound (name, shell_functions);
-
- if (tem == -1)
- any_failed++;
- else if (!unset_function)
- stupidly_hack_special_variables (name);
-
- list = list->next;
- }
-
- if (any_failed)
- return (EXECUTION_FAILURE);
- else
- return (EXECUTION_SUCCESS);
-}
diff --git a/CWRU/save/unwind_prot.h.save b/CWRU/save/unwind_prot.h.save
deleted file mode 100644
index 998fd72b..00000000
--- a/CWRU/save/unwind_prot.h.save
+++ /dev/null
@@ -1,50 +0,0 @@
-/* unwind_prot.h - Macros and functions for hacking unwind protection. */
-
-/* Copyright (C) 1993 Free Software Foundation, Inc.
-
- This file is part of GNU Bash, the Bourne Again SHell.
-
- Bash is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 2, or (at your option) any later
- version.
-
- Bash is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License along
- with Bash; see the file COPYING. If not, write to the Free Software
- Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if !defined (_UNWIND_PROT_H)
-#define _UNWIND_PROT_H
-
-/* Run a function without interrupts. */
-extern void begin_unwind_frame ();
-extern void discard_unwind_frame ();
-extern void run_unwind_frame ();
-extern void add_unwind_protect ();
-extern void remove_unwind_protect ();
-extern void run_unwind_protects ();
-extern void unwind_protect_var ();
-
-/* Define for people who like their code to look a certain way. */
-#define end_unwind_frame()
-
-/* How to protect an integer. */
-#define unwind_protect_int(X) unwind_protect_var (&(X), (char *)(X), sizeof (int))
-
-/* How to protect a pointer to a string. */
-#define unwind_protect_string(X) \
- unwind_protect_var ((int *)&(X), (X), sizeof (char *))
-
-/* How to protect any old pointer. */
-#define unwind_protect_pointer(X) unwind_protect_string (X)
-
-/* How to protect the contents of a jmp_buf. */
-#define unwind_protect_jmp_buf(X) \
- unwind_protect_var ((int *)(X), (char *)(X), sizeof (procenv_t))
-
-#endif /* _UNWIND_PROT_H */
diff --git a/builtins/declare.def~ b/builtins/declare.def~
deleted file mode 100644
index c3044ebe..00000000
--- a/builtins/declare.def~
+++ /dev/null
@@ -1,721 +0,0 @@
-This file is declare.def, from which is created declare.c.
-It implements the builtins "declare" and "local" in Bash.
-
-Copyright (C) 1987-2014 Free Software Foundation, Inc.
-
-This file is part of GNU Bash, the Bourne Again SHell.
-
-Bash is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Bash is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Bash. If not, see <http://www.gnu.org/licenses/>.
-
-$PRODUCES declare.c
-
-$BUILTIN declare
-$FUNCTION declare_builtin
-$SHORT_DOC declare [-aAfFgilnrtux] [-p] [name[=value] ...]
-Set variable values and attributes.
-
-Declare variables and give them attributes. If no NAMEs are given,
-display the attributes and values of all variables.
-
-Options:
- -f restrict action or display to function names and definitions
- -F restrict display to function names only (plus line number and
- source file when debugging)
- -g create global variables when used in a shell function; otherwise
- ignored
- -p display the attributes and value of each NAME
-
-Options which set attributes:
- -a to make NAMEs indexed arrays (if supported)
- -A to make NAMEs associative arrays (if supported)
- -i to make NAMEs have the `integer' attribute
- -l to convert NAMEs to lower case on assignment
- -n make NAME a reference to the variable named by its value
- -r to make NAMEs readonly
- -t to make NAMEs have the `trace' attribute
- -u to convert NAMEs to upper case on assignment
- -x to make NAMEs export
-
-Using `+' instead of `-' turns off the given attribute.
-
-Variables with the integer attribute have arithmetic evaluation (see
-the `let' command) performed when the variable is assigned a value.
-
-When used in a function, `declare' makes NAMEs local, as with the `local'
-command. The `-g' option suppresses this behavior.
-
-Exit Status:
-Returns success unless an invalid option is supplied or a variable
-assignment error occurs.
-$END
-
-$BUILTIN typeset
-$FUNCTION declare_builtin
-$SHORT_DOC typeset [-aAfFgilrtux] [-p] name[=value] ...
-Set variable values and attributes.
-
-Obsolete. See `help declare'.
-$END
-
-#include <config.h>
-
-#if defined (HAVE_UNISTD_H)
-# ifdef _MINIX
-# include <sys/types.h>
-# endif
-# include <unistd.h>
-#endif
-
-#include <stdio.h>
-
-#include "../bashansi.h"
-#include "../bashintl.h"
-
-#include "../shell.h"
-#include "../flags.h"
-#include "common.h"
-#include "builtext.h"
-#include "bashgetopt.h"
-
-extern int array_needs_making;
-extern int posixly_correct;
-
-static int declare_internal __P((register WORD_LIST *, int));
-
-/* Declare or change variable attributes. */
-int
-declare_builtin (list)
- register WORD_LIST *list;
-{
- return (declare_internal (list, 0));
-}
-
-$BUILTIN local
-$FUNCTION local_builtin
-$SHORT_DOC local [option] name[=value] ...
-Define local variables.
-
-Create a local variable called NAME, and give it VALUE. OPTION can
-be any option accepted by `declare'.
-
-Local variables can only be used within a function; they are visible
-only to the function where they are defined and its children.
-
-Exit Status:
-Returns success unless an invalid option is supplied, a variable
-assignment error occurs, or the shell is not executing a function.
-$END
-int
-local_builtin (list)
- register WORD_LIST *list;
-{
- if (variable_context)
- return (declare_internal (list, 1));
- else
- {
- builtin_error (_("can only be used in a function"));
- return (EXECUTION_FAILURE);
- }
-}
-
-#if defined (ARRAY_VARS)
-# define DECLARE_OPTS "+acfgilnprtuxAF"
-#else
-# define DECLARE_OPTS "+cfgilnprtuxF"
-#endif
-
-/* The workhorse function. */
-static int
-declare_internal (list, local_var)
- register WORD_LIST *list;
- int local_var;
-{
- int flags_on, flags_off, *flags;
- int any_failed, assign_error, pflag, nodefs, opt, mkglobal, onref, offref;
- char *t, *subscript_start;
- SHELL_VAR *var, *refvar, *v;
- FUNCTION_DEF *shell_fn;
-
- flags_on = flags_off = any_failed = assign_error = pflag = nodefs = mkglobal = 0;
- refvar = (SHELL_VAR *)NULL;
- reset_internal_getopt ();
- while ((opt = internal_getopt (list, DECLARE_OPTS)) != -1)
- {
- flags = list_opttype == '+' ? &flags_off : &flags_on;
-
- /* If you add options here, see whether or not they need to be added to
- the loop in subst.c:shell_expand_word_list() */
- switch (opt)
- {
- case 'a':
-#if defined (ARRAY_VARS)
- *flags |= att_array;
- break;
-#else
- builtin_usage ();
- return (EX_USAGE);
-#endif
- case 'A':
-#if defined (ARRAY_VARS)
- *flags |= att_assoc;
- break;
-#else
- builtin_usage ();
- return (EX_USAGE);
-#endif
- case 'p':
- if (local_var == 0)
- pflag++;
- break;
- case 'F':
- nodefs++;
- *flags |= att_function;
- break;
- case 'f':
- *flags |= att_function;
- break;
- case 'g':
- if (flags == &flags_on)
- mkglobal = 1;
- break;
- case 'i':
- *flags |= att_integer;
- break;
- case 'n':
- *flags |= att_nameref;
- break;
- case 'r':
- *flags |= att_readonly;
- break;
- case 't':
- *flags |= att_trace;
- break;
- case 'x':
- *flags |= att_exported;
- array_needs_making = 1;
- break;
-#if defined (CASEMOD_ATTRS)
-# if defined (CASEMOD_CAPCASE)
- case 'c':
- *flags |= att_capcase;
- if (flags == &flags_on)
- flags_off |= att_uppercase|att_lowercase;
- break;
-# endif
- case 'l':
- *flags |= att_lowercase;
- if (flags == &flags_on)
- flags_off |= att_capcase|att_uppercase;
- break;
- case 'u':
- *flags |= att_uppercase;
- if (flags == &flags_on)
- flags_off |= att_capcase|att_lowercase;
- break;
-#endif /* CASEMOD_ATTRS */
- default:
- builtin_usage ();
- return (EX_USAGE);
- }
- }
-
- list = loptend;
-
- /* If there are no more arguments left, then we just want to show
- some variables. */
- if (list == 0) /* declare -[aAfFirtx] */
- {
- /* Show local variables defined at this context level if this is
- the `local' builtin. */
- if (local_var)
- {
- register SHELL_VAR **vlist;
- register int i;
-
- vlist = all_local_variables ();
-
- if (vlist)
- {
- for (i = 0; vlist[i]; i++)
- print_assignment (vlist[i]);
-
- free (vlist);
- }
- }
- else if (pflag && (flags_on == 0 || flags_on == att_function))
- show_all_var_attributes (flags_on == 0, nodefs);
- else if (flags_on == 0)
- return (set_builtin ((WORD_LIST *)NULL));
- else
- set_or_show_attributes ((WORD_LIST *)NULL, flags_on, nodefs);
-
- return (sh_chkwrite (EXECUTION_SUCCESS));
- }
-
- if (pflag) /* declare -p [-aAfFirtx] name [name...] */
- {
- for (any_failed = 0; list; list = list->next)
- {
- if (flags_on & att_function)
- pflag = show_func_attributes (list->word->word, nodefs);
- else
- pflag = show_name_attributes (list->word->word, nodefs);
- if (pflag)
- {
- sh_notfound (list->word->word);
- any_failed++;
- }
- }
- return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
- }
-
-#define NEXT_VARIABLE() free (name); list = list->next; continue
-
- /* There are arguments left, so we are making variables. */
- while (list) /* declare [-aAfFirx] name [name ...] */
- {
- char *value, *name;
- int offset, aflags, wflags;
-#if defined (ARRAY_VARS)
- int making_array_special, compound_array_assign, simple_array_assign;
- int var_exists, array_exists, array_subscript_assignment;
-#endif
-
- name = savestring (list->word->word);
- wflags = list->word->flags;
- offset = assignment (name, 0);
- aflags = 0;
-
- if (offset) /* declare [-aAfFirx] name=value */
- {
- name[offset] = '\0';
- value = name + offset + 1;
- if (name[offset - 1] == '+')
- {
- aflags |= ASS_APPEND;
- name[offset - 1] = '\0';
- }
- }
- else
- value = "";
-
- /* Do some lexical error checking on the LHS and RHS of the assignment
- that is specific to nameref variables. */
- if (flags_on & att_nameref)
- {
-#if defined (ARRAY_VARIABLES)
- if (valid_array_reference (name))
- {
- builtin_error (_("%s: reference variable cannot be an array"), name);
- assign_error++;
- NEXT_VARIABLE ();
- }
- else
-#endif
- /* disallow self references at global scope */
- if (STREQ (name, value) && variable_context == 0)
- {
- builtin_error (_("%s: nameref variable self references not allowed"), name);
- assign_error++;
- NEXT_VARIABLE ();
- }
- }
-
-#if defined (ARRAY_VARS)
- var_exists = array_exists = 0;
- compound_array_assign = simple_array_assign = 0;
- array_subscript_assignment = 0;
- subscript_start = (char *)NULL;
- if (t = strchr (name, '[')) /* ] */
- {
- /* If offset != 0 we have already validated any array reference */
- if (offset == 0 && valid_array_reference (name) == 0)
- {
- sh_invalidid (name);
- assign_error++;
- NEXT_VARIABLE ();
- }
- subscript_start = t;
- *t = '\0';
- making_array_special = 1; /* XXX - should this check offset? */
- array_subscript_assignment = offset != 0;
- }
- else
- making_array_special = 0;
-#endif
-
- /* If we're in posix mode or not looking for a shell function (since
- shell function names don't have to be valid identifiers when the
- shell's not in posix mode), check whether or not the argument is a
- valid, well-formed shell identifier. */
- if ((posixly_correct || (flags_on & att_function) == 0) && legal_identifier (name) == 0)
- {
- sh_invalidid (name);
- assign_error++;
- NEXT_VARIABLE ();
- }
-
- /* If VARIABLE_CONTEXT has a non-zero value, then we are executing
- inside of a function. This means we should make local variables,
- not global ones. */
-
- /* XXX - this has consequences when we're making a local copy of a
- variable that was in the temporary environment. Watch out
- for this. */
- refvar = (SHELL_VAR *)NULL;
- if (variable_context && mkglobal == 0 && ((flags_on & att_function) == 0))
- {
-#if defined (ARRAY_VARS)
- if (flags_on & att_assoc)
- var = make_local_assoc_variable (name);
- else if ((flags_on & att_array) || making_array_special)
- var = make_local_array_variable (name, making_array_special);
- else
-#endif
- var = make_local_variable (name); /* sets att_invisible for new vars */
- if (var == 0)
- {
- any_failed++;
- NEXT_VARIABLE ();
- }
- }
- else
- var = (SHELL_VAR *)NULL;
-
- /* If we are declaring a function, then complain about it in some way.
- We don't let people make functions by saying `typeset -f foo=bar'. */
-
- /* There should be a way, however, to let people look at a particular
- function definition by saying `typeset -f foo'. */
-
- if (flags_on & att_function)
- {
- if (offset) /* declare -f [-rix] foo=bar */
- {
- builtin_error (_("cannot use `-f' to make functions"));
- free (name);
- return (EXECUTION_FAILURE);
- }
- else /* declare -f [-rx] name [name...] */
- {
- var = find_function (name);
-
- if (var)
- {
- if (readonly_p (var) && (flags_off & att_readonly))
- {
- builtin_error (_("%s: readonly function"), name);
- any_failed++;
- NEXT_VARIABLE ();
- }
-
- /* declare -[Ff] name [name...] */
- if (flags_on == att_function && flags_off == 0)
- {
-#if defined (DEBUGGER)
- if (nodefs && debugging_mode)
- {
- shell_fn = find_function_def (var->name);
- if (shell_fn)
- printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
- else
- printf ("%s\n", var->name);
- }
- else
-#endif /* DEBUGGER */
- {
- t = nodefs ? var->name
- : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
- printf ("%s\n", t);
- any_failed = sh_chkwrite (any_failed);
- }
- }
- else /* declare -[fF] -[rx] name [name...] */
- {
- VSETATTR (var, flags_on);
- VUNSETATTR (var, flags_off);
- }
- }
- else
- any_failed++;
- NEXT_VARIABLE ();
- }
- }
- else /* declare -[aAirx] name [name...] */
- {
- /* Non-null if we just created or fetched a local variable. */
- /* Here's what ksh93 seems to do. If we are modifying an existing
- nameref variable, we don't follow the nameref chain past the last
- nameref, and we set the nameref variable's value so future
- references to that variable will return the value of the variable
- we're assigning right now. */
- if (var == 0 && (flags_on & att_nameref))
- {
- /* See if we are trying to modify an existing nameref variable */
- var = mkglobal ? find_global_variable_last_nameref (name) : find_variable_last_nameref (name);
- if (var && nameref_p (var) == 0)
- var = 0;
- }
- /* However, if we're turning off the nameref attribute on an existing
- nameref variable, we first follow the nameref chain to the end,
- modify the value of the variable this nameref variable references,
- *CHANGING ITS VALUE AS A SIDE EFFECT* then turn off the nameref
- flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
- else if (var == 0 && (flags_off & att_nameref))
- {
- /* See if we are trying to modify an existing nameref variable */
- refvar = mkglobal ? find_global_variable_last_nameref (name) : find_variable_last_nameref (name);
- if (refvar && nameref_p (refvar) == 0)
- refvar = 0;
- if (refvar)
- var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar));
- }
-
- var_exists = var != 0;
- array_exists = var && (array_p (var) || assoc_p (var));
-
- if (var == 0)
- var = mkglobal ? find_global_variable (name) : find_variable (name);
-
- if (var == 0)
- {
-#if defined (ARRAY_VARS)
- if (flags_on & att_assoc)
- {
- var = make_new_assoc_variable (name);
- if (offset == 0 && no_invisible_vars == 0)
- VSETATTR (var, att_invisible);
- }
- else if ((flags_on & att_array) || making_array_special)
- {
- var = make_new_array_variable (name);
- if (offset == 0 && no_invisible_vars == 0)
- VSETATTR (var, att_invisible);
- }
- else
-#endif
- if (offset)
- var = mkglobal ? bind_global_variable (name, "", 0) : bind_variable (name, "", 0);
- else
- {
- var = mkglobal ? bind_global_variable (name, (char *)NULL, 0) : bind_variable (name, (char *)NULL, 0);
- if (no_invisible_vars == 0)
- VSETATTR (var, att_invisible);
- }
- }
- /* Can't take an existing array variable and make it a nameref */
- else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
- {
- builtin_error (_("%s: reference variable cannot be an array"), name);
- assign_error++;
- NEXT_VARIABLE ();
- }
- else if (flags_on & att_nameref)
- {
- /* ksh93 compat: turning on nameref attribute turns off -ilu */
- VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
- }
-
- /* Cannot use declare +r to turn off readonly attribute. */
- if (readonly_p (var) && (flags_off & att_readonly))
- {
- sh_readonly (name);
- any_failed++;
- NEXT_VARIABLE ();
- }
-
- /* Cannot use declare to assign value to readonly or noassign
- variable. */
- if ((readonly_p (var) || noassign_p (var)) && offset)
- {
- if (readonly_p (var))
- sh_readonly (name);
- assign_error++;
- NEXT_VARIABLE ();
- }
-
-#if defined (ARRAY_VARS)
- /* make declare a[2]=foo as similar to a[2]=foo as possible if
- a is already an array or assoc variable. */
- if (array_subscript_assignment && array_exists && (flags_on & (att_array|att_assoc)) == 0)
- simple_array_assign = 1;
- else if ((making_array_special || (flags_on & (att_array|att_assoc)) || array_p (var) || assoc_p (var)) && offset)
- {
- int vlen;
- vlen = STRLEN (value);
-/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
-#if 0 /* bash-4.4 */
- if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level <= 43 || (wflags & W_COMPASSIGN)))
-#else
-# if 0
- if (value[0] == '(' && value[vlen-1] == ')' && (wflags & W_COMPASSIGN))
-# else
- /* This is the code as in bash-4.3 */
- if (array_exists == 0 && value[0] == '(' && value[vlen-1] == ')')
-# endif
-#endif
- compound_array_assign = 1;
- else
- simple_array_assign = 1;
- }
-
- /* Cannot use declare +a name or declare +A name to remove an
- array variable. */
- if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
- {
- builtin_error (_("%s: cannot destroy array variables in this way"), name);
- any_failed++;
- NEXT_VARIABLE ();
- }
-
- if ((flags_on & att_array) && assoc_p (var))
- {
- builtin_error (_("%s: cannot convert associative to indexed array"), name);
- any_failed++;
- NEXT_VARIABLE ();
- }
- if ((flags_on & att_assoc) && array_p (var))
- {
- builtin_error (_("%s: cannot convert indexed to associative array"), name);
- any_failed++;
- NEXT_VARIABLE ();
- }
-
- /* declare -A name[[n]] makes name an associative array variable. */
- if (flags_on & att_assoc)
- {
- if (assoc_p (var) == 0)
- var = convert_var_to_assoc (var);
- }
- /* declare -a name[[n]] or declare name[n] makes name an indexed
- array variable. */
- else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
- var = convert_var_to_array (var);
-#endif /* ARRAY_VARS */
-
- /* XXX - we note that we are turning on nameref attribute and defer
- setting it until the assignment has been made so we don't do an
- inadvertent nameref lookup. Might have to do the same thing for
- flags_off&att_nameref. */
- /* XXX - ksh93 makes it an error to set a readonly nameref variable
- using a single typeset command. */
- onref = (flags_on & att_nameref);
- flags_on &= ~att_nameref;
-#if defined (ARRAY_VARS)
- if (array_p (var) || assoc_p (var)
- || (offset && compound_array_assign)
- || simple_array_assign)
- onref = 0; /* array variables may not be namerefs */
-#endif
-
- /* ksh93 seems to do this */
- offref = (flags_off & att_nameref);
- flags_off &= ~att_nameref;
-
- VSETATTR (var, flags_on);
- VUNSETATTR (var, flags_off);
-
-#if defined (ARRAY_VARS)
- aflags |= ASS_FORCE;
- if (offset && compound_array_assign)
- assign_array_var_from_string (var, value, aflags);
- else if (simple_array_assign && subscript_start)
- {
- /* declare [-aA] name[N]=value */
- *subscript_start = '['; /* ] */
- var = assign_array_element (name, value, 0); /* XXX - not aflags */
- *subscript_start = '\0';
- if (var == 0) /* some kind of assignment error */
- {
- assign_error++;
- flags_on |= onref;
- flags_off |= offref;
- NEXT_VARIABLE ();
- }
- }
- else if (simple_array_assign)
- {
- /* let bind_{array,assoc}_variable take care of this. */
- if (assoc_p (var))
- bind_assoc_variable (var, name, savestring ("0"), value, aflags);
- else
- bind_array_variable (name, 0, value, aflags);
- }
- else
-#endif
- /* bind_variable_value duplicates the essential internals of
- bind_variable() */
- if (offset)
- {
- if (onref)
- aflags |= ASS_NAMEREF;
- v = bind_variable_value (var, value, aflags);
- if (v == 0 && onref)
- {
- sh_invalidid (value);
- assign_error++;
- /* XXX - unset this variable? or leave it as normal var? */
- delete_var (var->name, mkglobal ? global_variables : shell_variables);
- NEXT_VARIABLE ();
- }
- }
-
- /* If we found this variable in the temporary environment, as with
- `var=value declare -x var', make sure it is treated identically
- to `var=value export var'. Do the same for `declare -r' and
- `readonly'. Preserve the attributes, except for att_tempvar. */
- /* XXX -- should this create a variable in the global scope, or
- modify the local variable flags? ksh93 has it modify the
- global scope.
- Need to handle case like in set_var_attribute where a temporary
- variable is in the same table as the function local vars. */
- if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
- {
- SHELL_VAR *tv;
- char *tvalue;
-
- tv = find_tempenv_variable (var->name);
- if (tv)
- {
- tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
- tv = bind_variable (var->name, tvalue, 0);
- tv->attributes |= var->attributes & ~att_tempvar;
- if (tv->context > 0)
- VSETATTR (tv, att_propagate);
- free (tvalue);
- }
- VSETATTR (var, att_propagate);
- }
- }
-
- /* Turn on nameref attribute we deferred above. */
- /* XXX - should we turn on the noassign attribute for consistency with
- ksh93 when we turn on the nameref attribute? */
- VSETATTR (var, onref);
- flags_on |= onref;
- VUNSETATTR (var, offref);
- flags_off |= offref;
- /* Yuck. ksh93 compatibility */
- if (refvar)
- VUNSETATTR (refvar, flags_off);
-
- stupidly_hack_special_variables (name);
-
- NEXT_VARIABLE ();
- }
-
- return (assign_error ? EX_BADASSIGN
- : ((any_failed == 0) ? EXECUTION_SUCCESS
- : EXECUTION_FAILURE));
-}
diff --git a/cross-build/cygwin32.cache.old b/cross-build/cygwin32.cache.old
deleted file mode 100644
index 640390fb..00000000
--- a/cross-build/cygwin32.cache.old
+++ /dev/null
@@ -1,42 +0,0 @@
-# This file is a shell script that caches the results of configure
-# tests for CYGWIN32 so they don't need to be done when cross-compiling.
-
-# AC_FUNC_GETPGRP should also define GETPGRP_VOID
-ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void='yes'}
-# AC_FUNC_SETVBUF_REVERSED should not define anything else
-ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed='no'}
-# on CYGWIN32, system calls do not restart
-ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
-bash_cv_sys_restartable_syscalls=${bash_cv_sys_restartable_syscalls='no'}
-
-# these may be necessary, but they are currently commented out
-#ac_cv_c_bigendian=${ac_cv_c_bigendian='no'}
-ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p='4'}
-ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
-ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
-ac_cv_sizeof_double=${ac_cv_sizeof_double='8'}
-
-bash_cv_dup2_broken=${bash_cv_dup2_broken='no'}
-bash_cv_pgrp_pipe=${bash_cv_pgrp_pipe='no'}
-bash_cv_type_rlimit=${bash_cv_type_rlimit='long'}
-bash_cv_decl_under_sys_siglist=${bash_cv_decl_under_sys_siglist='no'}
-bash_cv_under_sys_siglist=${bash_cv_under_sys_siglist='no'}
-bash_cv_sys_siglist=${bash_cv_sys_siglist='no'}
-bash_cv_opendir_not_robust=${bash_cv_opendir_not_robust='no'}
-bash_cv_getenv_redef=${bash_cv_getenv_redef='yes'}
-bash_cv_printf_declared=${bash_cv_printf_declared='yes'}
-bash_cv_ulimit_maxfds=${bash_cv_ulimit_maxfds='no'}
-bash_cv_getcwd_calls_popen=${bash_cv_getcwd_calls_popen='no'}
-bash_cv_must_reinstall_sighandlers=${bash_cv_must_reinstall_sighandlers='no'}
-bash_cv_job_control_missing=${bash_cv_job_control_missing='present'}
-bash_cv_sys_named_pipes=${bash_cv_sys_named_pipes='missing'}
-bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp='missing'}
-bash_cv_mail_dir=${bash_cv_mail_dir='unknown'}
-bash_cv_func_strcoll_broken=${bash_cv_func_strcoll_broken='no'}
-
-bash_cv_type_int32_t=${bash_cv_type_int32_t='int'}
-bash_cv_type_u_int32_t=${bash_cv_type_u_int32_t='int'}
-
-ac_cv_type_bits64_t=${ac_cv_type_bits64_t='no'}
-
-# end of cross-build/cygwin32.cache
diff --git a/doc/FAQ.orig b/doc/FAQ.orig
deleted file mode 100644
index 1cff3c8e..00000000
--- a/doc/FAQ.orig
+++ /dev/null
@@ -1,1745 +0,0 @@
-This is the Bash FAQ, version 3.24, for Bash version 2.05b.
-
-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://ftp.cwru.edu/pub/bash/FAQ
-
-The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
-
-----------
-Contents:
-
-Section A: The Basics
-
-A1) What is it?
-A2) What's the latest version?
-A3) Where can I get it?
-A4) On what machines will bash run?
-A5) Will bash run on operating systems other than Unix?
-A6) How can I build bash with gcc?
-A7) How can I make bash my login shell?
-A8) I just changed my login shell to bash, and now I can't FTP into my
- machine. Why not?
-A9) What's the `POSIX 1003.2 standard'?
-A10) What is the bash `posix mode'?
-
-Section B: The latest version
-
-B1) What's new in version 2.05b?
-B2) Are there any user-visible incompatibilities between bash-2.05b and
- bash-1.14.7?
-
-Section C: Differences from other Unix shells
-
-C1) How does bash differ from sh, the Bourne shell?
-C2) How does bash differ from the Korn shell, version ksh88?
-C3) 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?
-
-D1) Why does bash run a different version of `command' than
- `which command' says it will?
-D2) Why doesn't bash treat brace expansions exactly like csh?
-D3) Why doesn't bash have csh variable modifiers?
-D4) How can I make my csh aliases work when I convert to bash?
-D5) How can I pipe standard output and standard error from one command to
- another, like csh does with `|&'?
-D6) Now that I've converted from ksh to bash, are there equivalents to
- ksh features like autoloaded functions and the `whence' command?
-
-Section E: Why does bash do certain things the way it does?
-
-E1) Why is the bash builtin `test' slightly different from /bin/test?
-E2) Why does bash sometimes say `Broken pipe'?
-E3) When I have terminal escape sequences in my prompt, why does bash
- wrap lines at the wrong column?
-E4) 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?
-E5) 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?
-E6) Why doesn't a while or for loop get suspended when I type ^Z?
-E7) What about empty for loops in Makefiles?
-E8) Why does the arithmetic evaluation code complain about `08'?
-E9) Why does the pattern matching expression [A-Z]* match files beginning
- with every letter except `z'?
-E10) Why does `cd //' leave $PWD as `//'?
-E11) If I resize my xterm while another program is running, why doesn't bash
- notice the change?
-
-Section F: Things to watch out for on certain Unix versions
-
-F1) Why can't I use command line editing in my `cmdtool'?
-F2) I built bash on Solaris 2. Why do globbing expansions and filename
- completion chop off the first few characters of each filename?
-F3) Why does bash dump core after I interrupt username completion or
- `~user' tilde expansion on a machine running NIS?
-F4) I'm running SVR4.2. Why is the line erased every time I type `@'?
-F5) Why does bash report syntax errors when my C News scripts use a
- redirection before a subshell command?
-F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
-F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
- HP/UX 11.x?
-
-Section G: How can I get bash to do certain common things?
-
-G1) How can I get bash to read and display eight-bit characters?
-G2) How do I write a function `x' to replace builtin command `x', but
- still invoke the command from within the function?
-G3) How can I find the value of a shell variable whose name is the value
- of another shell variable?
-G4) How can I make the bash `time' reserved word print timing output that
- looks like the output from my system's /usr/bin/time?
-G5) How do I get the current directory into my prompt?
-G6) How can I rename "*.foo" to "*.bar"?
-G7) How can I translate a filename from uppercase to lowercase?
-G8) How can I write a filename expansion (globbing) pattern that will match
- all files in the current directory except "." and ".."?
-
-Section H: Where do I go from here?
-
-H1) How do I report bugs in bash, and where should I look for fixes and
- advice?
-H2) What kind of bash documentation is there?
-H3) What's coming in future versions?
-H4) What's on the bash `wish list'?
-H5) When will the next release appear?
-
-----------
-Section A: The Basics
-
-A1) 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.
-
-A2) What's the latest version?
-
-The latest version is 2.05b, first made available on Wednesday, 17
-July, 2002.
-
-A3) Where can I get it?
-
-Bash is the GNU project's shell, and so is available from the
-master GNU archive site, ftp.gnu.org, and its mirrors. The
-latest version is also available for FTP from ftp.cwru.edu.
-The following URLs tell how to get version 2.05b:
-
-ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
-
-Formatted versions of the documentation are available with the URLs:
-
-ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
-
-A4) 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.
-
-The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
-explains how to obtain binary versions of bash for most of the major
-commercial Unix systems.
-
-A5) Will bash run on operating systems other than Unix?
-
-Configuration specifics for Unix-like systems such as QNX and
-LynxOS are included in the distribution. Bash-2.05 and later
-versions should compile and run on Minix 2.0 (patches were
-contributed), but I don't believe anyone has built bash-2.x on
-earlier Minix versions yet.
-
-Bash has been ported to versions of Windows implementing the Win32
-programming interface. This includes Windows 95 and Windows NT.
-The port was done by Cygnus Solutions as part of their CYGWIN
-project. For more information about the project, look at the URLs
-
-http://www.cygwin.com/
-http://sourceware.cygnus.com/cygwin
-
-Cygnus originally ported bash-1.14.7, and that port was part of their
-early GNU-Win32 (the original name) releases. Cygnus has also done a
-port of bash-2.05 to the CYGWIN environment, and it is available as
-part of their current release.
-
-Bash-2.05b should require no local Cygnus changes to build and run under
-CYGWIN.
-
-The Cygnus port works only on Intel machines. There is a port of bash
-(I don't know which version) to the alpha/NT environment available from
-
-ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
-
-DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
-of the DJGPP project. For more information on the project, see
-
-http://www.delorie.com/djgpp/
-
-I have been told that the original DJGPP port was done by Daisuke Aoyama.
-
-Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
-is available for DJGPP V2. The files are available as:
-
-ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
-ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
-ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
-
-Mark has begun to work with bash-2.05, but I don't know the status.
-
-Ports of bash-1.12 and bash-2.0 are available for OS/2 from
-
-ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
-ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
-
-I haven't looked at either, but the second appears to be a binary-only
-distribution. Beware.
-
-I have received word that Bash (I'm not sure which version, but I
-believe that it's at least bash-2.02.1) is the standard shell on
-BeOS.
-
-A6) 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.
-
-A7) How can I make bash my login shell?
-
-Some machines let you use `chsh' to change your login shell. Other
-systems use `passwd -s' or `passwd -e'. 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, 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 first file bash tries to read initialization commands from when
-it is invoked as a login shell.
-
-Next, add a line similar to the above to ~/.profile:
-
- [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
- exec /usr/gnu/bin/bash --login
-
-This will cause login shells to replace themselves with bash running as
-a login shell. Once you have this working, you can copy your initialization
-code from ~/.profile to ~/.bash_profile.
-
-I have received word that the recipe supplied above is insufficient for
-machines running CDE. CDE has a maze of twisty little startup files, all
-slightly different.
-
-If you cannot change your login shell in the password file to bash, you
-will have to (apparently) live with CDE using the shell in the password
-file to run its startup scripts. If you have changed your shell to bash,
-there is code in the CDE startup files (on Solaris, at least) that attempts
-to do the right thing. It is, however, often broken, and may require that
-you use the $BASH_ENV trick described below.
-
-`dtterm' claims to use $SHELL as the default program to start, so if you
-can change $SHELL in the CDE startup files, you should be able to use bash
-in your terminal windows.
-
-Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
-to read your login shell's startup files. You may be able to use bash for
-the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
-well, but I have not tried this.
-
-You can use the above `exec' recipe to start bash when not logging in with
-CDE by testing the value of the DT variable:
-
- if [ -n "$DT" ]; then
- [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
- fi
-
-If CDE starts its shells non-interactively during login, the login shell
-startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
-To get around this problem, append a line similar to the following to your
-~/.dtprofile:
-
- BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
-
-and add the following line to the beginning of ~/.bash_profile:
-
- unset BASH_ENV
-
-A8) 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.
-
-A9) 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.
-
-The Open Group has made an older version of its Single Unix
-Specification (version 2), which is very similar to POSIX.2,
-available on the web at
-
-http://www.opengroup.org/onlinepubs/007908799/
-
-The Single Unix Specification, version 3, is available on the web at
-
-http://www.opengroup.org/onlinepubs/007904975/
-
-A10) 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 or
-'-o 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 POSIX in the bash distribution.
-They are also listed in a section in the Bash Reference Manual
-(from which that file is generated).
-
-Section B: The latest version
-
-B1) What's new in version 2.05b?
-
-The raison d'etre for bash-2.05b is to make a second intermediate
-release containing the first of the new features to be available
-in bash-3.0 and get feedback on those features before proceeding.
-The major new feature is multibyte character support in both Bash
-and Readline.
-
-Bash-2.05b contains the following new features (see the manual page for
-complete descriptions and the CHANGES and NEWS files in the bash-2.05b
-distribution):
-
-o support for multibyte characters has been added to both bash and readline
-
-o the DEBUG trap is now run *before* simple commands, ((...)) commands,
- [[...]] conditional commands, and for ((...)) loops
-
-o the shell now performs arithmetic in the largest integer size the machine
- supports (intmax_t)
-
-o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
- and inserts the result into the expanded prompt
-
-o there is a new `here-string' redirection operator: <<< word
-
-o when displaying variables, function attributes and definitions are shown
- separately, allowing them to be re-used as input (attempting to re-use
- the old output would result in syntax errors).
-
-o `read' has a new `-u fd' option to read from a specified file descriptor
-
-o the bash debugger in examples/bashdb has been modified to work with the
- new DEBUG trap semantics, the command set has been made more gdb-like,
- and the changes to $LINENO make debugging functions work better
-
-o the expansion of $LINENO inside a shell function is only relative to the
- function start if the shell is interactive -- if the shell is running a
- script, $LINENO expands to the line number in the script. This is as
- POSIX-2001 requires
-
-
-A short feature history dating from Bash-2.0:
-
-Bash-2.05a introduced the following new features:
-
-o The `printf' builtin has undergone major work
-
-o There is a new read-only `shopt' option: login_shell, which is set by
- login shells and unset otherwise
-
-o New `\A' prompt string escape sequence; expanding to time in 24-hour
- HH:MM format
-
-o New `-A group/-g' option to complete and compgen; goes group name
- completion
-
-o New [+-]O invocation option to set and unset `shopt' options at startup
-
-o ksh-like `ERR' trap
-
-o `for' loops now allow empty word lists after the `in' reserved word
-
-o new `hard' and `soft' arguments for the `ulimit' builtin
-
-o Readline can be configured to place the user at the same point on the line
- when retrieving commands from the history list
-
-o Readline can be configured to skip `hidden' files (filenames with a leading
- `.' on Unix) when performing completion
-
-Bash-2.05 introduced the following new features:
-
-o This version has once again reverted to using locales and strcoll(3) when
- processing pattern matching bracket expressions, as POSIX requires.
-o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
- per the new GNU coding standards.
-o The /dev/tcp and /dev/udp redirections now accept service names as well as
- port numbers.
-o `complete' and `compgen' now take a `-o value' option, which controls some
- of the aspects of that compspec. Valid values are:
-
- default - perform bash default completion if programmable
- completion produces no matches
- dirnames - perform directory name completion if programmable
- completion produces no matches
- filenames - tell readline that the compspec produces filenames,
- so it can do things like append slashes to
- directory names and suppress trailing spaces
-o A new loadable builtin, realpath, which canonicalizes and expands symlinks
- in pathname arguments.
-o When `set' is called without options, it prints function defintions in a
- way that allows them to be reused as input. This affects `declare' and
- `declare -p' as well. This only happens when the shell is not in POSIX
- mode, since POSIX.2 forbids this behavior.
-
-Bash-2.04 introduced the following new features:
-
-o Programmable word completion with the new `complete' and `compgen' builtins;
- examples are provided in examples/complete/complete-examples
-o `history' has a new `-d' option to delete a history entry
-o `bind' has a new `-x' option to bind key sequences to shell commands
-o The prompt expansion code has new `\j' and `\l' escape sequences
-o The `no_empty_cmd_completion' shell option, if enabled, inhibits
- command completion when TAB is typed on an empty line
-o `help' has a new `-s' option to print a usage synopsis
-o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
-o New ksh93-style arithmetic for command:
- for ((expr1 ; expr2; expr3 )); do list; done
-o `read' has new options: `-t', `-n', `-d', `-s'
-o The redirection code handles several filenames specially: /dev/fd/N,
- /dev/stdin, /dev/stdout, /dev/stderr
-o The redirection code now recognizes /dev/tcp/HOST/PORT and
- /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
- to the specified port on the specified host
-o The ${!prefix*} expansion has been implemented
-o A new FUNCNAME variable, which expands to the name of a currently-executing
- function
-o The GROUPS variable is no longer readonly
-o A new shopt `xpg_echo' variable, to control the behavior of echo with
- respect to backslash-escape sequences at runtime
-o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
-
-The version of Readline released with Bash-2.04, Readline-4.1, had several
-new features as well:
-
-o Parentheses matching is always compiled into readline, and controllable
- with the new `blink-matching-paren' variable
-o The history-search-forward and history-search-backward functions now leave
- point at the end of the line when the search string is empty, like
- reverse-search-history, and forward-search-history
-o A new function for applications: rl_on_new_line_with_prompt()
-o New variables for applications: rl_already_prompted, and rl_gnu_readline_p
-
-
-Bash-2.03 had very few new features, in keeping with the convention
-that odd-numbered releases provide mainly bug fixes. A number of new
-features were added to Readline, mostly at the request of the Cygnus
-folks.
-
-A new shopt option, `restricted_shell', so that startup files can test
- whether or not the shell was started in restricted mode
-Filename generation is now performed on the words between ( and ) in
- compound array assignments (this is really a bug fix)
-OLDPWD is now auto-exported, as POSIX.2 requires
-ENV and BASH_ENV are read-only variables in a restricted shell
-Bash may now be linked against an already-installed Readline library,
- as long as the Readline library is version 4 or newer
-All shells begun with the `--login' option will source the login shell
- startup files, even if the shell is not interactive
-
-There were lots of changes to the version of the Readline library released
-along with Bash-2.03. For a complete list of the changes, read the file
-CHANGES in the Bash-2.03 distribution.
-
-Bash-2.02 contained the following new features:
-
-a new version of malloc (based on the old GNU malloc code in previous
- bash versions) that is more page-oriented, more conservative
- with memory usage, does not `orphan' large blocks when they
- are freed, is usable on 64-bit machines, and has allocation
- checking turned on unconditionally
-POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
-POSIX.2-style globbing equivalence classes
-POSIX.2-style globbing collating symbols
-the ksh [[...]] extended conditional command
-the ksh egrep-style extended pattern matching operators
-a new `printf' builtin
-the ksh-like $(<filename) command substitution, which is equivalent to
- $(cat filename)
-new tilde prefixes that expand to directories from the directory stack
-new `**' arithmetic operator to do exponentiation
-case-insensitive globbing (filename expansion)
-menu completion a la tcsh
-`magic-space' history expansion function like tcsh
-the readline inputrc `language' has a new file inclusion directive ($include)
-
-Bash-2.01 contained only a few new features:
-
-new `GROUPS' builtin array variable containing the user's group list
-new bindable readline commands: history-and-alias-expand-line and
- alias-expand-line
-
-Bash-2.0 contained extensive changes and new features from bash-1.14.7.
-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
-
-B2) Are there any user-visible incompatibilities between bash-2.05b and
- bash-1.14.7?
-
-There are a few incompatibilities between version 1.14.7 and version 2.05b.
-They are detailed in the file COMPAT in the bash distribution. That file
-is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
-if if you find something that's not mentioned there.
-
-Section C: Differences from other Unix shells
-
-C1) 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
- [+-]O invocation option
- -l invocation option
- `!' 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
- arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
- new $'...' and $"..." quoting
- the $(...) form of command substitution
- the $(<filename) form of command substitution, equivalent to
- $(cat filename)
- the ${#param} parameter value length operator
- the ${!param} indirect parameter expansion operator
- the ${!param*} prefix expansion operator
- the ${param:offset[:length]} 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, GROUPS,
- PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
- SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
- auto_resume
- DEBUG trap
- ERR trap
- variable arrays with new compound assignment syntax
- redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
- prompt string special char translation and variable expansion
- auto-export 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 -d/-l/-p/-t.
- export -n/-f/-p/name=value, pwd -L/-P,
- read -e/-p/-a/-t/-n/-d/-s/-u,
- 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/-f/-P, 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
- the `[[...]]' extended conditional command
- process substitution
- aliases and alias/unalias builtins
- local variables in functions and `local' builtin
- readline and command-line editing with programmable completion
- command history and history/fc builtins
- csh-like history expansion
- other new bash builtins: bind, command, compgen, complete, builtin,
- declare/typeset, dirs, enable, fc, help,
- history, logout, popd, pushd, disown, shopt,
- printf
- exported functions
- filename generation when using output redirection (command >a*)
- POSIX.2-style globbing character classes
- POSIX.2-style globbing equivalence classes
- POSIX.2-style globbing collating symbols
- egrep-like extended pattern matching operators
- case-insensitive pattern matching and globbing
- variable assignments preceding commands affect only that command,
- even for builtins and functions
- posix mode
- redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
- /dev/tcp/host/port, /dev/udp/host/port
-
-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'
- $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.
- On Solaris 2.4 and earlier versions, sh goes into an infinite
- loop.)
- sh exits a script if any builtin fails; bash exits only if one of
- the POSIX.2 `special' builtins fails
-
-C2) How does bash differ from the Korn shell, version ksh88?
-
-Things bash has or uses that ksh88 does not:
- long invocation options
- [-+]O invocation option
- -l invocation option
- `!' reserved word
- arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
- arithmetic in largest machine-supported size (intmax_t)
- 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*} prefix expansion operator
- the ${param:offset[:length]} 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,
- GROUPS, FUNCNAME, histchars, auto_resume
- prompt expansion with backslash escapes and command substitution
- redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
- more extensive and extensible editing and programmable 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/-t/-n/-d/-s, 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, printf, complete, compgen
- `!' csh-style history expansion
- POSIX.2-style globbing character classes
- POSIX.2-style globbing equivalence classes
- POSIX.2-style globbing collating symbols
- egrep-like extended pattern matching operators
- case-insensitive pattern matching and globbing
- `**' arithmetic operator to do exponentiation
- redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
- arrays of unlimited size
- TMOUT is default timeout for `read' and `select'
-
-Things ksh88 has or uses that bash does not:
- tracked aliases (alias -t)
- variables: ERRNO, FPATH, EDITOR, VISUAL
- 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/var?prompt, set -A/-o gmacs/
- -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
- typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
- using environment to pass attributes of exported variables
- arithmetic evaluation done on arguments to some builtins
- reads .profile from $PWD when invoked as login shell
-
-Implementation differences:
- ksh runs last command of a pipeline in parent shell context
- 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
- bash waits for all commands in pipeline to exit before returning status
- emacs-mode editing has some slightly different key bindings
-
-C3) Which new features in ksh-93 are not in bash, and which are?
-
-New things in ksh-93 not in bash-2.05b:
- associative arrays
- floating point arithmetic and variables
- math library functions
- ${!name[sub]} name of subscript for associative array
- `.' 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, .sh.version,
- .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
- backreferences in pattern matching (\N)
- `&' operator in pattern lists for matching
- print -f (bash uses printf)
- `fc' has been renamed to `hist'
- `.' can execute shell functions
- exit statuses between 0 and 255
- set -o pipefail
- `+=' variable assignment operator
- FPATH and PATH mixing
- getopts -a
- -I invocation option
- DEBUG trap now executed before each simple command, instead of after
- printf %H, %P, %T, %Z modifiers, output base for %d
- lexical scoping for local variables in `ksh' functions
- no scoping for local variables in `POSIX' functions
-
-New things in ksh-93 present in bash-2.05b:
- [n]<&word- and [n]>&word- redirections (combination dup and close)
- for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
- ?:, ++, --, `expr1 , expr2' arithmetic operators
- expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
- ${!param*}
- 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)
- read -t/-d
- 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
- ENV processed only for interactive shells
-
-Section D: Why does bash do some things differently than other Unix shells?
-
-D1) Why does bash run a different version of `command' than
- `which command' says it will?
-
-On many systems, `which' is actually a csh script that assumes
-you're running csh. In tcsh, `which' and its cousin `where'
-are builtins. On other Unix systems, `which' is a perl script
-that uses the PATH environment variable.
-
-The csh script version 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. The bash `type' builtin does everything
-`which' does, and will report correct results for the running
-shell. If you're really wedded to the name `which', try adding
-the following function definition to your .bashrc:
-
- which()
- {
- builtin type "$@"
- }
-
-If you're moving from tcsh and would like to bring `where' along
-as well, use this function:
-
- where()
- {
- builtin type -a "$@"
- }
-
-D2) 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.
-
-D3) 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
-
-
-D4) 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/aliasconv.sh. Here is
-how you use it:
-
-Start csh in the normal way for you. (e.g., `csh')
-
-Pipe the output of `alias' through `aliasconv.sh', saving the
-results into `bash_aliases':
-
- alias | bash aliasconv.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.
-
-D5) 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.
-
-D6) 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 and ksh-93 that do not have direct bash
-equivalents. Most, however, can be emulated with very little trouble.
-
-ksh-88 feature Bash equivalent
--------------- ---------------
-compiled-in aliases set up aliases in .bashrc; some ksh aliases are
- bash builtins (hash, history, type)
-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
-
-ksh-93 feature Bash equivalent
--------------- ---------------
-sleep, getconf Bash has loadable versions in examples/loadables
-${.sh.version} $BASH_VERSION
-print -f printf
-hist alias hist=fc
-$HISTEDIT $FCEDIT
-
-Section E: How can I get bash to do certain things, and why does bash do
- things the way it does?
-
-E1) 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.
-
-E2) 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.
-
-You can build a version of bash that will not report SIGPIPE errors
-by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
-config-top.h.
-
-E3) 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.
-
-E4) 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. It affects all commands run in pipelines, not just
-simple calls to `read'. For example, piping a command's output
-into a `while' loop that repeatedly calls `read' will result in
-the same behavior.
-
-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.
-
-Some other user-supplied alternatives include:
-
-read A B C D << HERE
- $(IFS=.; echo $(/usr/local/bin/ipaddr))
-HERE
-
-and, where process substitution is available,
-
-read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
-
-E5) 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 modeled 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-xpg-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.
-
-There is a shell option, `xpg_echo', settable with `shopt', that will
-change the behavior of echo at runtime. Enabling this option turns
-on expansion of backslash-escape sequences.
-
-E6) 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.
-
-E7) What about empty for loops in Makefiles?
-
-It's fairly common to see constructs like this in automatically-generated
-Makefiles:
-
-SUBDIRS = @SUBDIRS@
-
- ...
-
-subdirs-clean:
- for d in ${SUBDIRS}; do \
- ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
- done
-
-When SUBDIRS is empty, this results in a command like this being passed to
-bash:
-
- for d in ; do
- ( cd $d && ${MAKE} ${MFLAGS} clean )
- done
-
-In versions of bash before bash-2.05a, this was a syntax error. If the
-reserved word `in' was present, a word must follow it before the semicolon
-or newline. The language in the manual page referring to the list of words
-being empty referred to the list after it is expanded. These versions of
-bash required that there be at least one word following the `in' when the
-construct was parsed.
-
-The idiomatic Makefile solution is something like:
-
-SUBDIRS = @SUBDIRS@
-
-subdirs-clean:
- subdirs=$SUBDIRS ; for d in $$subdirs; do \
- ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
- done
-
-The latest drafts of the updated POSIX standard have changed this: the
-word list is no longer required. Bash versions 2.05a and later accept
-the new syntax.
-
-E8) Why does the arithmetic evaluation code complain about `08'?
-
-The bash arithmetic evaluation code (used for `let', $(()), (()), and in
-other places), interprets a leading `0' in numeric constants as denoting
-an octal number, and a leading `0x' as denoting hexadecimal. This is
-in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
-arithmetic constants should be handled as signed long integers as defined
-by the ANSI/ISO C standard.
-
-The POSIX.2 interpretation committee has confirmed this:
-
-http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
-
-E9) Why does the pattern matching expression [A-Z]* match files beginning
- with every letter except `z'?
-
-Bash-2.03, Bash-2.05 and later versions honor the current locale setting
-when processing ranges within pattern matching bracket expressions ([A-Z]).
-This is what POSIX.2 and SUSv3/XPG6 specify.
-
-The behavior of the matcher in bash-2.05 and later versions depends on the
-current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
-result in the traditional behavior ([A-Z] matches all uppercase ASCII
-characters). Many other locales, including the en_US locale (the default
-on many US versions of Linux) collate the upper and lower case letters like
-this:
-
- AaBb...Zz
-
-which means that [A-Z] matches every letter except `z'. Others collate like
-
- aAbBcC...zZ
-
-which means that [A-Z] matches every letter except `a'.
-
-The portable way to specify upper case letters is [:upper:] instead of
-A-Z; lower case may be specified as [:lower:] instead of a-z.
-
-Look at the manual pages for setlocale(3), strcoll(3), and, if it is
-present, locale(1). If you have locale(1), you can use it to find
-your current locale information even if you do not have any of the
-LC_ variables set.
-
-My advice is to put
-
- export LC_COLLATE=C
-
-into /etc/profile and inspect any shell scripts run from cron for
-constructs like [A-Z]. This will prevent things like
-
- rm [A-Z]*
-
-from removing every file in the current directory except those beginning
-with `z' and still allow individual users to change the collation order.
-Users may put the above command into their own profiles as well, of course.
-
-E10) Why does `cd //' leave $PWD as `//'?
-
-POSIX.2, in its description of `cd', says that *three* or more leading
-slashes may be replaced with a single slash when canonicalizing the
-current working directory.
-
-This is, I presume, for historical compatibility. Certain versions of
-Unix, and early network file systems, used paths of the form
-//hostname/path to access `path' on server `hostname'.
-
-E11) If I resize my xterm while another program is running, why doesn't bash
- notice the change?
-
-This is another issue that deals with job control.
-
-The kernel maintains a notion of a current terminal process group. Members
-of this process group (processes whose process group ID is equal to the
-current terminal process group ID) receive terminal-generated signals like
-SIGWINCH. (For more details, see the JOB CONTROL section of the bash
-man page.)
-
-If a terminal is resized, the kernel sends SIGWINCH to each member of
-the terminal's current process group (the `foreground' process group).
-
-When bash is running with job control enabled, each pipeline (which may be
-a single command) is run in its own process group, different from bash's
-process group. This foreground process group receives the SIGWINCH; bash
-does not. Bash has no way of knowing that the terminal has been resized.
-
-There is a `checkwinsize' option, settable with the `shopt' builtin, that
-will cause bash to check the window size and adjust its idea of the
-terminal's dimensions each time a process stops or exits and returns control
-of the terminal to bash. Enable it with `shopt -s checkwinsize'.
-
-Section F: Things to watch out for on certain Unix versions
-
-F1) 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.
-
-F2) 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.
-
-F3) 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.
-
-F4) 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.
-
-F5) 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.
-
-This affects the mechanical transformation of commands that use `cat'
-to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
-comp.unix.shell). While most commands of the form
-
- cat file | command
-
-can be converted to `< file command', shell control structures such as
-loops and subshells require `command < file'.
-
-The file CWRU/sh-redir-hack in the bash-2.05a 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.
-
-F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
-
-The short answer is that Red Hat screwed up.
-
-The long answer is that they shipped an /etc/inputrc that only works
-for emacs mode editing, and then screwed all the vi users by setting
-INPUTRC to /etc/inputrc in /etc/profile.
-
-The short fix is to do one of the following: remove or rename
-/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
-but make sure you export it if you do), remove the assignment to
-INPUTRC from /etc/profile, add
-
- set keymap emacs
-
-to the beginning of /etc/inputrc, or bracket the key bindings in
-/etc/inputrc with these lines
-
- $if mode=emacs
- [...]
- $endif
-
-F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
- HP/UX 11.x?
-
-HP/UX's support for long double is imperfect at best.
-
-GCC will support it without problems, but the HP C library functions
-like strtold(3) and printf(3) don't actually work with long doubles.
-HP implemented a `long_double' type as a 4-element array of 32-bit
-ints, and that is what the library functions use. The ANSI C
-`long double' type is a 128-bit floating point scalar.
-
-The easiest fix, until HP fixes things up, is to edit the generated
-config.h and #undef the HAVE_LONG_DOUBLE line. After doing that,
-the compilation should complete successfully.
-
-Section G: How can I get bash to do certain common things?
-
-G1) 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.
-
-G2) 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.
-
-G3) How can I find the value of a shell variable whose name is the value
- of another shell variable?
-
-Versions of Bash newer than Bash-2.0 support 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 versions of bash later than bash-2.0,
-
- echo ${!#}
-
-does the same thing.
-
-This is not the same thing as ksh93 `nameref' variables, though the syntax
-is similar. I may add namerefs in a future bash version.
-
-G4) 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'
-
-G5) How do I get the current directory into my prompt?
-
-Bash provides a number of backslash-escape sequences which are expanded
-when the prompt string (PS1 or PS2) is displayed. The full list is in
-the manual page.
-
-The \w expansion gives the full pathname of the current directory, with
-a tilde (`~') substituted for the current value of $HOME. The \W
-expansion gives the basename of the current directory. To put the full
-pathname of the current directory into the path without any tilde
-subsitution, use $PWD. Here are some examples:
-
- PS1='\w$ ' # current directory with tilde
- PS1='\W$ ' # basename of current directory
- PS1='$PWD$ ' # full pathname of current directory
-
-The single quotes are important in the final example to prevent $PWD from
-being expanded when the assignment to PS1 is performed.
-
-G6) How can I rename "*.foo" to "*.bar"?
-
-Use the pattern removal functionality described in D3. The following `for'
-loop will do the trick:
-
- for f in *.foo; do
- mv $f ${f%foo}bar
- done
-
-G7) How can I translate a filename from uppercase to lowercase?
-
-The script examples/functions/lowercase, originally written by John DuBois,
-will do the trick. The converse is left as an exercise.
-
-G8) How can I write a filename expansion (globbing) pattern that will match
- all files in the current directory except "." and ".."?
-
-You must have set the `extglob' shell option using `shopt -s extglob' to use
-this:
-
- echo .!(.|) *
-
-A solution that works without extended globbing is given in the Unix Shell
-FAQ, posted periodically to comp.unix.shell.
-
-Section H: Where do I go from here?
-
-H1) 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@gnu.org, 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@gnu.org.
-
-H2) 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 tex`info format
-bashref.info an info 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, HTML, and ASCII files created from the above source are
-available in the documentation distribution.
-
-There is additional documentation available for anonymous FTP from host
-ftp.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'', and 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.
-
-A second edition of this book is available, published in January, 1998.
-The ISBN number is 1-56592-347-2. Look for it in the same fine bookstores
-or on the web.
-
-The GNU Bash Reference Manual has been published as a printed book by
-Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003). It covers
-bash-2.0 and is available from most online bookstores (see
-http://www.network-theory.co.uk/bash/manual/ for details). The publisher
-will donate $1 to the Free Software Foundation for each copy sold.
-
-H3) What's coming in future versions?
-
-These are features I hope to include in a future version of bash.
-
-a better bash debugger (a minimally-tested version is included with bash-2.05b)
-associative arrays
-co-processes, but with a new-style syntax that looks like function declaration
-
-H4) 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.
-
-breaking some of the shell functionality into embeddable libraries
-a module system like zsh's, using dynamic loading like builtins
-better internationalization using GNU `gettext'
-date-stamped command history
-a bash programmer's guide with a chapter on creating loadable builtins
-a better loadable interface to perl with access to the shell builtins and
- variables (contributions gratefully accepted)
-ksh93-like `nameref' variables
-ksh93-like `+=' variable assignment operator
-ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
- associated disipline functions
-Some of the new ksh93 pattern matching operators, like backreferencing
-
-H5) When will the next release appear?
-
-The next version will appear sometime in 2002. Never make predictions.
-
-
-This document is Copyright 1995-2003 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.
diff --git a/doc/aosa-bash.pdf.old b/doc/aosa-bash.pdf.old
deleted file mode 100644
index 006a7677..00000000
--- a/doc/aosa-bash.pdf.old
+++ /dev/null
Binary files differ
diff --git a/doc/bash.1~ b/doc/bash.1~
deleted file mode 100644
index 7e6e50bd..00000000
--- a/doc/bash.1~
+++ /dev/null
@@ -1,10471 +0,0 @@
-.\"
-.\" MAN PAGE COMMENTS to
-.\"
-.\" Chet Ramey
-.\" Case Western Reserve University
-.\" chet.ramey@case.edu
-.\"
-.\" Last Change: Fri Nov 28 18:21:13 EST 2014
-.\"
-.\" bash_builtins, strip all but Built-Ins section
-.if \n(zZ=1 .ig zZ
-.if \n(zY=1 .ig zY
-.TH BASH 1 "2014 November 28" "GNU Bash 4.3"
-.\"
-.\" There's some problem with having a `@'
-.\" in a tagged paragraph with the BSD man macros.
-.\" It has to do with `@' appearing in the }1 macro.
-.\" This is a problem on 4.3 BSD and Ultrix, but Sun
-.\" appears to have fixed it.
-.\" If you're seeing the characters
-.\" `@u-3p' appearing before the lines reading
-.\" `possible-hostname-completions
-.\" and `complete-hostname' down in READLINE,
-.\" then uncomment this redefinition.
-.\"
-.de }1
-.ds ]X \&\\*(]B\\
-.nr )E 0
-.if !"\\$1"" .nr )I \\$1n
-.}f
-.ll \\n(LLu
-.in \\n()Ru+\\n(INu+\\n()Iu
-.ti \\n(INu
-.ie !\\n()Iu+\\n()Ru-\w\\*(]Xu-3p \{\\*(]X
-.br\}
-.el \\*(]X\h|\\n()Iu+\\n()Ru\c
-.}f
-..
-.\"
-.\" File Name macro. This used to be `.PN', for Path Name,
-.\" but Sun doesn't seem to like that very much.
-.\"
-.de FN
-\fI\|\\$1\|\fP
-..
-.SH NAME
-bash \- GNU Bourne-Again SHell
-.SH SYNOPSIS
-.B bash
-[options]
-[command_string | file]
-.SH COPYRIGHT
-.if n Bash is Copyright (C) 1989-2014 by the Free Software Foundation, Inc.
-.if t Bash is Copyright \(co 1989-2014 by the Free Software Foundation, Inc.
-.SH DESCRIPTION
-.B Bash
-is an \fBsh\fR-compatible command language interpreter that
-executes commands read from the standard input or from a file.
-.B Bash
-also incorporates useful features from the \fIKorn\fP and \fIC\fP
-shells (\fBksh\fP and \fBcsh\fP).
-.PP
-.B Bash
-is intended to be a conformant implementation of the
-Shell and Utilities portion of the IEEE POSIX specification
-(IEEE Standard 1003.1).
-.B Bash
-can be configured to be POSIX-conformant by default.
-.SH OPTIONS
-All of the single-character shell options documented in the
-description of the \fBset\fR builtin command can be used as options
-when the shell is invoked.
-In addition, \fBbash\fR
-interprets the following options when it is invoked:
-.PP
-.PD 0
-.TP 10
-.B \-c
-If the
-.B \-c
-option is present, then commands are read from the first non-option argument
-.IR command_string .
-If there are arguments after the
-.IR command_string ,
-the first argument is assigned to
-.B $0
-and any remaining arguments are assigned to the positional parameters.
-The assignment to
-.B $0
-sets the name of the shell, which is used in warning and error messages.
-.TP
-.B \-i
-If the
-.B \-i
-option is present, the shell is
-.IR interactive .
-.TP
-.B \-l
-Make
-.B bash
-act as if it had been invoked as a login shell (see
-.SM
-.B INVOCATION
-below).
-.TP
-.B \-r
-If the
-.B \-r
-option is present, the shell becomes
-.I restricted
-(see
-.SM
-.B "RESTRICTED SHELL"
-below).
-.TP
-.B \-s
-If the
-.B \-s
-option is present, or if no arguments remain after option
-processing, then commands are read from the standard input.
-This option allows the positional parameters to be set
-when invoking an interactive shell.
-.TP
-.B \-D
-A list of all double-quoted strings preceded by \fB$\fP
-is printed on the standard output.
-These are the strings that
-are subject to language translation when the current locale
-is not \fBC\fP or \fBPOSIX\fP.
-This implies the \fB\-n\fP option; no commands will be executed.
-.TP
-.B [\-+]O [\fIshopt_option\fP]
-\fIshopt_option\fP is one of the shell options accepted by the
-\fBshopt\fP builtin (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-If \fIshopt_option\fP is present, \fB\-O\fP sets the value of that option;
-\fB+O\fP unsets it.
-If \fIshopt_option\fP is not supplied, the names and values of the shell
-options accepted by \fBshopt\fP are printed on the standard output.
-If the invocation option is \fB+O\fP, the output is displayed in a format
-that may be reused as input.
-.TP
-.B \-\-
-A
-.B \-\-
-signals the end of options and disables further option processing.
-Any arguments after the
-.B \-\-
-are treated as filenames and arguments. An argument of
-.B \-
-is equivalent to \fB\-\-\fP.
-.PD
-.PP
-.B Bash
-also interprets a number of multi-character options.
-These options must appear on the command line before the
-single-character options to be recognized.
-.PP
-.PD 0
-.TP
-.B \-\-debugger
-Arrange for the debugger profile to be executed before the shell
-starts.
-Turns on extended debugging mode (see the description of the
-.B extdebug
-option to the
-.B shopt
-builtin below).
-.TP
-.B \-\-dump\-po\-strings
-Equivalent to \fB\-D\fP, but the output is in the GNU \fIgettext\fP
-\fBpo\fP (portable object) file format.
-.TP
-.B \-\-dump\-strings
-Equivalent to \fB\-D\fP.
-.TP
-.B \-\-help
-Display a usage message on standard output and exit successfully.
-.TP
-\fB\-\-init\-file\fP \fIfile\fP
-.PD 0
-.TP
-\fB\-\-rcfile\fP \fIfile\fP
-.PD
-Execute commands from
-.I file
-instead of the standard personal initialization file
-.I ~/.bashrc
-if the shell is interactive (see
-.SM
-.B INVOCATION
-below).
-.TP
-.B \-\-login
-Equivalent to \fB\-l\fP.
-.TP
-.B \-\-noediting
-Do not use the GNU
-.B readline
-library to read command lines when the shell is interactive.
-.TP
-.B \-\-noprofile
-Do not read either the system-wide startup file
-.FN /etc/profile
-or any of the personal initialization files
-.IR ~/.bash_profile ,
-.IR ~/.bash_login ,
-or
-.IR ~/.profile .
-By default,
-.B bash
-reads these files when it is invoked as a login shell (see
-.SM
-.B INVOCATION
-below).
-.TP
-.B \-\-norc
-Do not read and execute the personal initialization file
-.I ~/.bashrc
-if the shell is interactive.
-This option is on by default if the shell is invoked as
-.BR sh .
-.TP
-.B \-\-posix
-Change the behavior of \fBbash\fP where the default operation differs
-from the POSIX standard to match the standard (\fIposix mode\fP).
-See
-.SM
-.B "SEE ALSO"
-below for a reference to a document that details how posix mode affects
-bash's behavior.
-.TP
-.B \-\-restricted
-The shell becomes restricted (see
-.SM
-.B "RESTRICTED SHELL"
-below).
-.TP
-.B \-\-verbose
-Equivalent to \fB\-v\fP.
-.TP
-.B \-\-version
-Show version information for this instance of
-.B bash
-on the standard output and exit successfully.
-.PD
-.SH ARGUMENTS
-If arguments remain after option processing, and neither the
-.B \-c
-nor the
-.B \-s
-option has been supplied, the first argument is assumed to
-be the name of a file containing shell commands.
-If
-.B bash
-is invoked in this fashion,
-.B $0
-is set to the name of the file, and the positional parameters
-are set to the remaining arguments.
-.B Bash
-reads and executes commands from this file, then exits.
-\fBBash\fP's exit status is the exit status of the last command
-executed in the script.
-If no commands are executed, the exit status is 0.
-An attempt is first made to open the file in the current directory, and,
-if no file is found, then the shell searches the directories in
-.SM
-.B PATH
-for the script.
-.SH INVOCATION
-A \fIlogin shell\fP is one whose first character of argument zero is a
-.BR \- ,
-or one started with the
-.B \-\-login
-option.
-.PP
-An \fIinteractive\fP shell is one started without non-option arguments
-and without the
-.B \-c
-option
-whose standard input and error are
-both connected to terminals (as determined by
-.IR isatty (3)),
-or one started with the
-.B \-i
-option.
-.SM
-.B PS1
-is set and
-.B $\-
-includes
-.B i
-if
-.B bash
-is interactive,
-allowing a shell script or a startup file to test this state.
-.PP
-The following paragraphs describe how
-.B bash
-executes its startup files.
-If any of the files exist but cannot be read,
-.B bash
-reports an error.
-Tildes are expanded in filenames as described below under
-.B "Tilde Expansion"
-in the
-.SM
-.B EXPANSION
-section.
-.PP
-When
-.B bash
-is invoked as an interactive login shell, or as a non-interactive shell
-with the \fB\-\-login\fP option, it first reads and
-executes commands from the file \fI/etc/profile\fP, if that
-file exists.
-After reading that file, it looks for \fI~/.bash_profile\fP,
-\fI~/.bash_login\fP, and \fI~/.profile\fP, in that order, and reads
-and executes commands from the first one that exists and is readable.
-The
-.B \-\-noprofile
-option may be used when the shell is started to inhibit this behavior.
-.PP
-When a login shell exits,
-.B bash
-reads and executes commands from the file \fI~/.bash_logout\fP, if it
-exists.
-.PP
-When an interactive shell that is not a login shell is started,
-.B bash
-reads and executes commands from \fI~/.bashrc\fP, if that file exists.
-This may be inhibited by using the
-.B \-\-norc
-option.
-The \fB\-\-rcfile\fP \fIfile\fP option will force
-.B bash
-to read and execute commands from \fIfile\fP instead of \fI~/.bashrc\fP.
-.PP
-When
-.B bash
-is started non-interactively, to run a shell script, for example, it
-looks for the variable
-.SM
-.B BASH_ENV
-in the environment, expands its value if it appears there, and uses the
-expanded value as the name of a file to read and execute.
-.B Bash
-behaves as if the following command were executed:
-.sp .5
-.RS
-.if t \f(CWif [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi\fP
-.if n if [ \-n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
-.RE
-.sp .5
-but the value of the
-.SM
-.B PATH
-variable is not used to search for the filename.
-.PP
-If
-.B bash
-is invoked with the name
-.BR sh ,
-it tries to mimic the startup behavior of historical versions of
-.B sh
-as closely as possible,
-while conforming to the POSIX standard as well.
-When invoked as an interactive login shell, or a non-interactive
-shell with the \fB\-\-login\fP option, it first attempts to
-read and execute commands from
-.I /etc/profile
-and
-.IR ~/.profile ,
-in that order.
-The
-.B \-\-noprofile
-option may be used to inhibit this behavior.
-When invoked as an interactive shell with the name
-.BR sh ,
-.B bash
-looks for the variable
-.SM
-.BR ENV ,
-expands its value if it is defined, and uses the
-expanded value as the name of a file to read and execute.
-Since a shell invoked as
-.B sh
-does not attempt to read and execute commands from any other startup
-files, the
-.B \-\-rcfile
-option has no effect.
-A non-interactive shell invoked with the name
-.B sh
-does not attempt to read any other startup files.
-When invoked as
-.BR sh ,
-.B bash
-enters
-.I posix
-mode after the startup files are read.
-.PP
-When
-.B bash
-is started in
-.I posix
-mode, as with the
-.B \-\-posix
-command line option, it follows the POSIX standard for startup files.
-In this mode, interactive shells expand the
-.SM
-.B ENV
-variable and commands are read and executed from the file
-whose name is the expanded value.
-No other startup files are read.
-.PP
-.B Bash
-attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP.
-If
-.B bash
-determines it is being run in this fashion, it reads and executes
-commands from \fI~/.bashrc\fP, if that file exists and is readable.
-It will not do this if invoked as \fBsh\fP.
-The
-.B \-\-norc
-option may be used to inhibit this behavior, and the
-.B \-\-rcfile
-option may be used to force another file to be read, but neither
-\fIrshd\fP nor \fIsshd\fP generally invoke the shell with those options
-or allow them to be specified.
-.PP
-If the shell is started with the effective user (group) id not equal to the
-real user (group) id, and the \fB\-p\fP option is not supplied, no startup
-files are read, shell functions are not inherited from the environment, the
-.SM
-.BR SHELLOPTS ,
-.SM
-.BR BASHOPTS ,
-.SM
-.BR CDPATH ,
-and
-.SM
-.B GLOBIGNORE
-variables, if they appear in the environment, are ignored,
-and the effective user id is set to the real user id.
-If the \fB\-p\fP option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
-.SH DEFINITIONS
-.PP
-The following definitions are used throughout the rest of this
-document.
-.PD 0
-.TP
-.B blank
-A space or tab.
-.TP
-.B word
-A sequence of characters considered as a single unit by the shell.
-Also known as a
-.BR token .
-.TP
-.B name
-A
-.I word
-consisting only of alphanumeric characters and underscores, and
-beginning with an alphabetic character or an underscore. Also
-referred to as an
-.BR identifier .
-.TP
-.B metacharacter
-A character that, when unquoted, separates words. One of the following:
-.br
-.RS
-.PP
-.if t \fB| & ; ( ) < > space tab\fP
-.if n \fB| & ; ( ) < > space tab\fP
-.RE
-.PP
-.TP
-.B control operator
-A \fItoken\fP that performs a control function. It is one of the following
-symbols:
-.RS
-.PP
-.if t \fB|| & && ; ;; ( ) | |& <newline>\fP
-.if n \fB|| & && ; ;; ( ) | |& <newline>\fP
-.RE
-.PD
-.SH "RESERVED WORDS"
-\fIReserved words\fP are words that have a special meaning to the shell.
-The following words are recognized as reserved when unquoted and either
-the first word of a simple command (see
-.SM
-.B SHELL GRAMMAR
-below) or the third word of a
-.B case
-or
-.B for
-command:
-.if t .RS
-.PP
-.B
-.if n ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
-.if t ! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]
-.if t .RE
-.SH "SHELL GRAMMAR"
-.SS Simple Commands
-.PP
-A \fIsimple command\fP is a sequence of optional variable assignments
-followed by \fBblank\fP-separated words and redirections, and
-terminated by a \fIcontrol operator\fP. The first word
-specifies the command to be executed, and is passed as argument zero.
-The remaining words are passed as arguments to the invoked command.
-.PP
-The return value of a \fIsimple command\fP is its exit status, or
-128+\fIn\^\fP if the command is terminated by signal
-.IR n .
-.SS Pipelines
-.PP
-A \fIpipeline\fP is a sequence of one or more commands separated by
-one of the control operators
-.B |
-or \fB|&\fP.
-The format for a pipeline is:
-.RS
-.PP
-[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
-.RE
-.PP
-The standard output of
-.I command
-is connected via a pipe to the standard input of
-.IR command2 .
-This connection is performed before any redirections specified by the
-command (see
-.SM
-.B REDIRECTION
-below).
-If \fB|&\fP is used, \fIcommand\fP's standard error, in addition to its
-standard output, is connected to
-\fIcommand2\fP's standard input through the pipe;
-it is shorthand for \fB2>&1 |\fP.
-This implicit redirection of the standard error to the standard output is
-performed after any redirections specified by the command.
-.PP
-The return status of a pipeline is the exit status of the last
-command, unless the \fBpipefail\fP option is enabled.
-If \fBpipefail\fP is enabled, the pipeline's return status is the
-value of the last (rightmost) command to exit with a non-zero status,
-or zero if all commands exit successfully.
-If the reserved word
-.B !
-precedes a pipeline, the exit status of that pipeline is the logical
-negation of the exit status as described above.
-The shell waits for all commands in the pipeline to
-terminate before returning a value.
-.PP
-If the
-.B time
-reserved word precedes a pipeline, the elapsed as well as user and
-system time consumed by its execution are reported when the pipeline
-terminates.
-The \fB\-p\fP option changes the output format to that specified by POSIX.
-When the shell is in \fIposix mode\fP, it does not recognize
-\fBtime\fP as a reserved word if the next token begins with a `-'.
-The
-.SM
-.B TIMEFORMAT
-variable may be set to a format string that specifies how the timing
-information should be displayed; see the description of
-.SM
-.B TIMEFORMAT
-under
-.B "Shell Variables"
-below.
-.PP
-When the shell is in \fIposix mode\fP, \fBtime\fP
-may be followed by a newline. In this case, the shell displays the
-total user and system time consumed by the shell and its children.
-The
-.SM
-.B TIMEFORMAT
-variable may be used to specify the format of
-the time information.
-.PP
-Each command in a pipeline is executed as a separate process (i.e., in a
-subshell).
-.SS Lists
-.PP
-A \fIlist\fP is a sequence of one or more pipelines separated by one
-of the operators
-.BR ; ,
-.BR & ,
-.BR && ,
-or
-.BR || ,
-and optionally terminated by one of
-.BR ; ,
-.BR & ,
-or
-.BR <newline> .
-.PP
-Of these list operators,
-.B &&
-and
-.B ||
-have equal precedence, followed by
-.B ;
-and
-.BR & ,
-which have equal precedence.
-.PP
-A sequence of one or more newlines may appear in a \fIlist\fP instead
-of a semicolon to delimit commands.
-.PP
-If a command is terminated by the control operator
-.BR & ,
-the shell executes the command in the \fIbackground\fP
-in a subshell. The shell does not wait for the command to
-finish, and the return status is 0. Commands separated by a
-.B ;
-are executed sequentially; the shell waits for each
-command to terminate in turn. The return status is the
-exit status of the last command executed.
-.PP
-AND and OR lists are sequences of one of more pipelines separated by the
-\fB&&\fP and \fB||\fP control operators, respectively.
-AND and OR lists are executed with left associativity.
-An AND list has the form
-.RS
-.PP
-\fIcommand1\fP \fB&&\fP \fIcommand2\fP
-.RE
-.PP
-.I command2
-is executed if, and only if,
-.I command1
-returns an exit status of zero.
-.PP
-An OR list has the form
-.RS
-.PP
-\fIcommand1\fP \fB||\fP \fIcommand2\fP
-.PP
-.RE
-.PP
-.I command2
-is executed if and only if
-.I command1
-returns a non-zero exit status.
-The return status of
-AND and OR lists is the exit status of the last command
-executed in the list.
-.SS Compound Commands
-.PP
-A \fIcompound command\fP is one of the following.
-In most cases a \fIlist\fP in a command's description may be separated from
-the rest of the command by one or more newlines, and may be followed by a
-newline in place of a semicolon.
-.TP
-(\fIlist\fP)
-\fIlist\fP is executed in a subshell environment (see
-.SM
-\fBCOMMAND EXECUTION ENVIRONMENT\fP
-below).
-Variable assignments and builtin
-commands that affect the shell's environment do not remain in effect
-after the command completes. The return status is the exit status of
-\fIlist\fP.
-.TP
-{ \fIlist\fP; }
-\fIlist\fP is simply executed in the current shell environment.
-\fIlist\fP must be terminated with a newline or semicolon.
-This is known as a \fIgroup command\fP.
-The return status is the exit status of
-\fIlist\fP.
-Note that unlike the metacharacters \fB(\fP and \fB)\fP, \fB{\fP and
-\fB}\fP are \fIreserved words\fP and must occur where a reserved
-word is permitted to be recognized. Since they do not cause a word
-break, they must be separated from \fIlist\fP by whitespace or another
-shell metacharacter.
-.TP
-((\fIexpression\fP))
-The \fIexpression\fP is evaluated according to the rules described
-below under
-.SM
-.BR "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
-\fBlet "\fIexpression\fP"\fR.
-.TP
-\fB[[\fP \fIexpression\fP \fB]]\fP
-Return a status of 0 or 1 depending on the evaluation of
-the conditional expression \fIexpression\fP.
-Expressions are composed of the primaries described below under
-.SM
-.BR "CONDITIONAL EXPRESSIONS" .
-Word splitting and pathname expansion are not performed on the words
-between the \fB[[\fP and \fB]]\fP; tilde expansion,
-parameter and variable expansion,
-arithmetic expansion, command substitution, process
-substitution, and quote removal are performed.
-Conditional operators such as \fB\-f\fP must be unquoted to be recognized
-as primaries.
-.if t .sp 0.5
-.if n .sp 1
-When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort
-lexicographically using the current locale.
-.if t .sp 0.5
-.if n .sp 1
-When the \fB==\fP and \fB!=\fP operators are used, the string to the
-right of the operator is considered a pattern and matched according
-to the rules described below under \fBPattern Matching\fP,
-as if the \fBextglob\fP shell option were enabled.
-The \fB=\fP operator is equivalent to \fB==\fP.
-If the
-.B nocasematch
-shell option is enabled, the match is performed without regard to the case
-of alphabetic characters.
-The return value is 0 if the string matches (\fB==\fP) or does not match
-(\fB!=\fP) the pattern, and 1 otherwise.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-.if t .sp 0.5
-.if n .sp 1
-An additional binary operator, \fB=~\fP, is available, with the same
-precedence as \fB==\fP and \fB!=\fP.
-When it is used, the string to the right of the operator is considered
-an extended regular expression and matched accordingly (as in \fIregex\fP(3)).
-The return value is 0 if the string matches
-the pattern, and 1 otherwise.
-If the regular expression is syntactically incorrect, the conditional
-expression's return value is 2.
-If the
-.B nocasematch
-shell option is enabled, the match is performed without regard to the case
-of alphabetic characters.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
-If the pattern is stored in a shell variable, quoting the variable
-expansion forces the entire pattern to be matched as a string.
-Substrings matched by parenthesized subexpressions within the regular
-expression are saved in the array variable
-.SM
-.BR BASH_REMATCH .
-The element of
-.SM
-.B BASH_REMATCH
-with index 0 is the portion of the string
-matching the entire regular expression.
-The element of
-.SM
-.B BASH_REMATCH
-with index \fIn\fP is the portion of the
-string matching the \fIn\fPth parenthesized subexpression.
-.if t .sp 0.5
-.if n .sp 1
-Expressions may be combined using the following operators, listed
-in decreasing order of precedence:
-.if t .sp 0.5
-.if n .sp 1
-.RS
-.PD 0
-.TP
-.B ( \fIexpression\fP )
-Returns the value of \fIexpression\fP.
-This may be used to override the normal precedence of operators.
-.TP
-.B ! \fIexpression\fP
-True if
-.I expression
-is false.
-.TP
-\fIexpression1\fP \fB&&\fP \fIexpression2\fP
-True if both
-.I expression1
-and
-.I expression2
-are true.
-.TP
-\fIexpression1\fP \fB||\fP \fIexpression2\fP
-True if either
-.I expression1
-or
-.I expression2
-is true.
-.PD
-.LP
-The \fB&&\fP and \fB||\fP
-operators do not evaluate \fIexpression2\fP if the value of
-\fIexpression1\fP is sufficient to determine the return value of
-the entire conditional expression.
-.RE
-.TP
-\fBfor\fP \fIname\fP [ [ \fBin\fP [ \fIword ...\fP ] ] ; ] \fBdo\fP \fIlist\fP ; \fBdone\fP
-The list of words following \fBin\fP is expanded, generating a list
-of items.
-The variable \fIname\fP is set to each element of this list
-in turn, and \fIlist\fP is executed each time.
-If the \fBin\fP \fIword\fP is omitted, the \fBfor\fP command executes
-\fIlist\fP once for each positional parameter that is set (see
-.SM
-.B PARAMETERS
-below).
-The return status is the exit status of the last command that executes.
-If the expansion of the items following \fBin\fP results in an empty
-list, no commands are executed, and the return status is 0.
-.TP
-\fBfor\fP (( \fIexpr1\fP ; \fIexpr2\fP ; \fIexpr3\fP )) ; \fBdo\fP \fIlist\fP ; \fBdone\fP
-First, the arithmetic expression \fIexpr1\fP is evaluated according
-to the rules described below under
-.SM
-.BR "ARITHMETIC EVALUATION" .
-The arithmetic expression \fIexpr2\fP is then evaluated repeatedly
-until it evaluates to zero.
-Each time \fIexpr2\fP evaluates to a non-zero value, \fIlist\fP is
-executed and the arithmetic expression \fIexpr3\fP is evaluated.
-If any expression is omitted, it behaves as if it evaluates to 1.
-The return value is the exit status of the last command in \fIlist\fP
-that is executed, or false if any of the expressions is invalid.
-.TP
-\fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
-The list of words following \fBin\fP is expanded, generating a list
-of items. The set of expanded words is printed on the standard
-error, each preceded by a number. If the \fBin\fP
-\fIword\fP is omitted, the positional parameters are printed (see
-.SM
-.B PARAMETERS
-below). The
-.SM
-.B PS3
-prompt is then displayed and a line read from the standard input.
-If the line consists of a number corresponding to one of
-the displayed words, then the value of
-.I name
-is set to that word. If the line is empty, the words and prompt
-are displayed again. If EOF is read, the command completes. Any
-other value read causes
-.I name
-to be set to null. The line read is saved in the variable
-.SM
-.BR REPLY .
-The
-.I list
-is executed after each selection until a
-.B break
-command is executed.
-The exit status of
-.B select
-is the exit status of the last command executed in
-.IR list ,
-or zero if no commands were executed.
-.TP
-\fBcase\fP \fIword\fP \fBin\fP [ [(] \fIpattern\fP [ \fB|\fP \fIpattern\fP ] \
-... ) \fIlist\fP ;; ] ... \fBesac\fP
-A \fBcase\fP command first expands \fIword\fP, and tries to match
-it against each \fIpattern\fP in turn, using the same matching rules
-as for pathname expansion (see
-.B Pathname Expansion
-below).
-The \fIword\fP is expanded using tilde
-expansion, parameter and variable expansion, arithmetic expansion,
-command substitution, process substitution and quote removal.
-Each \fIpattern\fP examined is expanded using tilde
-expansion, parameter and variable expansion, arithmetic expansion,
-command substitution, and process substitution.
-If the
-.B nocasematch
-shell option is enabled, the match is performed without regard to the case
-of alphabetic characters.
-When a match is found, the corresponding \fIlist\fP is executed.
-If the \fB;;\fP operator is used, no subsequent matches are attempted after
-the first pattern match.
-Using \fB;&\fP in place of \fB;;\fP causes execution to continue with
-the \fIlist\fP associated with the next set of patterns.
-Using \fB;;&\fP in place of \fB;;\fP causes the shell to test the next
-pattern list in the statement, if any, and execute any associated \fIlist\fP
-on a successful match.
-The exit status is zero if no
-pattern matches. Otherwise, it is the exit status of the
-last command executed in \fIlist\fP.
-.TP
-\fBif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; \
-[ \fBelif\fP \fIlist\fP; \fBthen\fP \fIlist\fP; ] ... \
-[ \fBelse\fP \fIlist\fP; ] \fBfi\fP
-The
-.B if
-.I list
-is executed. If its exit status is zero, the
-\fBthen\fP \fIlist\fP is executed. Otherwise, each \fBelif\fP
-\fIlist\fP is executed in turn, and if its exit status is zero,
-the corresponding \fBthen\fP \fIlist\fP is executed and the
-command completes. Otherwise, the \fBelse\fP \fIlist\fP is
-executed, if present. The exit status is the exit status of the
-last command executed, or zero if no condition tested true.
-.TP
-\fBwhile\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP
-.PD 0
-.TP
-\fBuntil\fP \fIlist-1\fP; \fBdo\fP \fIlist-2\fP; \fBdone\fP
-.PD
-The \fBwhile\fP command continuously executes the list
-\fIlist-2\fP as long as the last command in the list \fIlist-1\fP returns
-an exit status of zero. The \fBuntil\fP command is identical
-to the \fBwhile\fP command, except that the test is negated;
-.I list-2
-is executed as long as the last command in
-.I list-1
-returns a non-zero exit status.
-The exit status of the \fBwhile\fP and \fBuntil\fP commands
-is the exit status
-of the last command executed in \fIlist-2\fP, or zero if
-none was executed.
-.SS Coprocesses
-.PP
-A \fIcoprocess\fP is a shell command preceded by the \fBcoproc\fP reserved
-word.
-A coprocess is executed asynchronously in a subshell, as if the command
-had been terminated with the \fB&\fP control operator, with a two-way pipe
-established between the executing shell and the coprocess.
-.PP
-The format for a coprocess is:
-.RS
-.PP
-\fBcoproc\fP [\fINAME\fP] \fIcommand\fP [\fIredirections\fP]
-.RE
-.PP
-This creates a coprocess named \fINAME\fP.
-If \fINAME\fP is not supplied, the default name is \fBCOPROC\fP.
-\fINAME\fP must not be supplied if \fIcommand\fP is a \fIsimple
-command\fP (see above); otherwise, it is interpreted as the first word
-of the simple command.
-When the coprocess is executed, the shell creates an array variable (see
-.B Arrays
-below) named \fINAME\fP in the context of the executing shell.
-The standard output of
-.I command
-is connected via a pipe to a file descriptor in the executing shell,
-and that file descriptor is assigned to \fINAME\fP[0].
-The standard input of
-.I command
-is connected via a pipe to a file descriptor in the executing shell,
-and that file descriptor is assigned to \fINAME\fP[1].
-This pipe is established before any redirections specified by the
-command (see
-.SM
-.B REDIRECTION
-below).
-The file descriptors can be utilized as arguments to shell commands
-and redirections using standard word expansions.
-The file descriptors are not available in subshells.
-The process ID of the shell spawned to execute the coprocess is
-available as the value of the variable \fINAME\fP_PID.
-The \fBwait\fP
-builtin command may be used to wait for the coprocess to terminate.
-.PP
-Since the coprocess is created as an asynchronous command,
-the \fBcoproc\fP command always returns success.
-The return status of a coprocess is the exit status of \fIcommand\fP.
-.SS Shell Function Definitions
-.PP
-A shell function is an object that is called like a simple command and
-executes a compound command with a new set of positional parameters.
-Shell functions are declared as follows:
-.TP
-\fIname\fP () \fIcompound\-command\fP [\fIredirection\fP]
-.PD 0
-.TP
-\fBfunction\fP \fIname\fP [()] \fIcompound\-command\fP [\fIredirection\fP]
-.PD
-This defines a function named \fIname\fP.
-The reserved word \fBfunction\fP is optional.
-If the \fBfunction\fP reserved word is supplied, the parentheses are optional.
-The \fIbody\fP of the function is the compound command
-.I compound\-command
-(see \fBCompound Commands\fP above).
-That command is usually a \fIlist\fP of commands between { and }, but
-may be any command listed under \fBCompound Commands\fP above,
-with one exception: If the \fBfunction\fP reserved word is used, but the
-parentheses are not supplied, the braces are required.
-\fIcompound\-command\fP is executed whenever \fIname\fP is specified as the
-name of a simple command.
-When in \fIposix mode\fP, \fIname\fP may not be the name of one of the
-POSIX \fIspecial builtins\fP.
-Any redirections (see
-.SM
-.B REDIRECTION
-below) specified when a function is defined are performed
-when the function is executed.
-The exit status of a function definition is zero unless a syntax error
-occurs or a readonly function with the same name already exists.
-When executed, the exit status of a function is the exit status of the
-last command executed in the body. (See
-.SM
-.B FUNCTIONS
-below.)
-.SH COMMENTS
-In a non-interactive shell, or an interactive shell in which the
-.B interactive_comments
-option to the
-.B shopt
-builtin is enabled (see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below), a word beginning with
-.B #
-causes that word and all remaining characters on that line to
-be ignored. An interactive shell without the
-.B interactive_comments
-option enabled does not allow comments. The
-.B interactive_comments
-option is on by default in interactive shells.
-.SH QUOTING
-\fIQuoting\fP is used to remove the special meaning of certain
-characters or words to the shell. Quoting can be used to
-disable special treatment for special characters, to prevent
-reserved words from being recognized as such, and to prevent
-parameter expansion.
-.PP
-Each of the \fImetacharacters\fP listed above under
-.SM
-.B DEFINITIONS
-has special meaning to the shell and must be quoted if it is to
-represent itself.
-.PP
-When the command history expansion facilities are being used
-(see
-.SM
-.B HISTORY EXPANSION
-below), the
-\fIhistory expansion\fP character, usually \fB!\fP, must be quoted
-to prevent history expansion.
-.PP
-There are three quoting mechanisms: the
-.IR "escape character" ,
-single quotes, and double quotes.
-.PP
-A non-quoted backslash (\fB\e\fP) is the
-.IR "escape character" .
-It preserves the literal value of the next character that follows,
-with the exception of <newline>. If a \fB\e\fP<newline> pair
-appears, and the backslash is not itself quoted, the \fB\e\fP<newline>
-is treated as a line continuation (that is, it is removed from the
-input stream and effectively ignored).
-.PP
-Enclosing characters in single quotes preserves the literal value
-of each character within the quotes. A single quote may not occur
-between single quotes, even when preceded by a backslash.
-.PP
-Enclosing characters in double quotes preserves the literal value
-of all characters within the quotes, with the exception of
-.BR $ ,
-.BR \` ,
-.BR \e ,
-and, when history expansion is enabled,
-.BR ! .
-The characters
-.B $
-and
-.B \`
-retain their special meaning within double quotes. The backslash
-retains its special meaning only when followed by one of the following
-characters:
-.BR $ ,
-.BR \` ,
-\^\fB"\fP\^,
-.BR \e ,
-or
-.BR <newline> .
-A double quote may be quoted within double quotes by preceding it with
-a backslash.
-If enabled, history expansion will be performed unless an
-.B !
-appearing in double quotes is escaped using a backslash.
-The backslash preceding the
-.B !
-is not removed.
-.PP
-The special parameters
-.B *
-and
-.B @
-have special meaning when in double
-quotes (see
-.SM
-.B PARAMETERS
-below).
-.PP
-Words of the form \fB$\fP\(aq\fIstring\fP\(aq are treated specially. The
-word expands to \fIstring\fP, with backslash-escaped characters replaced
-as specified by the ANSI C standard. Backslash escape sequences, if
-present, are decoded as follows:
-.RS
-.PD 0
-.TP
-.B \ea
-alert (bell)
-.TP
-.B \eb
-backspace
-.TP
-.B \ee
-.TP
-.B \eE
-an escape character
-.TP
-.B \ef
-form feed
-.TP
-.B \en
-new line
-.TP
-.B \er
-carriage return
-.TP
-.B \et
-horizontal tab
-.TP
-.B \ev
-vertical tab
-.TP
-.B \e\e
-backslash
-.TP
-.B \e\(aq
-single quote
-.TP
-.B \e\(dq
-double quote
-.TP
-.B \e\fInnn\fP
-the eight-bit character whose value is the octal value \fInnn\fP
-(one to three digits)
-.TP
-.B \ex\fIHH\fP
-the eight-bit character whose value is the hexadecimal value \fIHH\fP
-(one or two hex digits)
-.TP
-.B \eu\fIHHHH\fP
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-\fIHHHH\fP (one to four hex digits)
-.TP
-.B \eU\fIHHHHHHHH\fP
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-\fIHHHHHHHH\fP (one to eight hex digits)
-.TP
-.B \ec\fIx\fP
-a control-\fIx\fP character
-.PD
-.RE
-.LP
-The expanded result is single-quoted, as if the dollar sign had
-not been present.
-.PP
-A double-quoted string preceded by a dollar sign (\fB$\fP\(dq\fIstring\fP\(dq)
-will cause the string to be translated according to the current locale.
-If the current locale is \fBC\fP or \fBPOSIX\fP, the dollar sign
-is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
-.SH PARAMETERS
-A
-.I parameter
-is an entity that stores values.
-It can be a
-.IR name ,
-a number, or one of the special characters listed below under
-.BR "Special Parameters" .
-A
-.I variable
-is a parameter denoted by a
-.IR name .
-A variable has a \fIvalue\fP and zero or more \fIattributes\fP.
-Attributes are assigned using the
-.B declare
-builtin command (see
-.B declare
-below in
-.SM
-.BR "SHELL BUILTIN COMMANDS" ).
-.PP
-A parameter is set if it has been assigned a value. The null string is
-a valid value. Once a variable is set, it may be unset only by using
-the
-.B unset
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.PP
-A
-.I variable
-may be assigned to by a statement of the form
-.RS
-.PP
-\fIname\fP=[\fIvalue\fP]
-.RE
-.PP
-If
-.I value
-is not given, the variable is assigned the null string. All
-.I values
-undergo tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote
-removal (see
-.SM
-.B EXPANSION
-below). If the variable has its
-.B integer
-attribute set, then
-.I value
-is evaluated as an arithmetic expression even if the $((...)) expansion is
-not used (see
-.B "Arithmetic Expansion"
-below).
-Word splitting is not performed, with the exception
-of \fB"$@"\fP as explained below under
-.BR "Special Parameters" .
-Pathname expansion is not performed.
-Assignment statements may also appear as arguments to the
-.BR alias ,
-.BR declare ,
-.BR typeset ,
-.BR export ,
-.BR readonly ,
-and
-.B local
-builtin commands (\fIdeclaration\fP commands).
-When in \fIposix mode\fP, these builtins may appear in a command after
-one or more instances of the \fBcommand\fP builtin and retain these
-assignment statement properties.
-.PP
-In the context where an assignment statement is assigning a value
-to a shell variable or array index, the += operator can be used to
-append to or add to the variable's previous value.
-This includes arguments to builtin commands such as \fBdeclare\fP that
-accept assignment statements (\fIdeclaration\fP commands).
-When += is applied to a variable for which the \fIinteger\fP attribute has been
-set, \fIvalue\fP is evaluated as an arithmetic expression and added to the
-variable's current value, which is also evaluated.
-When += is applied to an array variable using compound assignment (see
-.B Arrays
-below), the
-variable's value is not unset (as it is when using =), and new values are
-appended to the array beginning at one greater than the array's maximum index
-(for indexed arrays) or added as additional key\-value pairs in an
-associative array.
-When applied to a string-valued variable, \fIvalue\fP is expanded and
-appended to the variable's value.
-.PP
-A variable can be assigned the \fInameref\fP attribute using the
-\fB\-n\fP option to the \fBdeclare\fP or \fBlocal\fP builtin commands
-(see the descriptions of \fBdeclare\fP and \fBlocal\fP below)
-to create a \fInameref\fP, or a reference to another variable.
-This allows variables to be manipulated indirectly.
-Whenever the nameref variable is referenced, assigned to, unset, or has
-its attributes modified (other than the \fInameref\fP attribute itself), the
-operation is actually performed on the variable specified by the nameref
-variable's value.
-A nameref is commonly used within shell functions to refer to a variable
-whose name is passed as an argument to the function.
-For instance, if a variable name is passed to a shell function as its first
-argument, running
-.sp .5
-.RS
-.if t \f(CWdeclare -n ref=$1\fP
-.if n declare -n ref=$1
-.RE
-.sp .5
-inside the function creates a nameref variable \fBref\fP whose value is
-the variable name passed as the first argument.
-References and assignments to \fBref\fP, and changes to its attributes,
-are treated as references, assignments, and attribute modifications
-to the variable whose name was passed as \fB$1\fP.
-If the control variable in a \fBfor\fP loop has the nameref attribute,
-the list of words can be a list of shell variables, and a name reference
-will be established for each word in the list, in turn, when the loop is
-executed.
-Array variables cannot be given the \fBnameref\fP attribute.
-However, nameref variables can reference array variables and subscripted
-array variables.
-Namerefs can be unset using the \fB\-n\fP option to the \fBunset\fP builtin.
-Otherwise, if \fBunset\fP is executed with the name of a nameref variable
-as an argument, the variable referenced by the nameref variable will be unset.
-.SS Positional Parameters
-.PP
-A
-.I positional parameter
-is a parameter denoted by one or more
-digits, other than the single digit 0. Positional parameters are
-assigned from the shell's arguments when it is invoked,
-and may be reassigned using the
-.B set
-builtin command. Positional parameters may not be assigned to
-with assignment statements. The positional parameters are
-temporarily replaced when a shell function is executed (see
-.SM
-.B FUNCTIONS
-below).
-.PP
-When a positional parameter consisting of more than a single
-digit is expanded, it must be enclosed in braces (see
-.SM
-.B EXPANSION
-below).
-.SS Special Parameters
-.PP
-The shell treats several parameters specially. These parameters may
-only be referenced; assignment to them is not allowed.
-.PD 0
-.TP
-.B *
-Expands to the positional parameters, starting from one.
-When the expansion is not within double quotes, each positional parameter
-expands to a separate word.
-In contexts where it is performed, those words
-are subject to further word splitting and pathname expansion.
-When the expansion occurs within double quotes, it expands to a single word
-with the value of each parameter separated by the first character of the
-.SM
-.B IFS
-special variable. That is, "\fB$*\fP" is equivalent
-to "\fB$1\fP\fIc\fP\fB$2\fP\fIc\fP\fB...\fP", where
-.I c
-is the first character of the value of the
-.SM
-.B IFS
-variable. If
-.SM
-.B IFS
-is unset, the parameters are separated by spaces.
-If
-.SM
-.B IFS
-is null, the parameters are joined without intervening separators.
-.TP
-.B @
-Expands to the positional parameters, starting from one. When the
-expansion occurs within double quotes, each parameter expands to a
-separate word. That is, "\fB$@\fP" is equivalent to
-"\fB$1\fP" "\fB$2\fP" ...
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-When there are no positional parameters, "\fB$@\fP" and
-.B $@
-expand to nothing (i.e., they are removed).
-.TP
-.B #
-Expands to the number of positional parameters in decimal.
-.TP
-.B ?
-Expands to the exit status of the most recently executed foreground
-pipeline.
-.TP
-.B \-
-Expands to the current option flags as specified upon invocation,
-by the
-.B set
-builtin command, or those set by the shell itself
-(such as the
-.B \-i
-option).
-.TP
-.B $
-Expands to the process ID of the shell. In a () subshell, it
-expands to the process ID of the current shell, not the
-subshell.
-.TP
-.B !
-Expands to the process ID of the job most recently placed into the
-background, whether executed as an asynchronous command or using
-the \fBbg\fP builtin (see
-.SM
-.B "JOB CONTROL"
-below).
-.TP
-.B 0
-Expands to the name of the shell or shell script. This is set at
-shell initialization. If
-.B bash
-is invoked with a file of commands,
-.B $0
-is set to the name of that file. If
-.B bash
-is started with the
-.B \-c
-option, then
-.B $0
-is set to the first argument after the string to be
-executed, if one is present. Otherwise, it is set
-to the filename used to invoke
-.BR bash ,
-as given by argument zero.
-.TP
-.B _
-At shell startup, set to the absolute pathname used to invoke the
-shell or shell script being executed as passed in the environment
-or argument list.
-Subsequently, expands to the last argument to the previous command,
-after expansion.
-Also set to the full pathname used to invoke each command executed
-and placed in the environment exported to that command.
-When checking mail, this parameter holds the name of the mail file
-currently being checked.
-.PD
-.SS Shell Variables
-.PP
-The following variables are set by the shell:
-.PP
-.PD 0
-.TP
-.B BASH
-Expands to the full filename used to invoke this instance of
-.BR bash .
-.TP
-.B BASHOPTS
-A colon-separated list of enabled shell options. Each word in
-the list is a valid argument for the
-.B \-s
-option to the
-.B shopt
-builtin command (see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below). The options appearing in
-.SM
-.B BASHOPTS
-are those reported as
-.I on
-by \fBshopt\fP.
-If this variable is in the environment when
-.B bash
-starts up, each shell option in the list will be enabled before
-reading any startup files.
-This variable is read-only.
-.TP
-.B BASHPID
-Expands to the process ID of the current \fBbash\fP process.
-This differs from \fB$$\fP under certain circumstances, such as subshells
-that do not require \fBbash\fP to be re-initialized.
-.TP
-.B BASH_ALIASES
-An associative array variable whose members correspond to the internal
-list of aliases as maintained by the \fBalias\fP builtin.
-Elements added to this array appear in the alias list; unsetting array
-elements cause aliases to be removed from the alias list.
-.TP
-.B BASH_ARGC
-An array variable whose values are the number of parameters in each
-frame of the current \fBbash\fP execution call stack.
-The number of
-parameters to the current subroutine (shell function or script executed
-with \fB.\fP or \fBsource\fP) is at the top of the stack.
-When a subroutine is executed, the number of parameters passed is pushed onto
-.SM
-.BR BASH_ARGC .
-The shell sets
-.SM
-.B BASH_ARGC
-only when in extended debugging mode (see the description of the
-.B extdebug
-option to the
-.B shopt
-builtin below)
-.TP
-.B BASH_ARGV
-An array variable containing all of the parameters in the current \fBbash\fP
-execution call stack. The final parameter of the last subroutine call
-is at the top of the stack; the first parameter of the initial call is
-at the bottom. When a subroutine is executed, the parameters supplied
-are pushed onto
-.SM
-.BR BASH_ARGV .
-The shell sets
-.SM
-.B BASH_ARGV
-only when in extended debugging mode
-(see the description of the
-.B extdebug
-option to the
-.B shopt
-builtin below)
-.TP
-.B BASH_CMDS
-An associative array variable whose members correspond to the internal
-hash table of commands as maintained by the \fBhash\fP builtin.
-Elements added to this array appear in the hash table; unsetting array
-elements cause commands to be removed from the hash table.
-.TP
-.B BASH_COMMAND
-The command currently being executed or about to be executed, unless the
-shell is executing a command as the result of a trap,
-in which case it is the command executing at the time of the trap.
-.TP
-.B BASH_EXECUTION_STRING
-The command argument to the \fB\-c\fP invocation option.
-.TP
-.B BASH_LINENO
-An array variable whose members are the line numbers in source files
-where each corresponding member of
-.SM
-.B FUNCNAME
-was invoked.
-\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source
-file (\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP) where
-\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called
-(or \fB${BASH_LINENO[\fP\fI$i-1\fP\fB]}\fP if referenced within another
-shell function).
-Use
-.SM
-.B LINENO
-to obtain the current line number.
-.TP
-.B BASH_REMATCH
-An array variable whose members are assigned by the \fB=~\fP binary
-operator to the \fB[[\fP conditional command.
-The element with index 0 is the portion of the string
-matching the entire regular expression.
-The element with index \fIn\fP is the portion of the
-string matching the \fIn\fPth parenthesized subexpression.
-This variable is read-only.
-.TP
-.B BASH_SOURCE
-An array variable whose members are the source filenames
-where the corresponding shell function names in the
-.SM
-.B FUNCNAME
-array variable are defined.
-The shell function
-\fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP is defined in the file
-\fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fP and called from
-\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP.
-.TP
-.B BASH_SUBSHELL
-Incremented by one within each subshell or subshell environment when
-the shell begins executing in that environment.
-The initial value is 0.
-.TP
-.B BASH_VERSINFO
-A readonly array variable whose members hold version information for
-this instance of
-.BR bash .
-The values assigned to the array members are as follows:
-.sp .5
-.RS
-.TP 24
-.B BASH_VERSINFO[\fR0\fP]
-The major version number (the \fIrelease\fP).
-.TP
-.B BASH_VERSINFO[\fR1\fP]
-The minor version number (the \fIversion\fP).
-.TP
-.B BASH_VERSINFO[\fR2\fP]
-The patch level.
-.TP
-.B BASH_VERSINFO[\fR3\fP]
-The build version.
-.TP
-.B BASH_VERSINFO[\fR4\fP]
-The release status (e.g., \fIbeta1\fP).
-.TP
-.B BASH_VERSINFO[\fR5\fP]
-The value of
-.SM
-.BR MACHTYPE .
-.RE
-.TP
-.B BASH_VERSION
-Expands to a string describing the version of this instance of
-.BR bash .
-.TP
-.B COMP_CWORD
-An index into \fB${COMP_WORDS}\fP of the word containing the current
-cursor position.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (see \fBProgrammable Completion\fP
-below).
-.TP
-.B COMP_KEY
-The key (or final key of a key sequence) used to invoke the current
-completion function.
-.TP
-.B COMP_LINE
-The current command line.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see \fBProgrammable Completion\fP
-below).
-.TP
-.B COMP_POINT
-The index of the current cursor position relative to the beginning of
-the current command.
-If the current cursor position is at the end of the current command,
-the value of this variable is equal to \fB${#COMP_LINE}\fP.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see \fBProgrammable Completion\fP
-below).
-.TP
-.B COMP_TYPE
-Set to an integer value corresponding to the type of completion attempted
-that caused a completion function to be called:
-\fITAB\fP, for normal completion,
-\fI?\fP, for listing completions after successive tabs,
-\fI!\fP, for listing alternatives on partial word completion,
-\fI@\fP, to list completions if the word is not unmodified,
-or
-\fI%\fP, for menu completion.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (see \fBProgrammable Completion\fP
-below).
-.TP
-.B COMP_WORDBREAKS
-The set of characters that the \fBreadline\fP library treats as word
-separators when performing word completion.
-If
-.SM
-.B COMP_WORDBREAKS
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B COMP_WORDS
-An array variable (see \fBArrays\fP below) consisting of the individual
-words in the current command line.
-The line is split into words as \fBreadline\fP would split it, using
-.SM
-.B COMP_WORDBREAKS
-as described above.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (see \fBProgrammable Completion\fP
-below).
-.TP
-.B COPROC
-An array variable (see \fBArrays\fP below) created to hold the file descriptors
-for output from and input to an unnamed coprocess (see \fBCoprocesses\fP
-above).
-.TP
-.B DIRSTACK
-An array variable (see
-.B Arrays
-below) containing the current contents of the directory stack.
-Directories appear in the stack in the order they are displayed by the
-.B dirs
-builtin.
-Assigning to members of this array variable may be used to modify
-directories already in the stack, but the
-.B pushd
-and
-.B popd
-builtins must be used to add and remove directories.
-Assignment to this variable will not change the current directory.
-If
-.SM
-.B DIRSTACK
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B EUID
-Expands to the effective user ID of the current user, initialized at
-shell startup. This variable is readonly.
-.TP
-.B FUNCNAME
-An array variable containing the names of all shell functions
-currently in the execution call stack.
-The element with index 0 is the name of any currently-executing
-shell function.
-The bottom-most element (the one with the highest index) is
-.if t \f(CW"main"\fP.
-.if n "main".
-This variable exists only when a shell function is executing.
-Assignments to
-.SM
-.B FUNCNAME
-have no effect and return an error status.
-If
-.SM
-.B FUNCNAME
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.if t .sp 0.5
-.if n .sp 1
-This variable can be used with \fBBASH_LINENO\fP and \fBBASH_SOURCE\fP.
-Each element of \fBFUNCNAME\fP has corresponding elements in
-\fBBASH_LINENO\fP and \fBBASH_SOURCE\fP to describe the call stack.
-For instance, \fB${FUNCNAME[\fP\fI$i\fP\fB]}\fP was called from the file
-\fB${BASH_SOURCE[\fP\fI$i+1\fP\fB]}\fP at line number
-\fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP.
-The \fBcaller\fP builtin displays the current call stack using this
-information.
-.TP
-.B GROUPS
-An array variable containing the list of groups of which the current
-user is a member.
-Assignments to
-.SM
-.B GROUPS
-have no effect and return an error status.
-If
-.SM
-.B GROUPS
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B HISTCMD
-The history number, or index in the history list, of the current
-command.
-If
-.SM
-.B HISTCMD
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B HOSTNAME
-Automatically set to the name of the current host.
-.TP
-.B HOSTTYPE
-Automatically set to a string that uniquely
-describes the type of machine on which
-.B bash
-is executing.
-The default is system-dependent.
-.TP
-.B LINENO
-Each time this parameter is referenced, the shell substitutes
-a decimal number representing the current sequential line number
-(starting with 1) within a script or function. When not in a
-script or function, the value substituted is not guaranteed to
-be meaningful.
-If
-.SM
-.B LINENO
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B MACHTYPE
-Automatically set to a string that fully describes the system
-type on which
-.B bash
-is executing, in the standard GNU \fIcpu-company-system\fP format.
-The default is system-dependent.
-.TP
-.B MAPFILE
-An array variable (see \fBArrays\fP below) created to hold the text
-read by the \fBmapfile\fP builtin when no variable name is supplied.
-.TP
-.B OLDPWD
-The previous working directory as set by the
-.B cd
-command.
-.TP
-.B OPTARG
-The value of the last option argument processed by the
-.B getopts
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.TP
-.B OPTIND
-The index of the next argument to be processed by the
-.B getopts
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.TP
-.B OSTYPE
-Automatically set to a string that
-describes the operating system on which
-.B bash
-is executing.
-The default is system-dependent.
-.TP
-.B PIPESTATUS
-An array variable (see
-.B Arrays
-below) containing a list of exit status values from the processes
-in the most-recently-executed foreground pipeline (which may
-contain only a single command).
-.TP
-.B PPID
-The process ID of the shell's parent. This variable is readonly.
-.TP
-.B PWD
-The current working directory as set by the
-.B cd
-command.
-.TP
-.B RANDOM
-Each time this parameter is referenced, a random integer between
-0 and 32767 is
-generated. The sequence of random numbers may be initialized by assigning
-a value to
-.SM
-.BR RANDOM .
-If
-.SM
-.B RANDOM
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B READLINE_LINE
-The contents of the
-.B readline
-line buffer, for use with
-.if t \f(CWbind -x\fP
-.if n "bind -x"
-(see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below).
-.TP
-.B READLINE_POINT
-The position of the insertion point in the
-.B readline
-line buffer, for use with
-.if t \f(CWbind -x\fP
-.if n "bind -x"
-(see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below).
-.TP
-.B REPLY
-Set to the line of input read by the
-.B read
-builtin command when no arguments are supplied.
-.TP
-.B SECONDS
-Each time this parameter is
-referenced, the number of seconds since shell invocation is returned. If a
-value is assigned to
-.SM
-.BR SECONDS ,
-the value returned upon subsequent
-references is
-the number of seconds since the assignment plus the value assigned.
-If
-.SM
-.B SECONDS
-is unset, it loses its special properties, even if it is
-subsequently reset.
-.TP
-.B SHELLOPTS
-A colon-separated list of enabled shell options. Each word in
-the list is a valid argument for the
-.B \-o
-option to the
-.B set
-builtin command (see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below). The options appearing in
-.SM
-.B SHELLOPTS
-are those reported as
-.I on
-by \fBset \-o\fP.
-If this variable is in the environment when
-.B bash
-starts up, each shell option in the list will be enabled before
-reading any startup files.
-This variable is read-only.
-.TP
-.B SHLVL
-Incremented by one each time an instance of
-.B bash
-is started.
-.TP
-.B UID
-Expands to the user ID of the current user, initialized at shell startup.
-This variable is readonly.
-.PD
-.PP
-The following variables are used by the shell. In some cases,
-.B bash
-assigns a default value to a variable; these cases are noted
-below.
-.PP
-.PD 0
-.TP
-.B BASH_COMPAT
-The value is used to set the shell's compatibility level.
-See the description of the \fBshopt\fP builtin below under
-\fBSHELL BUILTIN COMMANDS\fP
-for a description of the various compatibility
-levels and their effects.
-The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
-corresponding to the desired compatibility level.
-If \fBBASH_COMPAT\fP is unset or set to the empty string, the compatibility
-level is set to the default for the current version.
-If \fBBASH_COMPAT\fP is set to a value that is not one of the valid
-compatibility levels, the shell prints an error message and sets the
-compatibility level to the default for the current version.
-The valid compatibility levels correspond to the compatibility options
-accepted by the \fBshopt\fP builtin described below (for example,
-\fBcompat42\fP means that 4.2 and 42 are valid values).
-The current version is also a valid value.
-.TP
-.B BASH_ENV
-If this parameter is set when \fBbash\fP is executing a shell script,
-its value is interpreted as a filename containing commands to
-initialize the shell, as in
-.IR ~/.bashrc .
-The value of
-.SM
-.B BASH_ENV
-is subjected to parameter expansion, command substitution, and arithmetic
-expansion before being interpreted as a filename.
-.SM
-.B PATH
-is not used to search for the resultant filename.
-.TP
-.B BASH_XTRACEFD
-If set to an integer corresponding to a valid file descriptor, \fBbash\fP
-will write the trace output generated when
-.if t \f(CWset -x\fP
-.if n \fIset -x\fP
-is enabled to that file descriptor.
-The file descriptor is closed when
-.SM
-.B BASH_XTRACEFD
-is unset or assigned a new value.
-Unsetting
-.SM
-.B BASH_XTRACEFD
-or assigning it the empty string causes the
-trace output to be sent to the standard error.
-Note that setting
-.SM
-.B BASH_XTRACEFD
-to 2 (the standard error file
-descriptor) and then unsetting it will result in the standard error
-being closed.
-.TP
-.B CDPATH
-The search path for the
-.B cd
-command.
-This is a colon-separated list of directories in which the shell looks
-for destination directories specified by the
-.B cd
-command.
-A sample value is
-.if t \f(CW".:~:/usr"\fP.
-.if n ".:~:/usr".
-.TP
-.B CHILD_MAX
-Set the number of exited child status values for the shell to remember.
-Bash will not allow this value to be decreased below a POSIX-mandated
-minimum, and there is a maximum value (currently 8192) that this may
-not exceed.
-The minimum value is system-dependent.
-.TP
-.B COLUMNS
-Used by the \fBselect\fP compound command to determine the terminal width
-when printing selection lists.
-Automatically set if the
-.B checkwinsize
-option is enabled or in an interactive shell upon receipt of a
-.SM
-.BR SIGWINCH .
-.TP
-.B COMPREPLY
-An array variable from which \fBbash\fP reads the possible completions
-generated by a shell function invoked by the programmable completion
-facility (see \fBProgrammable Completion\fP below).
-Each array element contains one possible completion.
-.TP
-.B EMACS
-If \fBbash\fP finds this variable in the environment when the shell starts
-with value
-.if t \f(CWt\fP,
-.if n "t",
-it assumes that the shell is running in an Emacs shell buffer and disables
-line editing.
-.TP
-.B ENV
-Similar to
-.SM
-.BR BASH_ENV ;
-used when the shell is invoked in POSIX mode.
-.TP
-.B FCEDIT
-The default editor for the
-.B fc
-builtin command.
-.TP
-.B FIGNORE
-A colon-separated list of suffixes to ignore when performing
-filename completion (see
-.SM
-.B READLINE
-below).
-A filename whose suffix matches one of the entries in
-.SM
-.B FIGNORE
-is excluded from the list of matched filenames.
-A sample value is
-.if t \f(CW".o:~"\fP.
-.if n ".o:~".
-.TP
-.B FUNCNEST
-If set to a numeric value greater than 0, defines a maximum function
-nesting level. Function invocations that exceed this nesting level
-will cause the current command to abort.
-.TP
-.B GLOBIGNORE
-A colon-separated list of patterns defining the set of filenames to
-be ignored by pathname expansion.
-If a filename matched by a pathname expansion pattern also matches one
-of the patterns in
-.SM
-.BR GLOBIGNORE ,
-it is removed from the list of matches.
-.TP
-.B HISTCONTROL
-A colon-separated list of values controlling how commands are saved on
-the history list.
-If the list of values includes
-.IR ignorespace ,
-lines which begin with a
-.B space
-character are not saved in the history list.
-A value of
-.I ignoredups
-causes lines matching the previous history entry to not be saved.
-A value of
-.I ignoreboth
-is shorthand for \fIignorespace\fP and \fIignoredups\fP.
-A value of
-.IR erasedups
-causes all previous lines matching the current line to be removed from
-the history list before that line is saved.
-Any value not in the above list is ignored.
-If
-.SM
-.B HISTCONTROL
-is unset, or does not include a valid value,
-all lines read by the shell parser are saved on the history list,
-subject to the value of
-.SM
-.BR HISTIGNORE .
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-.SM
-.BR HISTCONTROL .
-.TP
-.B HISTFILE
-The name of the file in which command history is saved (see
-.SM
-.B HISTORY
-below). The default value is \fI~/.bash_history\fP. If unset, the
-command history is not saved when a shell exits.
-.TP
-.B HISTFILESIZE
-The maximum number of lines contained in the history file. When this
-variable is assigned a value, the history file is truncated, if
-necessary,
-to contain no more than that number of lines by removing the oldest entries.
-The history file is also truncated to this size after
-writing it when a shell exits.
-If the value is 0, the history file is truncated to zero size.
-Non-numeric values and numeric values less than zero inhibit truncation.
-The shell sets the default value to the value of \fBHISTSIZE\fP
-after reading any startup files.
-.TP
-.B HISTIGNORE
-A colon-separated list of patterns used to decide which command lines
-should be saved on the history list. Each pattern is anchored at the
-beginning of the line and must match the complete line (no implicit
-`\fB*\fP' is appended). Each pattern is tested against the line
-after the checks specified by
-.SM
-.B HISTCONTROL
-are applied.
-In addition to the normal shell pattern matching characters, `\fB&\fP'
-matches the previous history line. `\fB&\fP' may be escaped using a
-backslash; the backslash is removed before attempting a match.
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-.SM
-.BR HISTIGNORE .
-.TP
-.B HISTSIZE
-The number of commands to remember in the command history (see
-.SM
-.B HISTORY
-below).
-If the value is 0, commands are not saved in the history list.
-Numeric values less than zero result in every command being saved
-on the history list (there is no limit).
-The shell sets the default value to 500 after reading any startup files.
-.TP
-.B HISTTIMEFORMAT
-If this variable is set and not null, its value is used as a format string
-for \fIstrftime\fP(3) to print the time stamp associated with each history
-entry displayed by the \fBhistory\fP builtin.
-If this variable is set, time stamps are written to the history file so
-they may be preserved across shell sessions.
-This uses the history comment character to distinguish timestamps from
-other history lines.
-.TP
-.B HOME
-The home directory of the current user; the default argument for the
-\fBcd\fP builtin command.
-The value of this variable is also used when performing tilde expansion.
-.TP
-.B HOSTFILE
-Contains the name of a file in the same format as
-.FN /etc/hosts
-that should be read when the shell needs to complete a
-hostname.
-The list of possible hostname completions may be changed while the
-shell is running;
-the next time hostname completion is attempted after the
-value is changed,
-.B bash
-adds the contents of the new file to the existing list.
-If
-.SM
-.B HOSTFILE
-is set, but has no value, or does not name a readable file,
-\fBbash\fP attempts to read
-.FN /etc/hosts
-to obtain the list of possible hostname completions.
-When
-.SM
-.B HOSTFILE
-is unset, the hostname list is cleared.
-.TP
-.B IFS
-The
-.I Internal Field Separator
-that is used
-for word splitting after expansion and to
-split lines into words with the
-.B read
-builtin command. The default value is
-``<space><tab><newline>''.
-.TP
-.B IGNOREEOF
-Controls the
-action of an interactive shell on receipt of an
-.SM
-.B EOF
-character as the sole input. If set, the value is the number of
-consecutive
-.SM
-.B EOF
-characters which must be
-typed as the first characters on an input line before
-.B bash
-exits. If the variable exists but does not have a numeric value, or
-has no value, the default value is 10. If it does not exist,
-.SM
-.B EOF
-signifies the end of input to the shell.
-.TP
-.B INPUTRC
-The filename for the
-.B readline
-startup file, overriding the default of
-.FN ~/.inputrc
-(see
-.SM
-.B READLINE
-below).
-.TP
-.B LANG
-Used to determine the locale category for any category not specifically
-selected with a variable starting with \fBLC_\fP.
-.TP
-.B LC_ALL
-This variable overrides the value of
-.SM
-.B LANG
-and any other
-\fBLC_\fP variable specifying a locale category.
-.TP
-.B LC_COLLATE
-This variable determines the collation order used when sorting the
-results of pathname expansion, and determines the behavior of range
-expressions, equivalence classes, and collating sequences within
-pathname expansion and pattern matching.
-.TP
-.B LC_CTYPE
-This variable determines the interpretation of characters and the
-behavior of character classes within pathname expansion and pattern
-matching.
-.TP
-.B LC_MESSAGES
-This variable determines the locale used to translate double-quoted
-strings preceded by a \fB$\fP.
-.TP
-.B LC_NUMERIC
-This variable determines the locale category used for number formatting.
-.TP
-.B LINES
-Used by the \fBselect\fP compound command to determine the column length
-for printing selection lists.
-Automatically set if the
-.B checkwinsize
-option is enabled or in an interactive shell upon receipt of a
-.SM
-.BR SIGWINCH .
-.TP
-.B MAIL
-If this parameter is set to a file or directory name and the
-.SM
-.B MAILPATH
-variable is not set,
-.B bash
-informs the user of the arrival of mail in the specified file or
-Maildir-format directory.
-.TP
-.B MAILCHECK
-Specifies how
-often (in seconds)
-.B bash
-checks for mail. The default is 60 seconds. When it is time to check
-for mail, the shell does so before displaying the primary prompt.
-If this variable is unset, or set to a value that is not a number
-greater than or equal to zero, the shell disables mail checking.
-.TP
-.B MAILPATH
-A colon-separated list of filenames to be checked for mail.
-The message to be printed when mail arrives in a particular file
-may be specified by separating the filename from the message with a `?'.
-When used in the text of the message, \fB$_\fP expands to the name of
-the current mailfile.
-Example:
-.RS
-.PP
-\fBMAILPATH\fP=\(aq/var/mail/bfox?"You have mail":~/shell\-mail?"$_ has mail!"\(aq
-.PP
-.B Bash
-supplies a default value for this variable, but the location of the user
-mail files that it uses is system dependent (e.g., /var/mail/\fB$USER\fP).
-.RE
-.TP
-.B OPTERR
-If set to the value 1,
-.B bash
-displays error messages generated by the
-.B getopts
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.SM
-.B OPTERR
-is initialized to 1 each time the shell is invoked or a shell
-script is executed.
-.TP
-.B PATH
-The search path for commands. It
-is a colon-separated list of directories in which
-the shell looks for commands (see
-.SM
-.B COMMAND EXECUTION
-below).
-A zero-length (null) directory name in the value of
-.SM
-.B PATH
-indicates the current directory.
-A null directory name may appear as two adjacent colons, or as an initial
-or trailing colon.
-The default path is system-dependent,
-and is set by the administrator who installs
-.BR bash .
-A common value is
-.if t \f(CW/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin\fP.
-.if n ``/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin''.
-.TP
-.B POSIXLY_CORRECT
-If this variable is in the environment when \fBbash\fP starts, the shell
-enters \fIposix mode\fP before reading the startup files, as if the
-.B \-\-posix
-invocation option had been supplied. If it is set while the shell is
-running, \fBbash\fP enables \fIposix mode\fP, as if the command
-.if t \f(CWset -o posix\fP
-.if n \fIset -o posix\fP
-had been executed.
-.TP
-.B PROMPT_COMMAND
-If set, the value is executed as a command prior to issuing each primary
-prompt.
-.TP
-.B PROMPT_DIRTRIM
-If set to a number greater than zero, the value is used as the number of
-trailing directory components to retain when expanding the \fB\ew\fP and
-\fB\eW\fP prompt string escapes (see
-.SM
-.B PROMPTING
-below). Characters removed are replaced with an ellipsis.
-.TP
-.B PS1
-The value of this parameter is expanded (see
-.SM
-.B PROMPTING
-below) and used as the primary prompt string. The default value is
-``\fB\es\-\ev\e$ \fP''.
-.TP
-.B PS2
-The value of this parameter is expanded as with
-.SM
-.B PS1
-and used as the secondary prompt string. The default is
-``\fB> \fP''.
-.TP
-.B PS3
-The value of this parameter is used as the prompt for the
-.B select
-command (see
-.SM
-.B SHELL GRAMMAR
-above).
-.TP
-.B PS4
-The value of this parameter is expanded as with
-.SM
-.B PS1
-and the value is printed before each command
-.B bash
-displays during an execution trace. The first character of
-.SM
-.B PS4
-is replicated multiple times, as necessary, to indicate multiple
-levels of indirection. The default is ``\fB+ \fP''.
-.TP
-.B SHELL
-The full pathname to the shell is kept in this environment variable.
-If it is not set when the shell starts,
-.B bash
-assigns to it the full pathname of the current user's login shell.
-.TP
-.B TIMEFORMAT
-The value of this parameter is used as a format string specifying
-how the timing information for pipelines prefixed with the
-.B time
-reserved word should be displayed.
-The \fB%\fP character introduces an escape sequence that is
-expanded to a time value or other information.
-The escape sequences and their meanings are as follows; the
-braces denote optional portions.
-.sp .5
-.RS
-.PD 0
-.TP 10
-.B %%
-A literal \fB%\fP.
-.TP
-.B %[\fIp\fP][l]R
-The elapsed time in seconds.
-.TP
-.B %[\fIp\fP][l]U
-The number of CPU seconds spent in user mode.
-.TP
-.B %[\fIp\fP][l]S
-The number of CPU seconds spent in system mode.
-.TP
-.B %P
-The CPU percentage, computed as (%U + %S) / %R.
-.PD
-.RE
-.IP
-The optional \fIp\fP is a digit specifying the \fIprecision\fP,
-the number of fractional digits after a decimal point.
-A value of 0 causes no decimal point or fraction to be output.
-At most three places after the decimal point may be specified;
-values of \fIp\fP greater than 3 are changed to 3.
-If \fIp\fP is not specified, the value 3 is used.
-.IP
-The optional \fBl\fP specifies a longer format, including
-minutes, of the form \fIMM\fPm\fISS\fP.\fIFF\fPs.
-The value of \fIp\fP determines whether or not the fraction is
-included.
-.IP
-If this variable is not set, \fBbash\fP acts as if it had the
-value \fB$\(aq\enreal\et%3lR\enuser\et%3lU\ensys\et%3lS\(aq\fP.
-If the value is null, no timing information is displayed.
-A trailing newline is added when the format string is displayed.
-.PD 0
-.TP
-.B TMOUT
-If set to a value greater than zero,
-.SM
-.B TMOUT
-is treated as the
-default timeout for the \fBread\fP builtin.
-The \fBselect\fP command terminates if input does not arrive
-after
-.SM
-.B TMOUT
-seconds when input is coming from a terminal.
-In an interactive shell, the value is interpreted as the
-number of seconds to wait for a line of input after issuing the
-primary prompt.
-.B Bash
-terminates after waiting for that number of seconds if a complete
-line of input does not arrive.
-.TP
-.B TMPDIR
-If set, \fBbash\fP uses its value as the name of a directory in which
-\fBbash\fP creates temporary files for the shell's use.
-.TP
-.B auto_resume
-This variable controls how the shell interacts with the user and
-job control. If this variable is set, single word simple
-commands without redirections are treated as candidates for resumption
-of an existing stopped job. There is no ambiguity allowed; if there is
-more than one job beginning with the string typed, the job most recently
-accessed is selected. The
-.I name
-of a stopped job, in this context, is the command line used to
-start it.
-If set to the value
-.IR exact ,
-the string supplied must match the name of a stopped job exactly;
-if set to
-.IR substring ,
-the string supplied needs to match a substring of the name of a
-stopped job. The
-.I substring
-value provides functionality analogous to the
-.B %?
-job identifier (see
-.SM
-.B JOB CONTROL
-below). If set to any other value, the supplied string must
-be a prefix of a stopped job's name; this provides functionality
-analogous to the \fB%\fP\fIstring\fP job identifier.
-.TP
-.B histchars
-The two or three characters which control history expansion
-and tokenization (see
-.SM
-.B HISTORY EXPANSION
-below). The first character is the \fIhistory expansion\fP character,
-the character which signals the start of a history
-expansion, normally `\fB!\fP'.
-The second character is the \fIquick substitution\fP
-character, which is used as shorthand for re-running the previous
-command entered, substituting one string for another in the command.
-The default is `\fB^\fP'.
-The optional third character is the character
-which indicates that the remainder of the line is a comment when found
-as the first character of a word, normally `\fB#\fP'. The history
-comment character causes history substitution to be skipped for the
-remaining words on the line. It does not necessarily cause the shell
-parser to treat the rest of the line as a comment.
-.PD
-.SS Arrays
-.B Bash
-provides one-dimensional indexed and associative array variables.
-Any variable may be used as an indexed array; the
-.B declare
-builtin will explicitly declare an array.
-There is no maximum
-limit on the size of an array, nor any requirement that members
-be indexed or assigned contiguously.
-Indexed arrays are referenced using integers (including arithmetic
-expressions) and are zero-based; associative arrays are referenced
-using arbitrary strings.
-Unless otherwise noted, indexed array indices must be non-negative integers.
-.PP
-An indexed array is created automatically if any variable is assigned to
-using the syntax \fIname\fP[\fIsubscript\fP]=\fIvalue\fP. The
-.I subscript
-is treated as an arithmetic expression that must evaluate to a number.
-To explicitly declare an indexed array, use
-.B declare \-a \fIname\fP
-(see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.B declare \-a \fIname\fP[\fIsubscript\fP]
-is also accepted; the \fIsubscript\fP is ignored.
-.PP
-Associative arrays are created using
-.BR "declare \-A \fIname\fP" .
-.PP
-Attributes may be
-specified for an array variable using the
-.B declare
-and
-.B readonly
-builtins. Each attribute applies to all members of an array.
-.PP
-Arrays are assigned to using compound assignments of the form
-\fIname\fP=\fB(\fPvalue\fI1\fP ... value\fIn\fP\fB)\fP, where each
-\fIvalue\fP is of the form [\fIsubscript\fP]=\fIstring\fP.
-Indexed array assignments do not require anything but \fIstring\fP.
-When assigning to indexed arrays, if the optional brackets and subscript
-are supplied, that index is assigned to;
-otherwise the index of the element assigned is the last index assigned
-to by the statement plus one. Indexing starts at zero.
-.PP
-When assigning to an associative array, the subscript is required.
-.PP
-This syntax is also accepted by the
-.B declare
-builtin. Individual array elements may be assigned to using the
-\fIname\fP[\fIsubscript\fP]=\fIvalue\fP syntax introduced above.
-When assigning to an indexed array, if
-.I name
-is subscripted by a negative number, that number is
-interpreted as relative to one greater than the maximum index of
-\fIname\fP, so negative indices count back from the end of the
-array, and an index of \-1 references the last element.
-.PP
-Any element of an array may be referenced using
-${\fIname\fP[\fIsubscript\fP]}. The braces are required to avoid
-conflicts with pathname expansion. If
-\fIsubscript\fP is \fB@\fP or \fB*\fP, the word expands to
-all members of \fIname\fP. These subscripts differ only when the
-word appears within double quotes. If the word is double-quoted,
-${\fIname\fP[*]} expands to a single
-word with the value of each array member separated by the first
-character of the
-.SM
-.B IFS
-special variable, and ${\fIname\fP[@]} expands each element of
-\fIname\fP to a separate word. When there are no array members,
-${\fIname\fP[@]} expands to nothing.
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-This is analogous to the expansion
-of the special parameters \fB*\fP and \fB@\fP (see
-.B Special Parameters
-above). ${#\fIname\fP[\fIsubscript\fP]} expands to the length of
-${\fIname\fP[\fIsubscript\fP]}. If \fIsubscript\fP is \fB*\fP or
-\fB@\fP, the expansion is the number of elements in the array.
-If the
-.I subscript
-used to reference an element of an indexed array
-evaluates to a number less than zero, it is
-interpreted as relative to one greater than the maximum index of the array,
-so negative indices count back from the end of the
-array, and an index of \-1 references the last element.
-.PP
-Referencing an array variable without a subscript is equivalent to
-referencing the array with a subscript of 0.
-Any reference to a variable using a valid subscript is legal, and
-.B bash
-will create an array if necessary.
-.PP
-An array variable is considered set if a subscript has been assigned a
-value. The null string is a valid value.
-.PP
-It is possible to obtain the keys (indices) of an array as well as the values.
-${\fB!\fP\fIname\fP[\fI@\fP]} and ${\fB!\fP\fIname\fP[\fI*\fP]}
-expand to the indices assigned in array variable \fIname\fP.
-The treatment when in double quotes is similar to the expansion of the
-special parameters \fI@\fP and \fI*\fP within double quotes.
-.PP
-The
-.B unset
-builtin is used to destroy arrays. \fBunset\fP \fIname\fP[\fIsubscript\fP]
-destroys the array element at index \fIsubscript\fP.
-Negative subscripts to indexed arrays are interpreted as described above.
-Care must be taken to avoid unwanted side effects caused by pathname
-expansion.
-\fBunset\fP \fIname\fP, where \fIname\fP is an array, or
-\fBunset\fP \fIname\fP[\fIsubscript\fP], where
-\fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array.
-.PP
-The
-.BR declare ,
-.BR local ,
-and
-.B readonly
-builtins each accept a
-.B \-a
-option to specify an indexed array and a
-.B \-A
-option to specify an associative array.
-If both options are supplied,
-.B \-A
-takes precedence.
-The
-.B read
-builtin accepts a
-.B \-a
-option to assign a list of words read from the standard input
-to an array. The
-.B set
-and
-.B declare
-builtins display array values in a way that allows them to be
-reused as assignments.
-.SH EXPANSION
-Expansion is performed on the command line after it has been split into
-words. There are seven kinds of expansion performed:
-.IR "brace expansion" ,
-.IR "tilde expansion" ,
-.IR "parameter and variable expansion" ,
-.IR "command substitution" ,
-.IR "arithmetic expansion" ,
-.IR "word splitting" ,
-and
-.IR "pathname expansion" .
-.PP
-The order of expansions is:
-brace expansion;
-tilde expansion, parameter and variable expansion, arithmetic expansion,
-and command substitution (done in a left-to-right fashion);
-word splitting;
-and pathname expansion.
-.PP
-On systems that can support it, there is an additional expansion
-available: \fIprocess substitution\fP.
-This is performed at the
-same time as tilde, parameter, variable, and arithmetic expansion and
-command substitution.
-.PP
-Only brace expansion, word splitting, and pathname 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
-"\fB$@\fP" and "\fB${\fP\fIname\fP\fB[@]}\fP"
-as explained above (see
-.SM
-.BR PARAMETERS ).
-.SS Brace Expansion
-.PP
-.I "Brace expansion"
-is a mechanism by which arbitrary strings
-may be generated. This mechanism is similar to
-\fIpathname expansion\fP, but the filenames generated
-need not exist. Patterns to be brace expanded take
-the form of an optional
-.IR preamble ,
-followed by either a series of comma-separated strings or
-a sequence expression between a pair of braces, followed by
-an optional
-.IR postscript .
-The preamble is prefixed to each string contained
-within the braces, and the postscript is then appended
-to each resulting string, expanding left to right.
-.PP
-Brace expansions may be nested. The results of each expanded
-string are not sorted; left to right order is preserved.
-For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'.
-.PP
-A sequence expression takes the form
-\fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP,
-where \fIx\fP and \fIy\fP are either integers or single characters,
-and \fIincr\fP, an optional increment, is an integer.
-When integers are supplied, the expression expands to each number between
-\fIx\fP and \fIy\fP, inclusive.
-Supplied integers may be prefixed with \fI0\fP to force each term to have the
-same width.
-When either \fIx\fP or \fPy\fP begins with a zero, the shell
-attempts to force all generated terms to contain the same number of digits,
-zero-padding where necessary.
-When characters are supplied, the expression expands to each character
-lexicographically between \fIx\fP and \fIy\fP, inclusive,
-using the default C locale.
-Note that both \fIx\fP and \fIy\fP must be of the same type.
-When the increment is supplied, it is used as the difference between
-each term. The default increment is 1 or -1 as appropriate.
-.PP
-Brace expansion is performed before any other expansions,
-and any characters special to other expansions are preserved
-in the result. It is strictly textual.
-.B Bash
-does not apply any syntactic interpretation to the context of the
-expansion or the text between the braces.
-.PP
-A correctly-formed brace expansion must contain unquoted opening
-and closing braces, and at least one unquoted comma or a valid
-sequence expression.
-Any incorrectly formed brace expansion is left unchanged.
-A \fB{\fP or \fB,\fP may be quoted with a backslash to prevent its
-being considered part of a brace expression.
-To avoid conflicts with parameter expansion, the string \fB${\fP
-is not considered eligible for brace expansion.
-.PP
-This construct is typically used as shorthand when the common
-prefix of the strings to be generated is longer than in the
-above example:
-.RS
-.PP
-mkdir /usr/local/src/bash/{old,new,dist,bugs}
-.RE
-or
-.RS
-chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
-.RE
-.PP
-Brace expansion introduces a slight incompatibility with
-historical versions of
-.BR sh .
-.B sh
-does not treat opening or closing braces specially when they
-appear as part of a word, and preserves them in the output.
-.B Bash
-removes braces from words as a consequence of brace
-expansion. For example, a word entered to
-.B sh
-as \fIfile{1,2}\fP
-appears identically in the output. The same word is
-output as
-.I file1 file2
-after expansion by
-.BR bash .
-If strict compatibility with
-.B sh
-is desired, start
-.B bash
-with the
-.B +B
-option or disable brace expansion with the
-.B +B
-option to the
-.B set
-command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.SS Tilde Expansion
-.PP
-If a word begins with an unquoted tilde character (`\fB~\fP'), all of
-the characters preceding the first unquoted slash (or all characters,
-if there is no unquoted slash) are considered a \fItilde-prefix\fP.
-If none of the characters in the tilde-prefix are quoted, the
-characters in the tilde-prefix following the tilde are treated as a
-possible \fIlogin name\fP.
-If this login name is the null string, the tilde is replaced with the
-value of the shell parameter
-.SM
-.BR HOME .
-If
-.SM
-.B HOME
-is unset, the home directory of the user executing the shell is
-substituted instead.
-Otherwise, the tilde-prefix is replaced with the home directory
-associated with the specified login name.
-.PP
-If the tilde-prefix is a `~+', the value of the shell variable
-.SM
-.B PWD
-replaces the tilde-prefix.
-If the tilde-prefix is a `~\-', the value of the shell variable
-.SM
-.BR OLDPWD ,
-if it is set, is substituted.
-If the characters following the tilde in the tilde-prefix consist
-of a number \fIN\fP, optionally prefixed
-by a `+' or a `\-', the tilde-prefix is replaced with the corresponding
-element from the directory stack, as it would be displayed by the
-.B dirs
-builtin invoked with the tilde-prefix as an argument.
-If the characters following the tilde in the tilde-prefix consist of a
-number without a leading `+' or `\-', `+' is assumed.
-.PP
-If the login name is invalid, or the tilde expansion fails, the word
-is unchanged.
-.PP
-Each variable assignment is checked for unquoted tilde-prefixes immediately
-following a
-.B :
-or the first
-.BR = .
-In these cases, tilde expansion is also performed.
-Consequently, one may use filenames with tildes in assignments to
-.SM
-.BR PATH ,
-.SM
-.BR MAILPATH ,
-and
-.SM
-.BR CDPATH ,
-and the shell assigns the expanded value.
-.SS Parameter Expansion
-.PP
-The `\fB$\fP' character introduces parameter expansion,
-command substitution, or arithmetic expansion. The parameter name
-or symbol to be expanded may be enclosed in braces, which
-are optional but serve to protect the variable to be expanded from
-characters immediately following it which could be
-interpreted as part of the name.
-.PP
-When braces are used, the matching ending brace is the first `\fB}\fP'
-not escaped by a backslash or within a quoted string, and not within an
-embedded arithmetic expansion, command substitution, or parameter
-expansion.
-.PP
-.PD 0
-.TP
-${\fIparameter\fP}
-The value of \fIparameter\fP is substituted. The braces are required
-when
-.I parameter
-is a positional parameter with more than one digit,
-or when
-.I parameter
-is followed by a character which is not to be
-interpreted as part of its name.
-The \fIparameter\fP is a shell parameter as described above
-\fBPARAMETERS\fP) or an array reference (\fBArrays\fP).
-.PD
-.PP
-If the first character of \fIparameter\fP is an exclamation point (\fB!\fP),
-it introduces a level of variable indirection.
-\fBBash\fP uses the value of the variable formed from the rest of
-\fIparameter\fP as the name of the variable; this variable is then
-expanded and that value is used in the rest of the substitution, rather
-than the value of \fIparameter\fP itself.
-This is known as \fIindirect expansion\fP.
-The exceptions to this are the expansions of ${\fB!\fP\fIprefix\fP\fB*\fP} and
-${\fB!\fP\fIname\fP[\fI@\fP]} described below.
-The exclamation point must immediately follow the left brace in order to
-introduce indirection.
-.PP
-In each of the cases below, \fIword\fP is subject to tilde expansion,
-parameter expansion, command substitution, and arithmetic expansion.
-.PP
-When not performing substring expansion, using the forms documented below
-(e.g., \fB:-\fP),
-\fBbash\fP tests for a parameter that is unset or null. Omitting the colon
-results in a test only for a parameter that is unset.
-.PP
-.PD 0
-.TP
-${\fIparameter\fP\fB:\-\fP\fIword\fP}
-\fBUse Default Values\fP. If
-.I parameter
-is unset or null, the expansion of
-.I word
-is substituted. Otherwise, the value of
-.I parameter
-is substituted.
-.TP
-${\fIparameter\fP\fB:=\fP\fIword\fP}
-\fBAssign Default Values\fP.
-If
-.I parameter
-is unset or null, the expansion of
-.I word
-is assigned to
-.IR parameter .
-The value of
-.I parameter
-is then substituted. Positional parameters and special parameters may
-not be assigned to in this way.
-.TP
-${\fIparameter\fP\fB:?\fP\fIword\fP}
-\fBDisplay Error if Null or Unset\fP.
-If
-.I parameter
-is null or unset, the expansion of \fIword\fP (or a message to that effect
-if
-.I word
-is not present) is written to the standard error and the shell, if it
-is not interactive, exits. Otherwise, the value of \fIparameter\fP is
-substituted.
-.TP
-${\fIparameter\fP\fB:+\fP\fIword\fP}
-\fBUse Alternate Value\fP.
-If
-.I parameter
-is null or unset, nothing is substituted, otherwise the expansion of
-.I word
-is substituted.
-.TP
-${\fIparameter\fP\fB:\fP\fIoffset\fP}
-.PD 0
-.TP
-${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
-.PD
-\fBSubstring Expansion\fP.
-Expands to up to \fIlength\fP characters of the value of \fIparameter\fP
-starting at the character specified by \fIoffset\fP.
-If \fIparameter\fP is \fB@\fP, an indexed array subscripted by
-\fB@\fP or \fB*\fP, or an associative array name, the results differ as
-described below.
-If \fIlength\fP is omitted, expands to the substring of the value of
-\fIparameter\fP starting at the character specified by \fIoffset\fP
-and extending to the end of the value.
-\fIlength\fP and \fIoffset\fP are arithmetic expressions (see
-.SM
-.B
-ARITHMETIC EVALUATION
-below).
-.sp 1
-If \fIoffset\fP evaluates to a number less than zero, the value
-is used as an offset in characters
-from the end of the value of \fIparameter\fP.
-If \fIlength\fP evaluates to a number less than zero,
-it is interpreted as an offset in characters
-from the end of the value of \fIparameter\fP rather than
-a number of characters, and the expansion is the characters between
-\fIoffset\fP and that result.
-Note that a negative offset must be separated from the colon by at least
-one space to avoid being confused with the \fB:-\fP expansion.
-.sp 1
-If \fIparameter\fP is \fB@\fP, the result is \fIlength\fP positional
-parameters beginning at \fIoffset\fP.
-A negative \fIoffset\fP is taken relative to one greater than the greatest
-positional parameter, so an offset of -1 evaluates to the last positional
-parameter.
-It is an expansion error if \fIlength\fP evaluates to a number less than
-zero.
-.sp 1
-If \fIparameter\fP is an indexed array name subscripted by @ or *,
-the result is the \fIlength\fP
-members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}.
-A negative \fIoffset\fP is taken relative to one greater than the maximum
-index of the specified array.
-It is an expansion error if \fIlength\fP evaluates to a number less than
-zero.
-.sp 1
-Substring expansion applied to an associative array produces undefined
-results.
-.sp 1
-Substring indexing is zero-based unless the positional parameters
-are used, in which case the indexing starts at 1 by default.
-If \fIoffset\fP is 0, and the positional parameters are used, \fB$0\fP is
-prefixed to the list.
-.TP
-${\fB!\fP\fIprefix\fP\fB*\fP}
-.PD 0
-.TP
-${\fB!\fP\fIprefix\fP\fB@\fP}
-.PD
-\fBNames matching prefix\fP.
-Expands to the names of variables whose names begin with \fIprefix\fP,
-separated by the first character of the
-.SM
-.B IFS
-special variable.
-When \fI@\fP is used and the expansion appears within double quotes, each
-variable name expands to a separate word.
-.TP
-${\fB!\fP\fIname\fP[\fI@\fP]}
-.PD 0
-.TP
-${\fB!\fP\fIname\fP[\fI*\fP]}
-.PD
-\fBList of array keys\fP.
-If \fIname\fP is an array variable, expands to the list of array indices
-(keys) assigned in \fIname\fP.
-If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null
-otherwise.
-When \fI@\fP is used and the expansion appears within double quotes, each
-key expands to a separate word.
-.TP
-${\fB#\fP\fIparameter\fP}
-\fBParameter length\fP.
-The length in characters of the value of \fIparameter\fP is substituted.
-If
-.I parameter
-is
-.B *
-or
-.BR @ ,
-the value substituted is the number of positional parameters.
-If
-.I parameter
-is an array name subscripted by
-.B *
-or
-.BR @ ,
-the value substituted is the number of elements in the array.
-If
-.I parameter
-is an indexed array name subscripted by a negative number, that number is
-interpreted as relative to one greater than the maximum index of
-\fIparameter\fP, so negative indices count back from the end of the
-array, and an index of \-1 references the last element.
-.TP
-${\fIparameter\fP\fB#\fP\fIword\fP}
-.PD 0
-.TP
-${\fIparameter\fP\fB##\fP\fIword\fP}
-.PD
-\fBRemove matching prefix pattern\fP.
-The
-.I word
-is expanded to produce a pattern just as in pathname
-expansion. If the pattern matches the beginning of
-the value of
-.IR parameter ,
-then the result of the expansion is the expanded value of
-.I parameter
-with the shortest matching pattern (the ``\fB#\fP'' case) or the
-longest matching pattern (the ``\fB##\fP'' case) deleted.
-If
-.I parameter
-is
-.B @
-or
-.BR * ,
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If
-.I parameter
-is an array variable subscripted with
-.B @
-or
-.BR * ,
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-.TP
-${\fIparameter\fP\fB%\fP\fIword\fP}
-.PD 0
-.TP
-${\fIparameter\fP\fB%%\fP\fIword\fP}
-.PD
-\fBRemove matching suffix pattern\fP.
-The \fIword\fP is expanded to produce a pattern just as in
-pathname expansion.
-If the pattern matches a trailing portion of the expanded value of
-.IR parameter ,
-then the result of the expansion is the expanded value of
-.I parameter
-with the shortest matching pattern (the ``\fB%\fP'' case) or the
-longest matching pattern (the ``\fB%%\fP'' case) deleted.
-If
-.I parameter
-is
-.B @
-or
-.BR * ,
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If
-.I parameter
-is an array variable subscripted with
-.B @
-or
-.BR * ,
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-.TP
-${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP}
-\fBPattern substitution\fP.
-The \fIpattern\fP is expanded to produce a pattern just as in
-pathname expansion.
-\fIParameter\fP is expanded and the longest match of \fIpattern\fP
-against its value is replaced with \fIstring\fP.
-If \fIpattern\fP begins with \fB/\fP, all matches of \fIpattern\fP are
-replaced with \fIstring\fP. Normally only the first match is replaced.
-If \fIpattern\fP begins with \fB#\fP, it must match at the beginning
-of the expanded value of \fIparameter\fP.
-If \fIpattern\fP begins with \fB%\fP, it must match at the end
-of the expanded value of \fIparameter\fP.
-If \fIstring\fP is null, matches of \fIpattern\fP are deleted
-and the \fB/\fP following \fIpattern\fP may be omitted.
-If the
-.B nocasematch
-shell option is enabled, the match is performed without regard to the case
-of alphabetic characters.
-If
-.I parameter
-is
-.B @
-or
-.BR * ,
-the substitution operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If
-.I parameter
-is an array variable subscripted with
-.B @
-or
-.BR * ,
-the substitution operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-.TP
-${\fIparameter\fP\fB^\fP\fIpattern\fP}
-.PD 0
-.TP
-${\fIparameter\fP\fB^^\fP\fIpattern\fP}
-.TP
-${\fIparameter\fP\fB,\fP\fIpattern\fP}
-.TP
-${\fIparameter\fP\fB,,\fP\fIpattern\fP}
-.PD
-\fBCase modification\fP.
-This expansion modifies the case of alphabetic characters in \fIparameter\fP.
-The \fIpattern\fP is expanded to produce a pattern just as in
-pathname expansion.
-Each character in the expanded value of \fIparameter\fP is tested against
-\fIpattern\fP, and, if it matches the pattern, its case is converted.
-The pattern should not attempt to match more than one character.
-The \fB^\fP operator converts lowercase letters matching \fIpattern\fP
-to uppercase; the \fB,\fP operator converts matching uppercase letters
-to lowercase.
-The \fB^^\fP and \fB,,\fP expansions convert each matched character in the
-expanded value; the \fB^\fP and \fB,\fP expansions match and convert only
-the first character in the expanded value.
-If \fIpattern\fP is omitted, it is treated like a \fB?\fP, which matches
-every character.
-If
-.I parameter
-is
-.B @
-or
-.BR * ,
-the case modification operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If
-.I parameter
-is an array variable subscripted with
-.B @
-or
-.BR * ,
-the case modification operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-.TP
-${\fIparameter\fP\fB@\fP\fIoperator\fP}
-\fBParameter transformation\fP.
-The expansion is either a transformation of the value of \fIparameter\fP
-or information about \fIparameter\fP itself, depending on the value of
-\fIoperator\fP. Each \fIoperator\fP is a single letter:
-.sp 1
-.RS
-.PD 0
-.TP
-.B Q
-The expansion is a string that is the value of \fIparameter\fP quoted in a
-format that can be reused as input.
-.TP
-.B E
-The expansion is a string that is the value of \fIparameter\fP with backslash
-escape sequences expanded as with the \fB$'...'\fP quoting mechansim.
-.TP
-.B P
-The expansion is a string that is the result of expanding the value of
-\fIparameter\fP as if it were a prompt string (see \fBPROMPTING\fP below).
-.TP
-.B A
-The expansion is a string in the form of a \fBdeclare\fP command that, if
-evaluated, will recreate \fIparameter\fP with its attributes and value.
-.TP
-.B a
-The expansion is a string consisting of flag values representing
-\fIparameter\fP's attributes.
-.PD
-.PP
-If
-.I parameter
-is
-.B @
-or
-.BR * ,
-the operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If
-.I parameter
-is an array variable subscripted with
-.B @
-or
-.BR * ,
-the case modification operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-.sp 1
-The result of the expansion is subject to word splitting and pathname
-expansion as described below.
-.RE
-.SS Command Substitution
-.PP
-\fICommand substitution\fP allows the output of a command to replace
-the command name. There are two forms:
-.RS
-.PP
-\fB$(\fP\fIcommand\fP\|\fB)\fP
-.RE
-or
-.RS
-\fB\`\fP\fIcommand\fP\fB\`\fP
-.RE
-.PP
-.B Bash
-performs the expansion by executing \fIcommand\fP and
-replacing the command substitution with the standard output of the
-command, with any trailing newlines deleted.
-Embedded newlines are not deleted, but they may be removed during
-word splitting.
-The command substitution \fB$(cat \fIfile\fP)\fR can be replaced by
-the equivalent but faster \fB$(< \fIfile\fP)\fR.
-.PP
-When the old-style backquote form of substitution is used,
-backslash retains its literal meaning except when followed by
-.BR $ ,
-.BR \` ,
-or
-.BR \e .
-The first backquote not preceded by a backslash terminates the
-command substitution.
-When using the $(\^\fIcommand\fP\|) form, all characters between the
-parentheses make up the command; none are treated specially.
-.PP
-Command substitutions may be nested. To nest when using the backquoted form,
-escape the inner backquotes with backslashes.
-.PP
-If the substitution appears within double quotes, word splitting and
-pathname expansion are not performed on the results.
-.SS Arithmetic Expansion
-.PP
-Arithmetic expansion allows the evaluation of an arithmetic expression
-and the substitution of the result. The format for arithmetic expansion is:
-.RS
-.PP
-\fB$((\fP\fIexpression\fP\fB))\fP
-.RE
-.PP
-The
-.I expression
-is treated as if it were within double quotes, but a double quote
-inside the parentheses is not treated specially.
-All tokens in the expression undergo parameter and variable expansion,
-command substitution, and quote removal.
-The result is treated as the arithmetic expression to be evaluated.
-Arithmetic expansions may be nested.
-.PP
-The evaluation is performed according to the rules listed below under
-.SM
-.BR "ARITHMETIC EVALUATION" .
-If
-.I expression
-is invalid,
-.B bash
-prints a message indicating failure and no substitution occurs.
-.SS Process Substitution
-.PP
-\fIProcess substitution\fP is supported on systems that support named
-pipes (\fIFIFOs\fP) or the \fB/dev/fd\fP method of naming open files.
-It takes the form of
-\fB<(\fP\fIlist\^\fP\fB)\fP
-or
-\fB>(\fP\fIlist\^\fP\fB)\fP.
-The process \fIlist\fP is run with its input or output connected to a
-\fIFIFO\fP or some file in \fB/dev/fd\fP. The name of this file is
-passed as an argument to the current command as the result of the
-expansion. If the \fB>(\fP\fIlist\^\fP\fB)\fP form is used, writing to
-the file will provide input for \fIlist\fP. If the
-\fB<(\fP\fIlist\^\fP\fB)\fP form is used, the file passed as an
-argument should be read to obtain the output of \fIlist\fP.
-.PP
-When available, process substitution is performed
-simultaneously with parameter and variable expansion,
-command substitution,
-and arithmetic expansion.
-.SS Word Splitting
-.PP
-The shell scans the results of
-parameter expansion,
-command substitution,
-and
-arithmetic expansion
-that did not occur within double quotes for
-.IR "word splitting" .
-.PP
-The shell treats each character of
-.SM
-.B IFS
-as a delimiter, and splits the results of the other
-expansions into words using these characters as field terminators.
-If
-.SM
-.B IFS
-is unset, or its
-value is exactly
-.BR <space><tab><newline> ,
-the default, then
-sequences of
-.BR <space> ,
-.BR <tab> ,
-and
-.B <newline>
-at the beginning and end of the results of the previous
-expansions are ignored, and
-any sequence of
-.SM
-.B IFS
-characters not at the beginning or end serves to delimit words.
-If
-.SM
-.B IFS
-has a value other than the default, then sequences of
-the whitespace characters
-.B space
-and
-.B tab
-are ignored at the beginning and end of the
-word, as long as the whitespace character is in the
-value of
-.SM
-.BR IFS
-(an
-.SM
-.B IFS
-whitespace character).
-Any character in
-.SM
-.B IFS
-that is not
-.SM
-.B IFS
-whitespace, along with any adjacent
-.SM
-.B IFS
-whitespace characters, delimits a field.
-A sequence of
-.SM
-.B IFS
-whitespace characters is also treated as a delimiter.
-If the value of
-.SM
-.B IFS
-is null, no word splitting occurs.
-.PP
-Explicit null arguments (\^\f3"\^"\fP or \^\f3\(aq\^\(aq\fP\^) are retained.
-Unquoted implicit null arguments, resulting from the expansion of
-parameters that have no values, are removed.
-If a parameter with no value is expanded within double quotes, a
-null argument results and is retained.
-.PP
-Note that if no expansion occurs, no splitting
-is performed.
-.SS Pathname Expansion
-.PP
-After word splitting,
-unless the
-.B \-f
-option has been set,
-.B bash
-scans each word for the characters
-.BR * ,
-.BR ? ,
-and
-.BR [ .
-If one of these characters appears, then the word is
-regarded as a
-.IR pattern ,
-and replaced with an alphabetically sorted list of
-filenames matching the pattern
-(see
-.SM
-.B "Pattern Matching"
-below).
-If no matching filenames are found,
-and the shell option
-.B nullglob
-is not enabled, the word is left unchanged.
-If the
-.B nullglob
-option is set, and no matches are found,
-the word is removed.
-If the
-.B failglob
-shell option is set, and no matches are found, an error message
-is printed and the command is not executed.
-If the shell option
-.B nocaseglob
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-When a pattern is used for pathname expansion,
-the character
-.B ``.''
-at the start of a name or immediately following a slash
-must be matched explicitly, unless the shell option
-.B dotglob
-is set.
-When matching a pathname, the slash character must always be
-matched explicitly.
-In other cases, the
-.B ``.''
-character is not treated specially.
-See the description of
-.B shopt
-below under
-.SM
-.B SHELL BUILTIN COMMANDS
-for a description of the
-.BR nocaseglob ,
-.BR nullglob ,
-.BR failglob ,
-and
-.B dotglob
-shell options.
-.PP
-The
-.SM
-.B GLOBIGNORE
-shell variable may be used to restrict the set of filenames matching a
-.IR pattern .
-If
-.SM
-.B GLOBIGNORE
-is set, each matching filename that also matches one of the patterns in
-.SM
-.B GLOBIGNORE
-is removed from the list of matches.
-If the \fBnocaseglob\fP option is set, the matching against the patterns in
-.SM
-.B GLOBIGNORE
-is performed without regard to case.
-The filenames
-.B ``.''
-and
-.B ``..''
-are always ignored when
-.SM
-.B GLOBIGNORE
-is set and not null. However, setting
-.SM
-.B GLOBIGNORE
-to a non-null value has the effect of enabling the
-.B dotglob
-shell option, so all other filenames beginning with a
-.B ``.''
-will match.
-To get the old behavior of ignoring filenames beginning with a
-.BR ``.'' ,
-make
-.B ``.*''
-one of the patterns in
-.SM
-.BR GLOBIGNORE .
-The
-.B dotglob
-option is disabled when
-.SM
-.B GLOBIGNORE
-is unset.
-.PP
-\fBPattern Matching\fP
-.PP
-Any character that appears in a pattern, other than the special pattern
-characters described below, matches itself. The NUL character may not
-occur in a pattern. A backslash escapes the following character; the
-escaping backslash is discarded when matching.
-The special pattern characters must be quoted if
-they are to be matched literally.
-.PP
-The special pattern characters have the following meanings:
-.PP
-.PD 0
-.RS
-.TP
-.B *
-Matches any string, including the null string.
-When the \fBglobstar\fP shell option is enabled, and \fB*\fP is used in
-a pathname expansion context, two adjacent \fB*\fPs used as a single
-pattern will match all files and zero or more directories and
-subdirectories.
-If followed by a \fB/\fP, two adjacent \fB*\fPs will match only directories
-and subdirectories.
-.TP
-.B ?
-Matches any single character.
-.TP
-.B [...]
-Matches any one of the enclosed characters. A pair of characters
-separated by a hyphen denotes a
-\fIrange expression\fP;
-any character that falls between those two characters, inclusive,
-using the current locale's collating sequence and character set,
-is matched. If the first character following the
-.B [
-is a
-.B !
-or a
-.B ^
-then any character not enclosed is matched.
-The sorting order of characters in range expressions is determined by
-the current locale and the values of the
-.SM
-.B LC_COLLATE
-or
-.SM
-.B LC_ALL
-shell variables, if set.
-To obtain the traditional interpretation of range expressions, where
-.B [a\-d]
-is equivalent to
-.BR [abcd] ,
-set value of the
-.B LC_ALL
-shell variable to
-.BR C ,
-or enable the
-.B globasciiranges
-shell option.
-A
-.B \-
-may be matched by including it as the first or last character
-in the set.
-A
-.B ]
-may be matched by including it as the first character
-in the set.
-.br
-.if t .sp 0.5
-.if n .sp 1
-Within
-.B [
-and
-.BR ] ,
-\fIcharacter classes\fP can be specified using the syntax
-\fB[:\fP\fIclass\fP\fB:]\fP, where \fIclass\fP is one of the
-following classes defined in the POSIX standard:
-.PP
-.RS
-.B
-.if n alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
-.if t alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
-.br
-A character class matches any character belonging to that class.
-The \fBword\fP character class matches letters, digits, and the character _.
-.br
-.if t .sp 0.5
-.if n .sp 1
-Within
-.B [
-and
-.BR ] ,
-an \fIequivalence class\fP can be specified using the syntax
-\fB[=\fP\fIc\fP\fB=]\fP, which matches all characters with the
-same collation weight (as defined by the current locale) as
-the character \fIc\fP.
-.br
-.if t .sp 0.5
-.if n .sp 1
-Within
-.B [
-and
-.BR ] ,
-the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol
-\fIsymbol\fP.
-.RE
-.RE
-.PD
-.PP
-If the \fBextglob\fP shell option is enabled using the \fBshopt\fP
-builtin, several extended pattern matching operators are recognized.
-In the following description, a \fIpattern-list\fP is a list of one
-or more patterns separated by a \fB|\fP.
-Composite patterns may be formed using one or more of the following
-sub-patterns:
-.sp 1
-.PD 0
-.RS
-.TP
-\fB?(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches zero or one occurrence of the given patterns
-.TP
-\fB*(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches zero or more occurrences of the given patterns
-.TP
-\fB+(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches one or more occurrences of the given patterns
-.TP
-\fB@(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches one of the given patterns
-.TP
-\fB!(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches anything except one of the given patterns
-.RE
-.PD
-.SS Quote Removal
-.PP
-After the preceding expansions, all unquoted occurrences of the
-characters
-.BR \e ,
-.BR \(aq ,
-and \^\f3"\fP\^ that did not result from one of the above
-expansions are removed.
-.SH REDIRECTION
-Before a command is executed, its input and output
-may be
-.I redirected
-using a special notation interpreted by the shell.
-Redirection allows commands' file handles to be
-duplicated, opened, closed,
-made to refer to different files,
-and can change the files the command reads from and writes to.
-Redirection may also be used to modify file handles in the
-current shell execution environment.
-The following redirection
-operators may precede or appear anywhere within a
-.I simple command
-or may follow a
-.IR command .
-Redirections are processed in the order they appear, from
-left to right.
-.PP
-Each redirection that may be preceded by a file descriptor number
-may instead be preceded by a word of the form {\fIvarname\fP}.
-In this case, for each redirection operator except
->&- and <&-, the shell will allocate a file descriptor greater
-than or equal to 10 and assign it to \fIvarname\fP.
-If >&- or <&- is preceded
-by {\fIvarname\fP}, the value of \fIvarname\fP defines the file
-descriptor to close.
-.PP
-In the following descriptions, if the file descriptor number is
-omitted, and the first character of the redirection operator is
-.BR < ,
-the redirection refers to the standard input (file descriptor
-0). If the first character of the redirection operator is
-.BR > ,
-the redirection refers to the standard output (file descriptor
-1).
-.PP
-The word following the redirection operator in the following
-descriptions, unless otherwise noted, is subjected to
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, quote removal,
-pathname expansion, and word splitting.
-If it expands to more than one word,
-.B bash
-reports an error.
-.PP
-Note that the order of redirections is significant. For example,
-the command
-.RS
-.PP
-ls \fB>\fP dirlist 2\fB>&\fP1
-.RE
-.PP
-directs both standard output and standard error to the file
-.IR dirlist ,
-while the command
-.RS
-.PP
-ls 2\fB>&\fP1 \fB>\fP dirlist
-.RE
-.PP
-directs only the standard output to file
-.IR dirlist ,
-because the standard error was duplicated from the standard output
-before the standard output was redirected to
-.IR dirlist .
-.PP
-\fBBash\fP handles several filenames specially when they are used in
-redirections, as described in the following table:
-.RS
-.PP
-.PD 0
-.TP
-.B /dev/fd/\fIfd\fP
-If \fIfd\fP is a valid integer, file descriptor \fIfd\fP is duplicated.
-.TP
-.B /dev/stdin
-File descriptor 0 is duplicated.
-.TP
-.B /dev/stdout
-File descriptor 1 is duplicated.
-.TP
-.B /dev/stderr
-File descriptor 2 is duplicated.
-.TP
-.B /dev/tcp/\fIhost\fP/\fIport\fP
-If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
-is an integer port number or service name, \fBbash\fP attempts to open
-the corresponding TCP socket.
-.TP
-.B /dev/udp/\fIhost\fP/\fIport\fP
-If \fIhost\fP is a valid hostname or Internet address, and \fIport\fP
-is an integer port number or service name, \fBbash\fP attempts to open
-the corresponding UDP socket.
-.PD
-.RE
-.PP
-A failure to open or create a file causes the redirection to fail.
-.PP
-Redirections using file descriptors greater than 9 should be used with
-care, as they may conflict with file descriptors the shell uses
-internally.
-.SS Redirecting Input
-.PP
-Redirection of input causes the file whose name results from
-the expansion of
-.I word
-to be opened for reading on file descriptor
-.IR n ,
-or the standard input (file descriptor 0) if
-.I n
-is not specified.
-.PP
-The general format for redirecting input is:
-.RS
-.PP
-[\fIn\fP]\fB<\fP\fIword\fP
-.RE
-.SS Redirecting Output
-.PP
-Redirection of output causes the file whose name results from
-the expansion of
-.I word
-to be opened for writing on file descriptor
-.IR n ,
-or the standard output (file descriptor 1) if
-.I n
-is not specified. If the file does not exist it is created;
-if it does exist it is truncated to zero size.
-.PP
-The general format for redirecting output is:
-.RS
-.PP
-[\fIn\fP]\fB>\fP\fIword\fP
-.RE
-.PP
-If the redirection operator is
-.BR > ,
-and the
-.B noclobber
-option to the
-.B set
-builtin has been enabled, the redirection will fail if the file
-whose name results from the expansion of \fIword\fP exists and is
-a regular file.
-If the redirection operator is
-.BR >| ,
-or the redirection operator is
-.B >
-and the
-.B noclobber
-option to the
-.B set
-builtin command is not enabled, the redirection is attempted even
-if the file named by \fIword\fP exists.
-.SS Appending Redirected Output
-.PP
-Redirection of output in this fashion
-causes the file whose name results from
-the expansion of
-.I word
-to be opened for appending on file descriptor
-.IR n ,
-or the standard output (file descriptor 1) if
-.I n
-is not specified. If the file does not exist it is created.
-.PP
-The general format for appending output is:
-.RS
-.PP
-[\fIn\fP]\fB>>\fP\fIword\fP
-.RE
-.PP
-.SS Redirecting Standard Output and Standard Error
-.PP
-This construct allows both the
-standard output (file descriptor 1) and
-the standard error output (file descriptor 2)
-to be redirected to the file whose name is the
-expansion of
-.IR word .
-.PP
-There are two formats for redirecting standard output and
-standard error:
-.RS
-.PP
-\fB&>\fP\fIword\fP
-.RE
-and
-.RS
-\fB>&\fP\fIword\fP
-.RE
-.PP
-Of the two forms, the first is preferred.
-This is semantically equivalent to
-.RS
-.PP
-\fB>\fP\fIword\fP 2\fB>&\fP1
-.RE
-.PP
-When using the second form, \fIword\fP may not expand to a number or
-\fB\-\fP. If it does, other redirection operators apply
-(see \fBDuplicating File Descriptors\fP below) for compatibility
-reasons.
-.SS Appending Standard Output and Standard Error
-.PP
-This construct allows both the
-standard output (file descriptor 1) and
-the standard error output (file descriptor 2)
-to be appended to the file whose name is the
-expansion of
-.IR word .
-.PP
-The format for appending standard output and standard error is:
-.RS
-.PP
-\fB&>>\fP\fIword\fP
-.RE
-.PP
-This is semantically equivalent to
-.RS
-.PP
-\fB>>\fP\fIword\fP 2\fB>&\fP1
-.RE
-.PP
-(see \fBDuplicating File Descriptors\fP below).
-.SS Here Documents
-.PP
-This type of redirection instructs the shell to read input from the
-current source until a line containing only
-.I delimiter
-(with no trailing blanks)
-is seen. All of
-the lines read up to that point are then used as the standard
-input (or file descriptor \fIn\fP if \fIn\fP is specified) for a command.
-.PP
-The format of here-documents is:
-.RS
-.PP
-.nf
-[\fIn\fP]\fB<<\fP[\fB\-\fP]\fIword\fP
- \fIhere-document\fP
-\fIdelimiter\fP
-.fi
-.RE
-.PP
-No parameter and variable expansion, command substitution,
-arithmetic expansion, or pathname expansion is performed on
-.IR word .
-If any characters in
-.I word
-are quoted, the
-.I delimiter
-is the result of quote removal on
-.IR word ,
-and the lines in the here-document are not expanded.
-If \fIword\fP is unquoted,
-all lines of the here-document are subjected to
-parameter expansion, command substitution, and arithmetic expansion,
-the character sequence
-.B \e<newline>
-is ignored, and
-.B \e
-must be used to quote the characters
-.BR \e ,
-.BR $ ,
-and
-.BR \` .
-.PP
-If the redirection operator is
-.BR <<\- ,
-then all leading tab characters are stripped from input lines and the
-line containing
-.IR delimiter .
-This allows
-here-documents within shell scripts to be indented in a
-natural fashion.
-.SS "Here Strings"
-A variant of here documents, the format is:
-.RS
-.PP
-.nf
-[\fIn\fP]\fB<<<\fP\fIword\fP
-.fi
-.RE
-.PP
-The \fIword\fP undergoes
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote removal.
-Pathname expansion and word splitting are not performed.
-The result is supplied as a single string to the command on its
-standard input (or file descriptor \fIn\fP if \fIn\fP is specified).
-.SS "Duplicating File Descriptors"
-
-.PP
-The redirection operator
-.RS
-.PP
-[\fIn\fP]\fB<&\fP\fIword\fP
-.RE
-.PP
-is used to duplicate input file descriptors.
-If
-.I word
-expands to one or more digits, the file descriptor denoted by
-.I n
-is made to be a copy of that file descriptor.
-If the digits in
-.I word
-do not specify a file descriptor open for input, a redirection error occurs.
-If
-.I word
-evaluates to
-.BR \- ,
-file descriptor
-.I n
-is closed. If
-.I n
-is not specified, the standard input (file descriptor 0) is used.
-.PP
-The operator
-.RS
-.PP
-[\fIn\fP]\fB>&\fP\fIword\fP
-.RE
-.PP
-is used similarly to duplicate output file descriptors. If
-.I n
-is not specified, the standard output (file descriptor 1) is used.
-If the digits in
-.I word
-do not specify a file descriptor open for output, a redirection error occurs.
-If
-.I word
-evaluates to
-.BR \- ,
-file descriptor
-.I n
-is closed.
-As a special case, if \fIn\fP is omitted, and \fIword\fP does not
-expand to one or more digits or \fB\-\fP, the standard output and standard
-error are redirected as described previously.
-.SS "Moving File Descriptors"
-.PP
-The redirection operator
-.RS
-.PP
-[\fIn\fP]\fB<&\fP\fIdigit\fP\fB\-\fP
-.RE
-.PP
-moves the file descriptor \fIdigit\fP to file descriptor
-.IR n ,
-or the standard input (file descriptor 0) if \fIn\fP is not specified.
-\fIdigit\fP is closed after being duplicated to \fIn\fP.
-.PP
-Similarly, the redirection operator
-.RS
-.PP
-[\fIn\fP]\fB>&\fP\fIdigit\fP\fB\-\fP
-.RE
-.PP
-moves the file descriptor \fIdigit\fP to file descriptor
-.IR n ,
-or the standard output (file descriptor 1) if \fIn\fP is not specified.
-.SS "Opening File Descriptors for Reading and Writing"
-.PP
-The redirection operator
-.RS
-.PP
-[\fIn\fP]\fB<>\fP\fIword\fP
-.RE
-.PP
-causes the file whose name is the expansion of
-.I word
-to be opened for both reading and writing on file descriptor
-.IR n ,
-or on file descriptor 0 if
-.I n
-is not specified. If the file does not exist, it is created.
-.SH ALIASES
-\fIAliases\fP allow a string to be substituted for a word when it is used
-as the first word of a simple command.
-The shell maintains a list of aliases that may be set and unset with the
-.B alias
-and
-.B unalias
-builtin commands (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-The first word of each simple command, if unquoted,
-is checked to see if it has an
-alias. If so, that word is replaced by the text of the alias.
-The characters \fB/\fP, \fB$\fP, \fB\`\fP, and \fB=\fP and
-any of the shell \fImetacharacters\fP or quoting characters
-listed above may not appear in an alias name.
-The replacement text may contain any valid shell input,
-including shell metacharacters.
-The first word of the replacement text is tested
-for aliases, but a word that is identical to an alias being expanded
-is not expanded a second time.
-This means that one may alias
-.B ls
-to
-.BR "ls \-F" ,
-for instance, and
-.B bash
-does not try to recursively expand the replacement text.
-If the last character of the alias value is a
-.IR blank ,
-then the next command
-word following the alias is also checked for alias expansion.
-.PP
-Aliases are created and listed with the
-.B alias
-command, and removed with the
-.B unalias
-command.
-.PP
-There is no mechanism for using arguments in the replacement text.
-If arguments are needed, a shell function should be used (see
-.SM
-.B FUNCTIONS
-below).
-.PP
-Aliases are not expanded when the shell is not interactive, unless
-the
-.B expand_aliases
-shell option is set using
-.B shopt
-(see the description of
-.B shopt
-under
-.SM
-\fBSHELL BUILTIN COMMANDS\fP
-below).
-.PP
-The rules concerning the definition and use of aliases are
-somewhat confusing.
-.B Bash
-always reads at least one complete line
-of input before executing any
-of the commands on that line. Aliases are expanded when a
-command is read, not when it is executed. Therefore, an
-alias definition appearing on the same line as another
-command does not take effect until the next line of input is read.
-The commands following the alias definition
-on that line are not affected by the new alias.
-This behavior is also an issue when functions are executed.
-Aliases are expanded when a function definition is read,
-not when the function is executed, because a function definition
-is itself a command. As a consequence, aliases
-defined in a function are not available until after that
-function is executed. To be safe, always put
-alias definitions on a separate line, and do not use
-.B alias
-in compound commands.
-.PP
-For almost every purpose, aliases are superseded by
-shell functions.
-.SH FUNCTIONS
-A shell function, defined as described above under
-.SM
-.BR "SHELL GRAMMAR" ,
-stores a series of commands for later execution.
-When the name of a shell function is used as a simple command name,
-the list of commands associated with that function name is executed.
-Functions are executed in the context of the
-current shell; no new process is created to interpret
-them (contrast this with the execution of a shell script).
-When a function is executed, the arguments to the
-function become the positional parameters
-during its execution.
-The special parameter
-.B #
-is updated to reflect the change. Special parameter \fB0\fP
-is unchanged.
-The first element of the
-.SM
-.B FUNCNAME
-variable is set to the name of the function while the function
-is executing.
-.PP
-All other aspects of the shell execution
-environment are identical between a function and its caller
-with these exceptions: the
-.SM
-.B DEBUG
-and
-.B RETURN
-traps (see the description of the
-.B trap
-builtin under
-.SM
-.B SHELL BUILTIN COMMANDS
-below) are not inherited unless the function has been given the
-\fBtrace\fP attribute (see the description of the
-.SM
-.B declare
-builtin below) or the
-\fB\-o functrace\fP shell option has been enabled with
-the \fBset\fP builtin
-(in which case all functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps),
-and the
-.SM
-.B ERR
-trap is not inherited unless the \fB\-o errtrace\fP shell option has
-been enabled.
-.PP
-Variables local to the function may be declared with the
-.B local
-builtin command. Ordinarily, variables and their values
-are shared between the function and its caller.
-.PP
-The \fBFUNCNEST\fP variable, if set to a numeric value greater
-than 0, defines a maximum function nesting level. Function
-invocations that exceed the limit cause the entire command to
-abort.
-.PP
-If the builtin command
-.B return
-is executed in a function, the function completes and
-execution resumes with the next command after the function
-call.
-Any command associated with the \fBRETURN\fP trap is executed
-before execution resumes.
-When a function completes, the values of the
-positional parameters and the special parameter
-.B #
-are restored to the values they had prior to the function's
-execution.
-.PP
-Function names and definitions may be listed with the
-.B \-f
-option to the
-.B declare
-or
-.B typeset
-builtin commands. The
-.B \-F
-option to
-.B declare
-or
-.B typeset
-will list the function names only
-(and optionally the source file and line number, if the \fBextdebug\fP
-shell option is enabled).
-Functions may be exported so that subshells
-automatically have them defined with the
-.B \-f
-option to the
-.B export
-builtin.
-A function definition may be deleted using the \fB\-f\fP option to
-the
-.B unset
-builtin.
-Note that shell functions and variables with the same name may result
-in multiple identically-named entries in the environment passed to the
-shell's children.
-Care should be taken in cases where this may cause a problem.
-.PP
-Functions may be recursive.
-The \fBFUNCNEST\fP variable may be used to limit the depth of the
-function call stack and restrict the number of function invocations.
-By default, no limit is imposed on the number of recursive calls.
-.SH "ARITHMETIC EVALUATION"
-The shell allows arithmetic expressions to be evaluated, under
-certain circumstances (see the \fBlet\fP and \fBdeclare\fP builtin
-commands and \fBArithmetic Expansion\fP).
-Evaluation is done in fixed-width integers with no check for overflow,
-though division by 0 is trapped and flagged as an error.
-The operators and their precedence, associativity, and values
-are the same as in the C language.
-The following list of operators is grouped into levels of
-equal-precedence operators.
-The levels are listed in order of decreasing precedence.
-.PP
-.PD 0
-.TP
-.B \fIid\fP++ \fIid\fP\-\-
-variable post-increment and post-decrement
-.TP
-.B ++\fIid\fP \-\-\fIid\fP
-variable pre-increment and pre-decrement
-.TP
-.B \- +
-unary minus and plus
-.TP
-.B ! ~
-logical and bitwise negation
-.TP
-.B **
-exponentiation
-.TP
-.B * / %
-multiplication, division, remainder
-.TP
-.B + \-
-addition, subtraction
-.TP
-.B << >>
-left and right bitwise shifts
-.TP
-.B <= >= < >
-comparison
-.TP
-.B == !=
-equality and inequality
-.TP
-.B &
-bitwise AND
-.TP
-.B ^
-bitwise exclusive OR
-.TP
-.B |
-bitwise OR
-.TP
-.B &&
-logical AND
-.TP
-.B ||
-logical OR
-.TP
-.B \fIexpr\fP?\fIexpr\fP:\fIexpr\fP
-conditional operator
-.TP
-.B = *= /= %= += \-= <<= >>= &= ^= |=
-assignment
-.TP
-.B \fIexpr1\fP , \fIexpr2\fP
-comma
-.PD
-.PP
-Shell variables are allowed as operands; parameter expansion is
-performed before the expression is evaluated.
-Within an expression, shell variables may also be referenced by name
-without using the parameter expansion syntax.
-A shell variable that is null or unset evaluates to 0 when referenced
-by name without using the parameter expansion syntax.
-The value of a variable is evaluated as an arithmetic expression
-when it is referenced, or when a variable which has been given the
-\fIinteger\fP attribute using \fBdeclare -i\fP is assigned a value.
-A null value evaluates to 0.
-A shell variable need not have its \fIinteger\fP attribute
-turned on to be used in an expression.
-.PP
-Constants with a leading 0 are interpreted as octal numbers.
-A leading 0x or 0X denotes hexadecimal.
-Otherwise, numbers take the form [\fIbase#\fP]n, where the optional \fIbase\fP
-is a decimal number between 2 and 64 representing the arithmetic
-base, and \fIn\fP is a number in that base.
-If \fIbase#\fP is omitted, then base 10 is used.
-When specifying \fIn\fP,
-the digits greater< than 9 are represented by the lowercase letters,
-the uppercase letters, @, and _, in that order.
-If \fIbase\fP is less than or equal to 36, lowercase and uppercase
-letters may be used interchangeably to represent numbers between 10
-and 35.
-.PP
-Operators are evaluated in order of precedence. Sub-expressions in
-parentheses are evaluated first and may override the precedence
-rules above.
-.SH "CONDITIONAL EXPRESSIONS"
-Conditional expressions are used by the \fB[[\fP compound command and
-the \fBtest\fP and \fB[\fP builtin commands to test file attributes
-and perform string and arithmetic comparisons.
-Expressions are formed from the following unary or binary primaries.
-If any \fIfile\fP argument to one of the primaries is of the form
-\fI/dev/fd/n\fP, then file descriptor \fIn\fP is checked.
-If the \fIfile\fP argument to one of the primaries is one of
-\fI/dev/stdin\fP, \fI/dev/stdout\fP, or \fI/dev/stderr\fP, file
-descriptor 0, 1, or 2, respectively, is checked.
-.PP
-Unless otherwise specified, primaries that operate on files follow symbolic
-links and operate on the target of the link, rather than the link itself.
-.if t .sp 0.5
-.if n .sp 1
-When used with \fB[[\fP, the \fB<\fP and \fB>\fP operators sort
-lexicographically using the current locale.
-The \fBtest\fP command sorts using ASCII ordering.
-.sp 1
-.PD 0
-.TP
-.B \-a \fIfile\fP
-True if \fIfile\fP exists.
-.TP
-.B \-b \fIfile\fP
-True if \fIfile\fP exists and is a block special file.
-.TP
-.B \-c \fIfile\fP
-True if \fIfile\fP exists and is a character special file.
-.TP
-.B \-d \fIfile\fP
-True if \fIfile\fP exists and is a directory.
-.TP
-.B \-e \fIfile\fP
-True if \fIfile\fP exists.
-.TP
-.B \-f \fIfile\fP
-True if \fIfile\fP exists and is a regular file.
-.TP
-.B \-g \fIfile\fP
-True if \fIfile\fP exists and is set-group-id.
-.TP
-.B \-h \fIfile\fP
-True if \fIfile\fP exists and is a symbolic link.
-.TP
-.B \-k \fIfile\fP
-True if \fIfile\fP exists and its ``sticky'' bit is set.
-.TP
-.B \-p \fIfile\fP
-True if \fIfile\fP exists and is a named pipe (FIFO).
-.TP
-.B \-r \fIfile\fP
-True if \fIfile\fP exists and is readable.
-.TP
-.B \-s \fIfile\fP
-True if \fIfile\fP exists and has a size greater than zero.
-.TP
-.B \-t \fIfd\fP
-True if file descriptor
-.I fd
-is open and refers to a terminal.
-.TP
-.B \-u \fIfile\fP
-True if \fIfile\fP exists and its set-user-id bit is set.
-.TP
-.B \-w \fIfile\fP
-True if \fIfile\fP exists and is writable.
-.TP
-.B \-x \fIfile\fP
-True if \fIfile\fP exists and is executable.
-.TP
-.B \-G \fIfile\fP
-True if \fIfile\fP exists and is owned by the effective group id.
-.TP
-.B \-L \fIfile\fP
-True if \fIfile\fP exists and is a symbolic link.
-.TP
-.B \-N \fIfile\fP
-True if \fIfile\fP exists and has been modified since it was last read.
-.TP
-.B \-O \fIfile\fP
-True if \fIfile\fP exists and is owned by the effective user id.
-.TP
-.B \-S \fIfile\fP
-True if \fIfile\fP exists and is a socket.
-.TP
-\fIfile1\fP \fB\-ef\fP \fIfile2\fP
-True if \fIfile1\fP and \fIfile2\fP refer to the same device and
-inode numbers.
-.TP
-\fIfile1\fP \-\fBnt\fP \fIfile2\fP
-True if \fIfile1\fP is newer (according to modification date) than \fIfile2\fP,
-or if \fIfile1\fP exists and \fPfile2\fP does not.
-.TP
-\fIfile1\fP \-\fBot\fP \fIfile2\fP
-True if \fIfile1\fP is older than \fIfile2\fP, or if \fIfile2\fP exists
-and \fIfile1\fP does not.
-.TP
-.B \-o \fIoptname\fP
-True if the shell option
-.I optname
-is enabled.
-See the list of options under the description of the
-.B \-o
-option to the
-.B set
-builtin below.
-.TP
-.B \-v \fIvarname\fP
-True if the shell variable
-.I varname
-is set (has been assigned a value).
-.TP
-.B \-R \fIvarname\fP
-True if the shell variable
-.I varname
-is set and is a name reference.
-.TP
-.B \-z \fIstring\fP
-True if the length of \fIstring\fP is zero.
-.TP
-\fIstring\fP
-.PD 0
-.TP
-.B \-n \fIstring\fP
-.PD
-True if the length of
-.I string
-is non-zero.
-.TP
-\fIstring1\fP \fB==\fP \fIstring2\fP
-.PD 0
-.TP
-\fIstring1\fP \fB=\fP \fIstring2\fP
-.PD
-True if the strings are equal. \fB=\fP should be used
-with the \fBtest\fP command for POSIX conformance.
-When used with the \fB[[\fP command, this performs pattern matching as
-described above (\fBCompound Commands\fP).
-.TP
-\fIstring1\fP \fB!=\fP \fIstring2\fP
-True if the strings are not equal.
-.TP
-\fIstring1\fP \fB<\fP \fIstring2\fP
-True if \fIstring1\fP sorts before \fIstring2\fP lexicographically.
-.TP
-\fIstring1\fP \fB>\fP \fIstring2\fP
-True if \fIstring1\fP sorts after \fIstring2\fP lexicographically.
-.TP
-.I \fIarg1\fP \fBOP\fP \fIarg2\fP
-.SM
-.B OP
-is one of
-.BR \-eq ,
-.BR \-ne ,
-.BR \-lt ,
-.BR \-le ,
-.BR \-gt ,
-or
-.BR \-ge .
-These arithmetic binary operators return true if \fIarg1\fP
-is equal to, not equal to, less than, less than or equal to,
-greater than, or greater than or equal to \fIarg2\fP, respectively.
-.I Arg1
-and
-.I arg2
-may be positive or negative integers.
-.PD
-.SH "SIMPLE COMMAND EXPANSION"
-When a simple command is executed, the shell performs the following
-expansions, assignments, and redirections, from left to right.
-.IP 1.
-The words that the parser has marked as variable assignments (those
-preceding the command name) and redirections are saved for later
-processing.
-.IP 2.
-The words that are not variable assignments or redirections are
-expanded. If any words remain after expansion, the first word
-is taken to be the name of the command and the remaining words are
-the arguments.
-.IP 3.
-Redirections are performed as described above under
-.SM
-.BR REDIRECTION .
-.IP 4.
-The text after the \fB=\fP in each variable assignment undergoes tilde
-expansion, parameter expansion, command substitution, arithmetic expansion,
-and quote removal before being assigned to the variable.
-.PP
-If no command name results, the variable assignments affect the current
-shell environment. Otherwise, the variables are added to the environment
-of the executed command and do not affect the current shell environment.
-If any of the assignments attempts to assign a value to a readonly variable,
-an error occurs, and the command exits with a non-zero status.
-.PP
-If no command name results, redirections are performed, but do not
-affect the current shell environment. A redirection error causes the
-command to exit with a non-zero status.
-.PP
-If there is a command name left after expansion, execution proceeds as
-described below. Otherwise, the command exits. If one of the expansions
-contained a command substitution, the exit status of the command is
-the exit status of the last command substitution performed. If there
-were no command substitutions, the command exits with a status of zero.
-.SH "COMMAND EXECUTION"
-After a command has been split into words, if it results in a
-simple command and an optional list of arguments, the following
-actions are taken.
-.PP
-If the command name contains no slashes, the shell attempts to
-locate it. If there exists a shell function by that name, that
-function is invoked as described above in
-.SM
-.BR FUNCTIONS .
-If the name does not match a function, the shell searches for
-it in the list of shell builtins. If a match is found, that
-builtin is invoked.
-.PP
-If the name is neither a shell function nor a builtin,
-and contains no slashes,
-.B bash
-searches each element of the
-.SM
-.B PATH
-for a directory containing an executable file by that name.
-.B Bash
-uses a hash table to remember the full pathnames of executable
-files (see
-.B hash
-under
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below).
-A full search of the directories in
-.SM
-.B PATH
-is performed only if the command is not found in the hash table.
-If the search is unsuccessful, the shell searches for a defined shell
-function named \fBcommand_not_found_handle\fP.
-If that function exists, it is invoked with the original command and
-the original command's arguments as its arguments, and the function's
-exit status becomes the exit status of the shell.
-If that function is not defined, the shell prints an error
-message and returns an exit status of 127.
-.PP
-If the search is successful, or if the command name contains
-one or more slashes, the shell executes the named program in a
-separate execution environment.
-Argument 0 is set to the name given, and the remaining arguments
-to the command are set to the arguments given, if any.
-.PP
-If this execution fails because the file is not in executable
-format, and the file is not a directory, it is assumed to be
-a \fIshell script\fP, a file
-containing shell commands. A subshell is spawned to execute
-it. This subshell reinitializes itself, so
-that the effect is as if a new shell had been invoked
-to handle the script, with the exception that the locations of
-commands remembered by the parent (see
-.B hash
-below under
-.SM
-\fBSHELL BUILTIN COMMANDS\fP)
-are retained by the child.
-.PP
-If the program is a file beginning with
-.BR #! ,
-the remainder of the first line specifies an interpreter
-for the program. The shell executes the
-specified interpreter on operating systems that do not
-handle this executable format themselves. The arguments to the
-interpreter consist of a single optional argument following the
-interpreter name on the first line of the program, followed
-by the name of the program, followed by the command
-arguments, if any.
-.SH COMMAND EXECUTION ENVIRONMENT
-The shell has an \fIexecution environment\fP, which consists of the
-following:
-.IP \(bu
-open files inherited by the shell at invocation, as modified by
-redirections supplied to the \fBexec\fP builtin
-.IP \(bu
-the current working directory as set by \fBcd\fP, \fBpushd\fP, or
-\fBpopd\fP, or inherited by the shell at invocation
-.IP \(bu
-the file creation mode mask as set by \fBumask\fP or inherited from
-the shell's parent
-.IP \(bu
-current traps set by \fBtrap\fP
-.IP \(bu
-shell parameters that are set by variable assignment or with \fBset\fP
-or inherited from the shell's parent in the environment
-.IP \(bu
-shell functions defined during execution or inherited from the shell's
-parent in the environment
-.IP \(bu
-options enabled at invocation (either by default or with command-line
-arguments) or by \fBset\fP
-.IP \(bu
-options enabled by \fBshopt\fP
-.IP \(bu
-shell aliases defined with \fBalias\fP
-.IP \(bu
-various process IDs, including those of background jobs, the value
-of \fB$$\fP, and the value of
-.SM
-.B PPID
-.PP
-When a simple command other than a builtin or shell function
-is to be executed, it
-is invoked in a separate execution environment that consists of
-the following. Unless otherwise noted, the values are inherited
-from the shell.
-.if n .sp 1
-.IP \(bu
-the shell's open files, plus any modifications and additions specified
-by redirections to the command
-.IP \(bu
-the current working directory
-.IP \(bu
-the file creation mode mask
-.IP \(bu
-shell variables and functions marked for export, along with variables
-exported for the command, passed in the environment
-.IP \(bu
-traps caught by the shell are reset to the values inherited from the
-shell's parent, and traps ignored by the shell are ignored
-.PP
-A command invoked in this separate environment cannot affect the
-shell's execution environment.
-.PP
-Command substitution, commands grouped with parentheses,
-and asynchronous commands are invoked in a
-subshell environment that is a duplicate of the shell environment,
-except that traps caught by the shell are reset to the values
-that the shell inherited from its parent at invocation. Builtin
-commands that are invoked as part of a pipeline are also executed in a
-subshell environment. Changes made to the subshell environment
-cannot affect the shell's execution environment.
-.PP
-Subshells spawned to execute command substitutions inherit the value of
-the \fB\-e\fP option from the parent shell. When not in \fIposix\fP mode,
-\fBbash\fP clears the \fB\-e\fP option in such subshells.
-.PP
-If a command is followed by a \fB&\fP and job control is not active, the
-default standard input for the command is the empty file \fI/dev/null\fP.
-Otherwise, the invoked command inherits the file descriptors of the calling
-shell as modified by redirections.
-.SH ENVIRONMENT
-When a program is invoked it is given an array of strings
-called the
-.IR environment .
-This is a list of
-\fIname\fP\-\fIvalue\fP pairs, of the form
-.IR "name\fR=\fPvalue" .
-.PP
-The shell provides several ways to manipulate the environment.
-On invocation, the shell scans its own environment and
-creates a parameter for each name found, automatically marking
-it for
-.I export
-to child processes. Executed commands inherit the environment.
-The
-.B export
-and
-.B declare \-x
-commands allow parameters and functions to be added to and
-deleted from the environment. If the value of a parameter
-in the environment is modified, the new value becomes part
-of the environment, replacing the old. The environment
-inherited by any executed command consists of the shell's
-initial environment, whose values may be modified in the shell,
-less any pairs removed by the
-.B unset
-command, plus any additions via the
-.B export
-and
-.B declare \-x
-commands.
-.PP
-The environment for any
-.I simple command
-or function may be augmented temporarily by prefixing it with
-parameter assignments, as described above in
-.SM
-.BR PARAMETERS .
-These assignment statements affect only the environment seen
-by that command.
-.PP
-If the
-.B \-k
-option is set (see the
-.B set
-builtin command below), then
-.I all
-parameter assignments are placed in the environment for a command,
-not just those that precede the command name.
-.PP
-When
-.B bash
-invokes an external command, the variable
-.B _
-is set to the full filename of the command and passed to that
-command in its environment.
-.SH "EXIT STATUS"
-.PP
-The exit status of an executed command is the value returned by the
-\fIwaitpid\fP system call or equivalent function. Exit statuses
-fall between 0 and 255, though, as explained below, the shell may
-use values above 125 specially. Exit statuses from shell builtins and
-compound commands are also limited to this range. Under certain
-circumstances, the shell will use special values to indicate specific
-failure modes.
-.PP
-For the shell's purposes, a command which exits with a
-zero exit status has succeeded. An exit status of zero
-indicates success. A non-zero exit status indicates failure.
-When a command terminates on a fatal signal \fIN\fP, \fBbash\fP uses
-the value of 128+\fIN\fP as the exit status.
-.PP
-If a command is not found, the child process created to
-execute it returns a status of 127. If a command is found
-but is not executable, the return status is 126.
-.PP
-If a command fails because of an error during expansion or redirection,
-the exit status is greater than zero.
-.PP
-Shell builtin commands return a status of 0 (\fItrue\fP) if
-successful, and non-zero (\fIfalse\fP) if an error occurs
-while they execute.
-All builtins return an exit status of 2 to indicate incorrect usage,
-generally invalid options or missing arguments.
-.PP
-\fBBash\fP itself returns the exit status of the last command
-executed, unless a syntax error occurs, in which case it exits
-with a non-zero value. See also the \fBexit\fP builtin
-command below.
-.SH SIGNALS
-When \fBbash\fP is interactive, in the absence of any traps, it ignores
-.SM
-.B SIGTERM
-(so that \fBkill 0\fP does not kill an interactive shell),
-and
-.SM
-.B SIGINT
-is caught and handled (so that the \fBwait\fP builtin is interruptible).
-In all cases, \fBbash\fP ignores
-.SM
-.BR SIGQUIT .
-If job control is in effect,
-.B bash
-ignores
-.SM
-.BR SIGTTIN ,
-.SM
-.BR SIGTTOU ,
-and
-.SM
-.BR SIGTSTP .
-.PP
-Non-builtin commands run by \fBbash\fP have signal handlers
-set to the values inherited by the shell from its parent.
-When job control is not in effect, asynchronous commands
-ignore
-.SM
-.B SIGINT
-and
-.SM
-.B SIGQUIT
-in addition to these inherited handlers.
-Commands run as a result of command substitution ignore the
-keyboard-generated job control signals
-.SM
-.BR SIGTTIN ,
-.SM
-.BR SIGTTOU ,
-and
-.SM
-.BR SIGTSTP .
-.PP
-The shell exits by default upon receipt of a
-.SM
-.BR SIGHUP .
-Before exiting, an interactive shell resends the
-.SM
-.B SIGHUP
-to all jobs, running or stopped.
-Stopped jobs are sent
-.SM
-.B SIGCONT
-to ensure that they receive the
-.SM
-.BR SIGHUP .
-To prevent the shell from
-sending the signal to a particular job, it should be removed from the
-jobs table with the
-.B disown
-builtin (see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below) or marked
-to not receive
-.SM
-.B SIGHUP
-using
-.BR "disown \-h" .
-.PP
-If the
-.B huponexit
-shell option has been set with
-.BR shopt ,
-.B bash
-sends a
-.SM
-.B SIGHUP
-to all jobs when an interactive login shell exits.
-.PP
-If \fBbash\fP is waiting for a command to complete and receives a signal
-for which a trap has been set, the trap will not be executed until
-the command completes.
-When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
-builtin, the reception of a signal for which a trap has been set will
-cause the \fBwait\fP builtin to return immediately with an exit status
-greater than 128, immediately after which the trap is executed.
-.SH "JOB CONTROL"
-.I Job control
-refers to the ability to selectively stop (\fIsuspend\fP)
-the execution of processes and continue (\fIresume\fP)
-their execution at a later point. A user typically employs
-this facility via an interactive interface supplied jointly
-by the operating system kernel's terminal driver and
-.BR bash .
-.PP
-The shell associates a
-.I job
-with each pipeline. It keeps a table of currently executing
-jobs, which may be listed with the
-.B jobs
-command. When
-.B bash
-starts a job asynchronously (in the
-.IR background ),
-it prints a line that looks like:
-.RS
-.PP
-[1] 25647
-.RE
-.PP
-indicating that this job is job number 1 and that the process ID
-of the last process in the pipeline associated with this job is 25647.
-All of the processes in a single pipeline are members of the same job.
-.B Bash
-uses the
-.I job
-abstraction as the basis for job control.
-.PP
-To facilitate the implementation of the user interface to job
-control, the operating system maintains the notion of a \fIcurrent terminal
-process group ID\fP. Members of this process group (processes whose
-process group ID is equal to the current terminal process group ID)
-receive keyboard-generated signals such as
-.SM
-.BR SIGINT .
-These processes are said to be in the
-.IR foreground .
-.I Background
-processes are those whose process group ID differs from the terminal's;
-such processes are immune to keyboard-generated signals.
-Only foreground processes are allowed to read from or, if the
-user so specifies with \f(CWstty tostop\fP, write to the
-terminal.
-Background processes which attempt to read from (write to when
-\f(CWstty tostop\fP is in effect) the
-terminal are sent a
-.SM
-.B SIGTTIN (SIGTTOU)
-signal by the kernel's terminal driver,
-which, unless caught, suspends the process.
-.PP
-If the operating system on which
-.B bash
-is running supports
-job control,
-.B bash
-contains facilities to use it.
-Typing the
-.I suspend
-character (typically
-.BR ^Z ,
-Control-Z) while a process is running
-causes that process to be stopped and returns control to
-.BR bash .
-Typing the
-.I "delayed suspend"
-character (typically
-.BR ^Y ,
-Control-Y) causes the process to be stopped when it
-attempts to read input from the terminal, and control to
-be returned to
-.BR bash .
-The user may then manipulate the state of this job, using the
-.B bg
-command to continue it in the background, the
-.B fg
-command to continue it in the foreground, or
-the
-.B kill
-command to kill it. A \fB^Z\fP takes effect immediately,
-and has the additional side effect of causing pending output
-and typeahead to be discarded.
-.PP
-There are a number of ways to refer to a job in the shell.
-The character
-.B %
-introduces a job specification (\fIjobspec\fP). Job number
-.I n
-may be referred to as
-.BR %n .
-A job may also be referred to using a prefix of the name used to
-start it, or using a substring that appears in its command line.
-For example,
-.B %ce
-refers to a stopped
-.B ce
-job. If a prefix matches more than one job,
-.B bash
-reports an error. Using
-.BR %?ce ,
-on the other hand, refers to any job containing the string
-.B ce
-in its command line. If the substring matches more than one job,
-.B bash
-reports an error. The symbols
-.B %%
-and
-.B %+
-refer to the shell's notion of the
-.IR "current job" ,
-which is the last job stopped while it was in
-the foreground or started in the background.
-The
-.I "previous job"
-may be referenced using
-.BR %\- .
-If there is only a single job, \fB%+\fP and \fB%\-\fP can both be used
-to refer to that job.
-In output pertaining to jobs (e.g., the output of the
-.B jobs
-command), the current job is always flagged with a
-.BR + ,
-and the previous job with a
-.BR \- .
-A single % (with no accompanying job specification) also refers to the
-current job.
-.PP
-Simply naming a job can be used to bring it into the
-foreground:
-.B %1
-is a synonym for
-\fB``fg %1''\fP,
-bringing job 1 from the background into the foreground.
-Similarly,
-.B ``%1 &''
-resumes job 1 in the background, equivalent to
-\fB``bg %1''\fP.
-.PP
-The shell learns immediately whenever a job changes state.
-Normally,
-.B bash
-waits until it is about to print a prompt before reporting
-changes in a job's status so as to not interrupt
-any other output. If the
-.B \-b
-option to the
-.B set
-builtin command
-is enabled,
-.B bash
-reports such changes immediately.
-Any trap on
-.SM
-.B SIGCHLD
-is executed for each child that exits.
-.PP
-If an attempt to exit
-.B bash
-is made while jobs are stopped (or, if the \fBcheckjobs\fP shell option has
-been enabled using the \fBshopt\fP builtin, running), the shell prints a
-warning message, and, if the \fBcheckjobs\fP option is enabled, lists the
-jobs and their statuses.
-The
-.B jobs
-command may then be used to inspect their status.
-If a second attempt to exit is made without an intervening command,
-the shell does not print another warning, and any stopped
-jobs are terminated.
-.SH PROMPTING
-When executing interactively,
-.B bash
-displays the primary prompt
-.SM
-.B PS1
-when it is ready to read a command, and the secondary prompt
-.SM
-.B PS2
-when it needs more input to complete a command.
-.B Bash
-allows these prompt strings to be customized by inserting a number of
-backslash-escaped special characters that are decoded as follows:
-.RS
-.PD 0
-.TP
-.B \ea
-an ASCII bell character (07)
-.TP
-.B \ed
-the date in "Weekday Month Date" format (e.g., "Tue May 26")
-.TP
-.B \eD{\fIformat\fP}
-the \fIformat\fP is passed to \fIstrftime\fP(3) and the result is inserted
-into the prompt string; an empty \fIformat\fP results in a locale-specific
-time representation. The braces are required
-.TP
-.B \ee
-an ASCII escape character (033)
-.TP
-.B \eh
-the hostname up to the first `.'
-.TP
-.B \eH
-the hostname
-.TP
-.B \ej
-the number of jobs currently managed by the shell
-.TP
-.B \el
-the basename of the shell's terminal device name
-.TP
-.B \en
-newline
-.TP
-.B \er
-carriage return
-.TP
-.B \es
-the name of the shell, the basename of
-.B $0
-(the portion following the final slash)
-.TP
-.B \et
-the current time in 24-hour HH:MM:SS format
-.TP
-.B \eT
-the current time in 12-hour HH:MM:SS format
-.TP
-.B \e@
-the current time in 12-hour am/pm format
-.TP
-.B \eA
-the current time in 24-hour HH:MM format
-.TP
-.B \eu
-the username of the current user
-.TP
-.B \ev
-the version of \fBbash\fP (e.g., 2.00)
-.TP
-.B \eV
-the release of \fBbash\fP, version + patch level (e.g., 2.00.0)
-.TP
-.B \ew
-the current working directory, with
-.SM
-.B $HOME
-abbreviated with a tilde
-(uses the value of the
-.SM
-.B PROMPT_DIRTRIM
-variable)
-.TP
-.B \eW
-the basename of the current working directory, with
-.SM
-.B $HOME
-abbreviated with a tilde
-.TP
-.B \e!
-the history number of this command
-.TP
-.B \e#
-the command number of this command
-.TP
-.B \e$
-if the effective UID is 0, a
-.BR # ,
-otherwise a
-.B $
-.TP
-.B \e\fInnn\fP
-the character corresponding to the octal number \fInnn\fP
-.TP
-.B \e\e
-a backslash
-.TP
-.B \e[
-begin a sequence of non-printing characters, which could be used to
-embed a terminal control sequence into the prompt
-.TP
-.B \e]
-end a sequence of non-printing characters
-.PD
-.RE
-.PP
-The command number and the history number are usually different:
-the history number of a command is its position in the history
-list, which may include commands restored from the history file
-(see
-.SM
-.B HISTORY
-below), while the command number is the position in the sequence
-of commands executed during the current shell session.
-After the string is decoded, it is expanded via
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal, subject to the value of the
-.B promptvars
-shell option (see the description of the
-.B shopt
-command under
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below).
-.SH READLINE
-This is the library that handles reading input when using an interactive
-shell, unless the
-.B \-\-noediting
-option is given at shell invocation.
-Line editing is also used when using the \fB\-e\fP option to the
-\fBread\fP builtin.
-By default, the line editing commands are similar to those of Emacs.
-A vi-style line editing interface is also available.
-Line editing can be enabled at any time using the
-.B \-o emacs
-or
-.B \-o vi
-options to the
-.B set
-builtin (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-To turn off line editing after the shell is running, use the
-.B +o emacs
-or
-.B +o vi
-options to the
-.B set
-builtin.
-.SS "Readline Notation"
-.PP
-In this section, the Emacs-style notation is used to denote
-keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
-means Control\-N. Similarly,
-.I meta
-keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards
-without a
-.I meta
-key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key
-then the
-.I x
-key. This makes ESC the \fImeta prefix\fP.
-The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP,
-or press the Escape key
-then hold the Control key while pressing the
-.I x
-key.)
-.PP
-Readline commands may be given numeric
-.IR arguments ,
-which normally act as a repeat count.
-Sometimes, however, it is the sign of the argument that is significant.
-Passing a negative argument to a command that acts in the forward
-direction (e.g., \fBkill\-line\fP) causes that command to act in a
-backward direction.
-Commands whose behavior with arguments deviates from this are noted
-below.
-.PP
-When a command is described as \fIkilling\fP text, the text
-deleted is saved for possible future retrieval
-(\fIyanking\fP). The killed text is saved in a
-\fIkill ring\fP. Consecutive kills cause the text to be
-accumulated into one unit, which can be yanked all at once.
-Commands which do not kill text separate the chunks of text
-on the kill ring.
-.SS "Readline Initialization"
-.PP
-Readline is customized by putting commands in an initialization
-file (the \fIinputrc\fP file).
-The name of this file is taken from the value of the
-.SM
-.B INPUTRC
-variable. If that variable is unset, the default is
-.IR ~/.inputrc .
-When a program which uses the readline library starts up, the
-initialization file is read, and the key bindings and variables
-are set.
-There are only a few basic constructs allowed in the
-readline initialization file.
-Blank lines are ignored.
-Lines beginning with a \fB#\fP are comments.
-Lines beginning with a \fB$\fP indicate conditional constructs.
-Other lines denote key bindings and variable settings.
-.PP
-The default key-bindings may be changed with an
-.I inputrc
-file.
-Other programs that use this library may add their own commands
-and bindings.
-.PP
-For example, placing
-.RS
-.PP
-M\-Control\-u: universal\-argument
-.RE
-or
-.RS
-C\-Meta\-u: universal\-argument
-.RE
-into the
-.I inputrc
-would make M\-C\-u execute the readline command
-.IR universal\-argument .
-.PP
-The following symbolic character names are recognized:
-.IR RUBOUT ,
-.IR DEL ,
-.IR ESC ,
-.IR LFD ,
-.IR NEWLINE ,
-.IR RET ,
-.IR RETURN ,
-.IR SPC ,
-.IR SPACE ,
-and
-.IR TAB .
-.PP
-In addition to command names, readline allows keys to be bound
-to a string that is inserted when the key is pressed (a \fImacro\fP).
-.SS "Readline Key Bindings"
-.PP
-The syntax for controlling key bindings in the
-.I inputrc
-file is simple. All that is required is the name of the
-command or the text of a macro and a key sequence to which
-it should be bound. The name may be specified in one of two ways:
-as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP
-prefixes, or as a key sequence.
-.PP
-When using the form \fBkeyname\fP:\^\fIfunction\-name\fP or \fImacro\fP,
-.I keyname
-is the name of a key spelled out in English. For example:
-.sp
-.RS
-Control-u: universal\-argument
-.br
-Meta-Rubout: backward-kill-word
-.br
-Control-o: "> output"
-.RE
-.LP
-In the above example,
-.I C\-u
-is bound to the function
-.BR universal\-argument ,
-.I M\-DEL
-is bound to the function
-.BR backward\-kill\-word ,
-and
-.I C\-o
-is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-.if t \f(CW> output\fP
-.if n ``> output''
-into the line).
-.PP
-In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP,
-.B keyseq
-differs from
-.B keyname
-above in that strings denoting
-an entire key sequence may be specified by placing the sequence
-within double quotes. Some GNU Emacs style key escapes can be
-used, as in the following example, but the symbolic character names
-are not recognized.
-.sp
-.RS
-"\eC\-u": universal\-argument
-.br
-"\eC\-x\eC\-r": re\-read\-init\-file
-.br
-"\ee[11~": "Function Key 1"
-.RE
-.PP
-In this example,
-.I C\-u
-is again bound to the function
-.BR universal\-argument .
-.I "C\-x C\-r"
-is bound to the function
-.BR re\-read\-init\-file ,
-and
-.I "ESC [ 1 1 ~"
-is bound to insert the text
-.if t \f(CWFunction Key 1\fP.
-.if n ``Function Key 1''.
-.PP
-The full set of GNU Emacs style escape sequences is
-.RS
-.PD 0
-.TP
-.B \eC\-
-control prefix
-.TP
-.B \eM\-
-meta prefix
-.TP
-.B \ee
-an escape character
-.TP
-.B \e\e
-backslash
-.TP
-.B \e"
-literal "
-.TP
-.B \e\(aq
-literal \(aq
-.RE
-.PD
-.PP
-In addition to the GNU Emacs style escape sequences, a second
-set of backslash escapes is available:
-.RS
-.PD 0
-.TP
-.B \ea
-alert (bell)
-.TP
-.B \eb
-backspace
-.TP
-.B \ed
-delete
-.TP
-.B \ef
-form feed
-.TP
-.B \en
-newline
-.TP
-.B \er
-carriage return
-.TP
-.B \et
-horizontal tab
-.TP
-.B \ev
-vertical tab
-.TP
-.B \e\fInnn\fP
-the eight-bit character whose value is the octal value \fInnn\fP
-(one to three digits)
-.TP
-.B \ex\fIHH\fP
-the eight-bit character whose value is the hexadecimal value \fIHH\fP
-(one or two hex digits)
-.RE
-.PD
-.PP
-When entering the text of a macro, single or double quotes must
-be used to indicate a macro definition.
-Unquoted text is assumed to be a function name.
-In the macro body, the backslash escapes described above are expanded.
-Backslash will quote any other character in the macro text,
-including " and \(aq.
-.PP
-.B Bash
-allows the current readline key bindings to be displayed or modified
-with the
-.B bind
-builtin command. The editing mode may be switched during interactive
-use by using the
-.B \-o
-option to the
-.B set
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below).
-.SS "Readline Variables"
-.PP
-Readline has variables that can be used to further customize its
-behavior. A variable may be set in the
-.I inputrc
-file with a statement of the form
-.RS
-.PP
-\fBset\fP \fIvariable\-name\fP \fIvalue\fP
-.RE
-.PP
-Except where noted, readline variables can take the values
-.B On
-or
-.B Off
-(without regard to case).
-Unrecognized variable names are ignored.
-When a variable value is read, empty or null values, "on" (case-insensitive),
-and "1" are equivalent to \fBOn\fP. All other values are equivalent to
-\fBOff\fP.
-The variables and their default values are:
-.PP
-.PD 0
-.TP
-.B bell\-style (audible)
-Controls what happens when readline wants to ring the terminal bell.
-If set to \fBnone\fP, readline never rings the bell. If set to
-\fBvisible\fP, readline uses a visible bell if one is available.
-If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
-.TP
-.B bind\-tty\-special\-chars (On)
-If set to \fBOn\fP, readline attempts to bind the control characters
-treated specially by the kernel's terminal driver to their readline
-equivalents.
-.TP
-.B colored\-completion\-prefix (Off)
-If set to \fBOn\fP, when listing completions, readline displays the
-common prefix of the set of possible completions using a different color.
-The color definitions are taken from the value of the \fBLS_COLORS\fP
-environment variable.
-.TP
-.B colored\-stats (Off)
-If set to \fBOn\fP, readline displays possible completions using different
-colors to indicate their file type.
-The color definitions are taken from the value of the \fBLS_COLORS\fP
-environment variable.
-.TP
-.B comment\-begin (``#'')
-The string that is inserted when the readline
-.B insert\-comment
-command is executed.
-This command is bound to
-.B M\-#
-in emacs mode and to
-.B #
-in vi command mode.
-.TP
-.B completion\-ignore\-case (Off)
-If set to \fBOn\fP, readline performs filename matching and completion
-in a case\-insensitive fashion.
-.TP
-.B completion\-prefix\-display\-length (0)
-The length in characters of the common prefix of a list of possible
-completions that is displayed without modification. When set to a
-value greater than zero, common prefixes longer than this value are
-replaced with an ellipsis when displaying possible completions.
-.TP
-.B completion\-query\-items (100)
-This determines when the user is queried about viewing
-the number of possible completions
-generated by the \fBpossible\-completions\fP command.
-It may be set to any integer value greater than or equal to
-zero. If the number of possible completions is greater than
-or equal to the value of this variable, the user is asked whether
-or not he wishes to view them; otherwise they are simply listed
-on the terminal.
-.TP
-.B convert\-meta (On)
-If set to \fBOn\fP, readline will convert characters with the
-eighth bit set to an ASCII key sequence
-by stripping the eighth bit and prefixing an
-escape character (in effect, using escape as the \fImeta prefix\fP).
-.TP
-.B disable\-completion (Off)
-If set to \fBOn\fP, readline will inhibit word completion. Completion
-characters will be inserted into the line as if they had been
-mapped to \fBself-insert\fP.
-.TP
-.B editing\-mode (emacs)
-Controls whether readline begins with a set of key bindings similar
-to \fIEmacs\fP or \fIvi\fP.
-.B editing\-mode
-can be set to either
-.B emacs
-or
-.BR vi .
-.TP
-.B echo\-control\-characters (On)
-When set to \fBOn\fP, on operating systems that indicate they support it,
-readline echoes a character corresponding to a signal generated from the
-keyboard.
-.TP
-.B enable\-bracketed\-paste (Off)
-When set to \fBOn\fP, readline will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard. This can prevent pasted characters
-from being interpreted as editing commands.
-.TP
-.B enable\-keypad (Off)
-When set to \fBOn\fP, readline will try to enable the application
-keypad when it is called. Some systems need this to enable the
-arrow keys.
-.TP
-.B enable\-meta\-key (On)
-When set to \fBOn\fP, readline will try to enable any meta modifier
-key the terminal claims to support when it is called. On many terminals,
-the meta key is used to send eight-bit characters.
-.TP
-.B expand\-tilde (Off)
-If set to \fBOn\fP, tilde expansion is performed when readline
-attempts word completion.
-.TP
-.B history\-preserve\-point (Off)
-If set to \fBOn\fP, the history code attempts to place point at the
-same location on each history line retrieved with \fBprevious-history\fP
-or \fBnext-history\fP.
-.TP
-.B history\-size (unset)
-Set the maximum number of history entries saved in the history list.
-If set to zero, any existing history entries are deleted and no new entries
-are saved.
-If set to a value less than zero, the number of history entries is not
-limited.
-By default, the number of history entries is not limited.
-.TP
-.B horizontal\-scroll\-mode (Off)
-When set to \fBOn\fP, makes readline use a single line for display,
-scrolling the input horizontally on a single screen line when it
-becomes longer than the screen width rather than wrapping to a new line.
-.TP
-.B input\-meta (Off)
-If set to \fBOn\fP, readline will enable eight-bit input (that is,
-it will not strip the high bit from the characters it reads),
-regardless of what the terminal claims it can support. The name
-.B meta\-flag
-is a synonym for this variable.
-.TP
-.B isearch\-terminators (``C\-[C\-J'')
-The string of characters that should terminate an incremental
-search without subsequently executing the character as a command.
-If this variable has not been given a value, the characters
-\fIESC\fP and \fIC\-J\fP will terminate an incremental search.
-.TP
-.B keymap (emacs)
-Set the current readline keymap. The set of valid keymap names is
-\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
-vi\-command\fP, and
-.IR vi\-insert .
-\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is
-equivalent to \fIemacs\-standard\fP. The default value is
-.IR emacs ;
-the value of
-.B editing\-mode
-also affects the default keymap.
-.TP
-.B emacs\-mode\-string (@)
-This string is displayed immediately before the last line of the primary
-prompt when emacs editing mode is active. The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B keyseq\-timeout (500)
-Specifies the duration \fIreadline\fP will wait for a character when reading an
-ambiguous key sequence (one that can form a complete key sequence using
-the input read so far, or can take additional input to complete a longer
-key sequence).
-If no input is received within the timeout, \fIreadline\fP will use the shorter
-but complete key sequence.
-The value is specified in milliseconds, so a value of 1000 means that
-\fIreadline\fP will wait one second for additional input.
-If this variable is set to a value less than or equal to zero, or to a
-non-numeric value, \fIreadline\fP will wait until another key is pressed to
-decide which key sequence to complete.
-.TP
-.B mark\-directories (On)
-If set to \fBOn\fP, completed directory names have a slash
-appended.
-.TP
-.B mark\-modified\-lines (Off)
-If set to \fBOn\fP, history lines that have been modified are displayed
-with a preceding asterisk (\fB*\fP).
-.TP
-.B mark\-symlinked\-directories (Off)
-If set to \fBOn\fP, completed names which are symbolic links to directories
-have a slash appended (subject to the value of
-\fBmark\-directories\fP).
-.TP
-.B match\-hidden\-files (On)
-This variable, when set to \fBOn\fP, causes readline to match files whose
-names begin with a `.' (hidden files) when performing filename
-completion.
-If set to \fBOff\fP, the leading `.' must be
-supplied by the user in the filename to be completed.
-.TP
-.B menu\-complete\-display\-prefix (Off)
-If set to \fBOn\fP, menu completion displays the common prefix of the
-list of possible completions (which may be empty) before cycling through
-the list.
-.TP
-.B output\-meta (Off)
-If set to \fBOn\fP, readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence.
-.TP
-.B page\-completions (On)
-If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager
-to display a screenful of possible completions at a time.
-.TP
-.B print\-completions\-horizontally (Off)
-If set to \fBOn\fP, readline will display completions with matches
-sorted horizontally in alphabetical order, rather than down the screen.
-.TP
-.B revert\-all\-at\-newline (Off)
-If set to \fBOn\fP, readline will undo all changes to history lines
-before returning when \fBaccept\-line\fP is executed. By default,
-history lines may be modified and retain individual undo lists across
-calls to \fBreadline\fP.
-.TP
-.B show\-all\-if\-ambiguous (Off)
-This alters the default behavior of the completion functions. If
-set to
-.BR On ,
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-.TP
-.B show\-all\-if\-unmodified (Off)
-This alters the default behavior of the completion functions in
-a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
-If set to
-.BR On ,
-words which have more than one possible completion without any
-possible partial completion (the possible completions don't share
-a common prefix) cause the matches to be listed immediately instead
-of ringing the bell.
-.TP
-.B show\-mode\-in\-prompt (Off)
-If set to \fBOn\fP, add a character to the beginning of the prompt
-indicating the editing mode: emacs (@), vi command (:) or vi
-insertion (+).
-.TP
-.B skip\-completed\-text (Off)
-If set to \fBOn\fP, this alters the default completion behavior when
-inserting a single match into the line. It's only active when
-performing completion in the middle of a word. If enabled, readline
-does not insert characters from the completion that match characters
-after point in the word being completed, so portions of the word
-following the cursor are not duplicated.
-.TP
-.B vi\-cmd\-mode\-string ((cmd))
-This string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in command mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B vi\-ins\-mode\-string ((ins))
-This string is displayed immediately before the last line of the primary
-prompt when vi editing mode is active and in insertion mode.
-The value is expanded like a
-key binding, so the standard set of meta- and control prefixes and
-backslash escape sequences is available.
-Use the \e1 and \e2 escapes to begin and end sequences of
-non-printing characters, which can be used to embed a terminal control
-sequence into the mode string.
-.TP
-.B visible\-stats (Off)
-If set to \fBOn\fP, a character denoting a file's type as reported
-by \fIstat\fP(2) is appended to the filename when listing possible
-completions.
-.PD
-.SS "Readline Conditional Constructs"
-.PP
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests. There are four parser directives used.
-.IP \fB$if\fP
-The
-.B $if
-construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-readline. The text of the test extends to the end of the line;
-no characters are required to isolate it.
-.RS
-.IP \fBmode\fP
-The \fBmode=\fP form of the \fB$if\fP directive is used to test
-whether readline is in emacs or vi mode.
-This may be used in conjunction
-with the \fBset keymap\fP command, for instance, to set bindings in
-the \fIemacs\-standard\fP and \fIemacs\-ctlx\fP keymaps only if
-readline is starting out in emacs mode.
-.IP \fBterm\fP
-The \fBterm=\fP form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys. The word on the right side of the
-.B =
-is tested against the both full name of the terminal and the portion
-of the terminal name before the first \fB\-\fP. This allows
-.I sun
-to match both
-.I sun
-and
-.IR sun\-cmd ,
-for instance.
-.IP \fBapplication\fP
-The \fBapplication\fP construct is used to include
-application-specific settings. Each program using the readline
-library sets the \fIapplication name\fP, and an initialization
-file can test for a particular value.
-This could be used to bind key sequences to functions useful for
-a specific program. For instance, the following command adds a
-key sequence that quotes the current or previous word in \fBbash\fP:
-.sp 1
-.RS
-.nf
-\fB$if\fP Bash
-# Quote the current or previous word
-"\eC\-xq": "\eeb\e"\eef\e""
-\fB$endif\fP
-.fi
-.RE
-.RE
-.IP \fB$endif\fP
-This command, as seen in the previous example, terminates an
-\fB$if\fP command.
-.IP \fB$else\fP
-Commands in this branch of the \fB$if\fP directive are executed if
-the test fails.
-.IP \fB$include\fP
-This directive takes a single filename as an argument and reads commands
-and bindings from that file. For example, the following directive
-would read \fI/etc/inputrc\fP:
-.sp 1
-.RS
-.nf
-\fB$include\fP \^ \fI/etc/inputrc\fP
-.fi
-.RE
-.SS Searching
-.PP
-Readline provides commands for searching through the command history
-(see
-.SM
-.B HISTORY
-below) for lines containing a specified string.
-There are two search modes:
-.I incremental
-and
-.IR non-incremental .
-.PP
-Incremental searches begin before the user has finished typing the
-search string.
-As each character of the search string is typed, readline displays
-the next entry from the history matching the string typed so far.
-An incremental search requires only as many characters as needed to
-find the desired history entry.
-The characters present in the value of the \fBisearch-terminators\fP
-variable are used to terminate an incremental search.
-If that variable has not been assigned a value the Escape and
-Control-J characters will terminate an incremental search.
-Control-G will abort an incremental search and restore the original
-line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-.PP
-To find other matching entries in the history list, type Control-S or
-Control-R as appropriate.
-This will search backward or forward in the history for the next
-entry matching the search string typed so far.
-Any other key sequence bound to a readline command will terminate
-the search and execute that command.
-For instance, a \fInewline\fP will terminate the search and accept
-the line, thereby executing the command from the history list.
-.PP
-Readline remembers the last incremental search string. If two
-Control-Rs are typed without any intervening characters defining a
-new search string, any remembered search string is used.
-.PP
-Non-incremental searches read the entire search string before starting
-to search for matching history lines. The search string may be
-typed by the user or be part of the contents of the current line.
-.SS "Readline Command Names"
-.PP
-The following is a list of the names of the commands and the default
-key sequences to which they are bound.
-Command names without an accompanying key sequence are unbound by default.
-In the following descriptions, \fIpoint\fP refers to the current cursor
-position, and \fImark\fP refers to a cursor position saved by the
-\fBset\-mark\fP command.
-The text between the point and mark is referred to as the \fIregion\fP.
-.SS Commands for Moving
-.PP
-.PD 0
-.TP
-.B beginning\-of\-line (C\-a)
-Move to the start of the current line.
-.TP
-.B end\-of\-line (C\-e)
-Move to the end of the line.
-.TP
-.B forward\-char (C\-f)
-Move forward a character.
-.TP
-.B backward\-char (C\-b)
-Move back a character.
-.TP
-.B forward\-word (M\-f)
-Move forward to the end of the next word. Words are composed of
-alphanumeric characters (letters and digits).
-.TP
-.B backward\-word (M\-b)
-Move back to the start of the current or previous word.
-Words are composed of alphanumeric characters (letters and digits).
-.TP
-.B shell\-forward\-word
-Move forward to the end of the next word.
-Words are delimited by non-quoted shell metacharacters.
-.TP
-.B shell\-backward\-word
-Move back to the start of the current or previous word.
-Words are delimited by non-quoted shell metacharacters.
-.TP
-.B clear\-screen (C\-l)
-Clear the screen leaving the current line at the top of the screen.
-With an argument, refresh the current line without clearing the
-screen.
-.TP
-.B redraw\-current\-line
-Refresh the current line.
-.PD
-.SS Commands for Manipulating the History
-.PP
-.PD 0
-.TP
-.B accept\-line (Newline, Return)
-Accept the line regardless of where the cursor is. If this line is
-non-empty, add it to the history list according to the state of the
-.SM
-.B HISTCONTROL
-variable. If the line is a modified history
-line, then restore the history line to its original state.
-.TP
-.B previous\-history (C\-p)
-Fetch the previous command from the history list, moving back in
-the list.
-.TP
-.B next\-history (C\-n)
-Fetch the next command from the history list, moving forward in the
-list.
-.TP
-.B beginning\-of\-history (M\-<)
-Move to the first line in the history.
-.TP
-.B end\-of\-history (M\->)
-Move to the end of the input history, i.e., the line currently being
-entered.
-.TP
-.B reverse\-search\-history (C\-r)
-Search backward starting at the current line and moving `up' through
-the history as necessary. This is an incremental search.
-.TP
-.B forward\-search\-history (C\-s)
-Search forward starting at the current line and moving `down' through
-the history as necessary. This is an incremental search.
-.TP
-.B non\-incremental\-reverse\-search\-history (M\-p)
-Search backward through the history starting at the current line
-using a non-incremental search for a string supplied by the user.
-.TP
-.B non\-incremental\-forward\-search\-history (M\-n)
-Search forward through the history using a non-incremental search for
-a string supplied by the user.
-.TP
-.B history\-search\-forward
-Search forward through the history for the string of characters
-between the start of the current line and the point.
-This is a non-incremental search.
-.TP
-.B history\-search\-backward
-Search backward through the history for the string of characters
-between the start of the current line and the point.
-This is a non-incremental search.
-.TP
-.B yank\-nth\-arg (M\-C\-y)
-Insert the first argument to the previous command (usually
-the second word on the previous line) at point.
-With an argument
-.IR n ,
-insert the \fIn\fPth word from the previous command (the words
-in the previous command begin with word 0). A negative argument
-inserts the \fIn\fPth word from the end of the previous command.
-Once the argument \fIn\fP is computed, the argument is extracted
-as if the "!\fIn\fP" history expansion had been specified.
-.TP
-.B
-yank\-last\-arg (M\-.\^, M\-_\^)
-Insert the last argument to the previous command (the last word of
-the previous history entry).
-With a numeric argument, behave exactly like \fByank\-nth\-arg\fP.
-Successive calls to \fByank\-last\-arg\fP move back through the history
-list, inserting the last word (or the word specified by the argument to
-the first call) of each line in turn.
-Any numeric argument supplied to these successive calls determines
-the direction to move through the history. A negative argument switches
-the direction through the history (back or forward).
-The history expansion facilities are used to extract the last word,
-as if the "!$" history expansion had been specified.
-.TP
-.B shell\-expand\-line (M\-C\-e)
-Expand the line as the shell does. This
-performs alias and history expansion as well as all of the shell
-word expansions. See
-.SM
-.B HISTORY EXPANSION
-below for a description of history expansion.
-.TP
-.B history\-expand\-line (M\-^)
-Perform history expansion on the current line.
-See
-.SM
-.B HISTORY EXPANSION
-below for a description of history expansion.
-.TP
-.B magic\-space
-Perform history expansion on the current line and insert a space.
-See
-.SM
-.B HISTORY EXPANSION
-below for a description of history expansion.
-.TP
-.B alias\-expand\-line
-Perform alias expansion on the current line.
-See
-.SM
-.B ALIASES
-above for a description of alias expansion.
-.TP
-.B history\-and\-alias\-expand\-line
-Perform history and alias expansion on the current line.
-.TP
-.B insert\-last\-argument (M\-.\^, M\-_\^)
-A synonym for \fByank\-last\-arg\fP.
-.TP
-.B operate\-and\-get\-next (C\-o)
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing. Any
-argument is ignored.
-.TP
-.B edit\-and\-execute\-command (C\-xC\-e)
-Invoke an editor on the current command line, and execute the result as shell
-commands.
-\fBBash\fP attempts to invoke
-.SM
-.BR $VISUAL ,
-.SM
-.BR $EDITOR ,
-and \fIemacs\fP as the editor, in that order.
-.PD
-.SS Commands for Changing Text
-.PP
-.PD 0
-.TP
-.B \fIend\-of\-file\fP (usually C\-d)
-The character indicating end-of-file as set, for example, by
-.if t \f(CWstty\fP.
-.if n ``stty''.
-If this character is read when there are no characters
-on the line, and point is at the beginning of the line, Readline
-interprets it as the end of input and returns
-.SM
-.BR EOF .
-.TP
-.B delete\-char (C\-d)
-Delete the character at point.
-If this function is bound to the
-same character as the tty \fBEOF\fP character, as \fBC\-d\fP
-commonly is, see above for the effects.
-.TP
-.B backward\-delete\-char (Rubout)
-Delete the character behind the cursor. When given a numeric argument,
-save the deleted text on the kill ring.
-.TP
-.B forward\-backward\-delete\-char
-Delete the character under the cursor, unless the cursor is at the
-end of the line, in which case the character behind the cursor is
-deleted.
-.TP
-.B quoted\-insert (C\-q, C\-v)
-Add the next character typed to the line verbatim. This is
-how to insert characters like \fBC\-q\fP, for example.
-.TP
-.B tab\-insert (C\-v TAB)
-Insert a tab character.
-.TP
-.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...)
-Insert the character typed.
-.TP
-.B transpose\-chars (C\-t)
-Drag the character before point forward over the character at point,
-moving point forward as well.
-If point is at the end of the line, then this transposes
-the two characters before point.
-Negative arguments have no effect.
-.TP
-.B transpose\-words (M\-t)
-Drag the word before point past the word after point,
-moving point over that word as well.
-If point is at the end of the line, this transposes
-the last two words on the line.
-.TP
-.B upcase\-word (M\-u)
-Uppercase the current (or following) word. With a negative argument,
-uppercase the previous word, but do not move point.
-.TP
-.B downcase\-word (M\-l)
-Lowercase the current (or following) word. With a negative argument,
-lowercase the previous word, but do not move point.
-.TP
-.B capitalize\-word (M\-c)
-Capitalize the current (or following) word. With a negative argument,
-capitalize the previous word, but do not move point.
-.TP
-.B overwrite\-mode
-Toggle overwrite mode. With an explicit positive numeric argument,
-switches to overwrite mode. With an explicit non-positive numeric
-argument, switches to insert mode. This command affects only
-\fBemacs\fP mode; \fBvi\fP mode does overwrite differently.
-Each call to \fIreadline()\fP starts in insert mode.
-In overwrite mode, characters bound to \fBself\-insert\fP replace
-the text at point rather than pushing the text to the right.
-Characters bound to \fBbackward\-delete\-char\fP replace the character
-before point with a space. By default, this command is unbound.
-.PD
-.SS Killing and Yanking
-.PP
-.PD 0
-.TP
-.B kill\-line (C\-k)
-Kill the text from point to the end of the line.
-.TP
-.B backward\-kill\-line (C\-x Rubout)
-Kill backward to the beginning of the line.
-.TP
-.B unix\-line\-discard (C\-u)
-Kill backward from point to the beginning of the line.
-The killed text is saved on the kill-ring.
-.\" There is no real difference between this and backward-kill-line
-.TP
-.B kill\-whole\-line
-Kill all characters on the current line, no matter where point is.
-.TP
-.B kill\-word (M\-d)
-Kill from point to the end of the current word, or if between
-words, to the end of the next word.
-Word boundaries are the same as those used by \fBforward\-word\fP.
-.TP
-.B backward\-kill\-word (M\-Rubout)
-Kill the word behind point.
-Word boundaries are the same as those used by \fBbackward\-word\fP.
-.TP
-.B shell\-kill\-word
-Kill from point to the end of the current word, or if between
-words, to the end of the next word.
-Word boundaries are the same as those used by \fBshell\-forward\-word\fP.
-.TP
-.B shell\-backward\-kill\-word
-Kill the word behind point.
-Word boundaries are the same as those used by \fBshell\-backward\-word\fP.
-.TP
-.B unix\-word\-rubout (C\-w)
-Kill the word behind point, using white space as a word boundary.
-The killed text is saved on the kill-ring.
-.TP
-.B unix\-filename\-rubout
-Kill the word behind point, using white space and the slash character
-as the word boundaries.
-The killed text is saved on the kill-ring.
-.TP
-.B delete\-horizontal\-space (M\-\e)
-Delete all spaces and tabs around point.
-.TP
-.B kill\-region
-Kill the text in the current region.
-.TP
-.B copy\-region\-as\-kill
-Copy the text in the region to the kill buffer.
-.TP
-.B copy\-backward\-word
-Copy the word before point to the kill buffer.
-The word boundaries are the same as \fBbackward\-word\fP.
-.TP
-.B copy\-forward\-word
-Copy the word following point to the kill buffer.
-The word boundaries are the same as \fBforward\-word\fP.
-.TP
-.B yank (C\-y)
-Yank the top of the kill ring into the buffer at point.
-.TP
-.B yank\-pop (M\-y)
-Rotate the kill ring, and yank the new top. Only works following
-.B yank
-or
-.BR yank\-pop .
-.PD
-.SS Numeric Arguments
-.PP
-.PD 0
-.TP
-.B digit\-argument (M\-0, M\-1, ..., M\-\-)
-Add this digit to the argument already accumulating, or start a new
-argument. M\-\- starts a negative argument.
-.TP
-.B universal\-argument
-This is another way to specify an argument.
-If this command is followed by one or more digits, optionally with a
-leading minus sign, those digits define the argument.
-If the command is followed by digits, executing
-.B universal\-argument
-again ends the numeric argument, but is otherwise ignored.
-As a special case, if this command is immediately followed by a
-character that is neither a digit or minus sign, the argument count
-for the next command is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four, a second time makes the
-argument count sixteen, and so on.
-.PD
-.SS Completing
-.PP
-.PD 0
-.TP
-.B complete (TAB)
-Attempt to perform completion on the text before point.
-.B Bash
-attempts completion treating the text as a variable (if the
-text begins with \fB$\fP), username (if the text begins with
-\fB~\fP), hostname (if the text begins with \fB@\fP), or
-command (including aliases and functions) in turn. If none
-of these produces a match, filename completion is attempted.
-.TP
-.B possible\-completions (M\-?)
-List the possible completions of the text before point.
-.TP
-.B insert\-completions (M\-*)
-Insert all completions of the text before point
-that would have been generated by
-\fBpossible\-completions\fP.
-.TP
-.B menu\-complete
-Similar to \fBcomplete\fP, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of \fBmenu\-complete\fP steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung
-(subject to the setting of \fBbell\-style\fP)
-and the original text is restored.
-An argument of \fIn\fP moves \fIn\fP positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to \fBTAB\fP, but is unbound
-by default.
-.TP
-.B menu\-complete\-backward
-Identical to \fBmenu\-complete\fP, but moves backward through the list
-of possible completions, as if \fBmenu\-complete\fP had been given a
-negative argument. This command is unbound by default.
-.TP
-.B delete\-char\-or\-list
-Deletes the character under the cursor if not at the beginning or
-end of the line (like \fBdelete\-char\fP).
-If at the end of the line, behaves identically to
-\fBpossible\-completions\fP.
-This command is unbound by default.
-.TP
-.B complete\-filename (M\-/)
-Attempt filename completion on the text before point.
-.TP
-.B possible\-filename\-completions (C\-x /)
-List the possible completions of the text before point,
-treating it as a filename.
-.TP
-.B complete\-username (M\-~)
-Attempt completion on the text before point, treating
-it as a username.
-.TP
-.B possible\-username\-completions (C\-x ~)
-List the possible completions of the text before point,
-treating it as a username.
-.TP
-.B complete\-variable (M\-$)
-Attempt completion on the text before point, treating
-it as a shell variable.
-.TP
-.B possible\-variable\-completions (C\-x $)
-List the possible completions of the text before point,
-treating it as a shell variable.
-.TP
-.B complete\-hostname (M\-@)
-Attempt completion on the text before point, treating
-it as a hostname.
-.TP
-.B possible\-hostname\-completions (C\-x @)
-List the possible completions of the text before point,
-treating it as a hostname.
-.TP
-.B complete\-command (M\-!)
-Attempt completion on the text before point, treating
-it as a command name. Command completion attempts to
-match the text against aliases, reserved words, shell
-functions, shell builtins, and finally executable filenames,
-in that order.
-.TP
-.B possible\-command\-completions (C\-x !)
-List the possible completions of the text before point,
-treating it as a command name.
-.TP
-.B dynamic\-complete\-history (M\-TAB)
-Attempt completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-.TP
-.B dabbrev\-expand
-Attempt menu completion on the text before point, comparing
-the text against lines from the history list for possible
-completion matches.
-.TP
-.B complete\-into\-braces (M\-{)
-Perform filename completion and insert the list of possible completions
-enclosed within braces so the list is available to the shell (see
-.B Brace Expansion
-above).
-.PD
-.SS Keyboard Macros
-.PP
-.PD 0
-.TP
-.B start\-kbd\-macro (C\-x (\^)
-Begin saving the characters typed into the current keyboard macro.
-.TP
-.B end\-kbd\-macro (C\-x )\^)
-Stop saving the characters typed into the current keyboard macro
-and store the definition.
-.TP
-.B call\-last\-kbd\-macro (C\-x e)
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-.TP
-.B print\-last\-kbd\-macro ()
-Print the last keyboard macro defined in a format suitable for the
-\fIinputrc\fP file.
-.PD
-.SS Miscellaneous
-.PP
-.PD 0
-.TP
-.B re\-read\-init\-file (C\-x C\-r)
-Read in the contents of the \fIinputrc\fP file, and incorporate
-any bindings or variable assignments found there.
-.TP
-.B abort (C\-g)
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-.BR bell\-style ).
-.TP
-.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...)
-If the metafied character \fIx\fP is lowercase, run the command
-that is bound to the corresponding uppercase character.
-.TP
-.B prefix\-meta (ESC)
-Metafy the next character typed.
-.SM
-.B ESC
-.B f
-is equivalent to
-.BR Meta\-f .
-.TP
-.B undo (C\-_, C\-x C\-u)
-Incremental undo, separately remembered for each line.
-.TP
-.B revert\-line (M\-r)
-Undo all changes made to this line. This is like executing the
-.B undo
-command enough times to return the line to its initial state.
-.TP
-.B tilde\-expand (M\-&)
-Perform tilde expansion on the current word.
-.TP
-.B set\-mark (C\-@, M\-<space>)
-Set the mark to the point. If a
-numeric argument is supplied, the mark is set to that position.
-.TP
-.B exchange\-point\-and\-mark (C\-x C\-x)
-Swap the point with the mark. The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-.TP
-.B character\-search (C\-])
-A character is read and point is moved to the next occurrence of that
-character. A negative count searches for previous occurrences.
-.TP
-.B character\-search\-backward (M\-C\-])
-A character is read and point is moved to the previous occurrence of that
-character. A negative count searches for subsequent occurrences.
-.TP
-.B skip\-csi\-sequence
-Read enough characters to consume a multi-key sequence such as those
-defined for keys like Home and End. Such sequences begin with a
-Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is
-bound to "\e[", keys producing such sequences will have no effect
-unless explicitly bound to a readline command, instead of inserting
-stray characters into the editing buffer. This is unbound by default,
-but usually bound to ESC\-[.
-.TP
-.B insert\-comment (M\-#)
-Without a numeric argument, the value of the readline
-.B comment\-begin
-variable is inserted at the beginning of the current line.
-If a numeric argument is supplied, this command acts as a toggle: if
-the characters at the beginning of the line do not match the value
-of \fBcomment\-begin\fP, the value is inserted, otherwise
-the characters in \fBcomment\-begin\fP are deleted from the beginning of
-the line.
-In either case, the line is accepted as if a newline had been typed.
-The default value of
-\fBcomment\-begin\fP causes this command to make the current line
-a shell comment.
-If a numeric argument causes the comment character to be removed, the line
-will be executed by the shell.
-.TP
-.B glob\-complete\-word (M\-g)
-The word before point is treated as a pattern for pathname expansion,
-with an asterisk implicitly appended. This pattern is used to
-generate a list of matching filenames for possible completions.
-.TP
-.B glob\-expand\-word (C\-x *)
-The word before point is treated as a pattern for pathname expansion,
-and the list of matching filenames is inserted, replacing the word.
-If a numeric argument is supplied, an asterisk is appended before
-pathname expansion.
-.TP
-.B glob\-list\-expansions (C\-x g)
-The list of expansions that would have been generated by
-.B glob\-expand\-word
-is displayed, and the line is redrawn.
-If a numeric argument is supplied, an asterisk is appended before
-pathname expansion.
-.TP
-.B dump\-functions
-Print all of the functions and their key bindings to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B dump\-variables
-Print all of the settable readline variables and their values to the
-readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B dump\-macros
-Print all of the readline key sequences bound to macros and the
-strings they output. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an \fIinputrc\fP file.
-.TP
-.B display\-shell\-version (C\-x C\-v)
-Display version information about the current instance of
-.BR bash .
-.PD
-.SS Programmable Completion
-.PP
-When word completion is attempted for an argument to a command for
-which a completion specification (a \fIcompspec\fP) has been defined
-using the \fBcomplete\fP builtin (see
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below), the programmable completion facilities are invoked.
-.PP
-First, the command name is identified.
-If the command word is the empty string (completion attempted at the
-beginning of an empty line), any compspec defined with
-the \fB\-E\fP option to \fBcomplete\fP is used.
-If a compspec has been defined for that command, the
-compspec is used to generate the list of possible completions for the word.
-If the command word is a full pathname, a compspec for the full
-pathname is searched for first.
-If no compspec is found for the full pathname, an attempt is made to
-find a compspec for the portion following the final slash.
-If those searches do not result in a compspec, any compspec defined with
-the \fB\-D\fP option to \fBcomplete\fP is used as the default.
-.PP
-Once a compspec has been found, it is used to generate the list of
-matching words.
-If a compspec is not found, the default \fBbash\fP completion as
-described above under \fBCompleting\fP is performed.
-.PP
-First, the actions specified by the compspec are used.
-Only matches which are prefixed by the word being completed are
-returned.
-When the
-.B \-f
-or
-.B \-d
-option is used for filename or directory name completion, the shell
-variable
-.SM
-.B FIGNORE
-is used to filter the matches.
-.PP
-Any completions specified by a pathname expansion pattern to the
-\fB\-G\fP option are generated next.
-The words generated by the pattern need not match the word
-being completed.
-The
-.SM
-.B GLOBIGNORE
-shell variable is not used to filter the matches, but the
-.SM
-.B FIGNORE
-variable is used.
-.PP
-Next, the string specified as the argument to the \fB\-W\fP option
-is considered.
-The string is first split using the characters in the
-.SM
-.B IFS
-special variable as delimiters.
-Shell quoting is honored.
-Each word is then expanded using
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, and arithmetic expansion,
-as described above under
-.SM
-.BR EXPANSION .
-The results are split using the rules described above under
-\fBWord Splitting\fP.
-The results of the expansion are prefix-matched against the word being
-completed, and the matching words become the possible completions.
-.PP
-After these matches have been generated, any shell function or command
-specified with the \fB\-F\fP and \fB\-C\fP options is invoked.
-When the command or function is invoked, the
-.SM
-.BR COMP_LINE ,
-.SM
-.BR COMP_POINT ,
-.SM
-.BR COMP_KEY ,
-and
-.SM
-.B COMP_TYPE
-variables are assigned values as described above under
-\fBShell Variables\fP.
-If a shell function is being invoked, the
-.SM
-.B COMP_WORDS
-and
-.SM
-.B COMP_CWORD
-variables are also set.
-When the function or command is invoked,
-the first argument (\fB$1\fP) is the name of the command whose arguments are
-being completed,
-the second argument (\fB$2\fP) is the word being completed,
-and the third argument (\fB$3\fP) is the word preceding the word being
-completed on the current command line.
-No filtering of the generated completions against the word being completed
-is performed; the function or command has complete freedom in generating
-the matches.
-.PP
-Any function specified with \fB\-F\fP is invoked first.
-The function may use any of the shell facilities, including the
-\fBcompgen\fP builtin described below, to generate the matches.
-It must put the possible completions in the
-.SM
-.B COMPREPLY
-array variable, one per array element.
-.PP
-Next, any command specified with the \fB\-C\fP option is invoked
-in an environment equivalent to command substitution.
-It should print a list of completions, one per line, to the
-standard output.
-Backslash may be used to escape a newline, if necessary.
-.PP
-After all of the possible completions are generated, any filter
-specified with the \fB\-X\fP option is applied to the list.
-The filter is a pattern as used for pathname expansion; a \fB&\fP
-in the pattern is replaced with the text of the word being completed.
-A literal \fB&\fP may be escaped with a backslash; the backslash
-is removed before attempting a match.
-Any completion that matches the pattern will be removed from the list.
-A leading \fB!\fP negates the pattern; in this case any completion
-not matching the pattern will be removed.
-If the
-.B nocasematch
-shell option is enabled, the match is performed without regard to the case
-of alphabetic characters.
-.PP
-Finally, any prefix and suffix specified with the \fB\-P\fP and \fB\-S\fP
-options are added to each member of the completion list, and the result is
-returned to the readline completion code as the list of possible
-completions.
-.PP
-If the previously-applied actions do not generate any matches, and the
-\fB\-o dirnames\fP option was supplied to \fBcomplete\fP when the
-compspec was defined, directory name completion is attempted.
-.PP
-If the \fB\-o plusdirs\fP option was supplied to \fBcomplete\fP when the
-compspec was defined, directory name completion is attempted and any
-matches are added to the results of the other actions.
-.PP
-By default, if a compspec is found, whatever it generates is returned
-to the completion code as the full set of possible completions.
-The default \fBbash\fP completions are not attempted, and the readline
-default of filename completion is disabled.
-If the \fB\-o bashdefault\fP option was supplied to \fBcomplete\fP when
-the compspec was defined, the \fBbash\fP default completions are attempted
-if the compspec generates no matches.
-If the \fB\-o default\fP option was supplied to \fBcomplete\fP when the
-compspec was defined, readline's default completion will be performed
-if the compspec (and, if attempted, the default \fBbash\fP completions)
-generate no matches.
-.PP
-When a compspec indicates that directory name completion is desired,
-the programmable completion functions force readline to append a slash
-to completed names which are symbolic links to directories, subject to
-the value of the \fBmark\-directories\fP readline variable, regardless
-of the setting of the \fBmark-symlinked\-directories\fP readline variable.
-.PP
-There is some support for dynamically modifying completions. This is
-most useful when used in combination with a default completion specified
-with \fBcomplete -D\fP.
-It's possible for shell functions executed as completion
-handlers to indicate that completion should be retried by returning an
-exit status of 124. If a shell function returns 124, and changes
-the compspec associated with the command on which completion is being
-attempted (supplied as the first argument when the function is executed),
-programmable completion restarts from the beginning, with an
-attempt to find a new compspec for that command. This allows a set of
-completions to be built dynamically as completion is attempted, rather than
-being loaded all at once.
-.PP
-For instance, assuming that there is a library of compspecs, each kept in a
-file corresponding to the name of the command, the following default
-completion function would load completions dynamically:
-.PP
-\f(CW_completion_loader()
-.br
-{
-.br
- . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
-.br
-}
-.br
-complete -D -F _completion_loader -o bashdefault -o default
-.br
-\fP
-.SH HISTORY
-When the
-.B \-o history
-option to the
-.B set
-builtin is enabled, the shell provides access to the
-\fIcommand history\fP,
-the list of commands previously typed.
-The value of the
-.SM
-.B HISTSIZE
-variable is used as the
-number of commands to save in a history list.
-The text of the last
-.SM
-.B HISTSIZE
-commands (default 500) is saved. The shell
-stores each command in the history list prior to parameter and
-variable expansion (see
-.SM
-.B EXPANSION
-above) but after history expansion is performed, subject to the
-values of the shell variables
-.SM
-.B HISTIGNORE
-and
-.SM
-.BR HISTCONTROL .
-.PP
-On startup, the history is initialized from the file named by
-the variable
-.SM
-.B HISTFILE
-(default \fI~/.bash_history\fP).
-The file named by the value of
-.SM
-.B HISTFILE
-is truncated, if necessary, to contain no more than
-the number of lines specified by the value of
-.SM
-.BR HISTFILESIZE .
-If \fBHISTFILESIZE\fP is unset, or set to null, a non-numeric value,
-or a numeric value less than zero, the history file is not truncated.
-When the history file is read,
-lines beginning with the history comment character followed immediately
-by a digit are interpreted as timestamps for the preceding history line.
-These timestamps are optionally displayed depending on the value of the
-.SM
-.B HISTTIMEFORMAT
-variable.
-When a shell with history enabled exits, the last
-.SM
-.B $HISTSIZE
-lines are copied from the history list to
-.SM
-.BR $HISTFILE .
-If the
-.B histappend
-shell option is enabled
-(see the description of
-.B shopt
-under
-.SM
-.B "SHELL BUILTIN COMMANDS"
-below), the lines are appended to the history file,
-otherwise the history file is overwritten.
-If
-.SM
-.B HISTFILE
-is unset, or if the history file is unwritable, the history is
-not saved.
-If the
-.SM
-.B HISTTIMEFORMAT
-variable is set, time stamps are written to the history file, marked
-with the history comment character, so
-they may be preserved across shell sessions.
-This uses the history comment character to distinguish timestamps from
-other history lines.
-After saving the history, the history file is truncated
-to contain no more than
-.SM
-.B HISTFILESIZE
-lines. If
-.SM
-.B HISTFILESIZE
-is unset, or set to null, a non-numeric value,
-or a numeric value less than zero, the history file is not truncated.
-.PP
-The builtin command
-.B fc
-(see
-.SM
-.B SHELL BUILTIN COMMANDS
-below) may be used to list or edit and re-execute a portion of
-the history list.
-The
-.B history
-builtin may be used to display or modify the history list and
-manipulate the history file.
-When using command-line editing, search commands
-are available in each editing mode that provide access to the
-history list.
-.PP
-The shell allows control over which commands are saved on the history
-list. The
-.SM
-.B HISTCONTROL
-and
-.SM
-.B HISTIGNORE
-variables may be set to cause the shell to save only a subset of the
-commands entered.
-The
-.B cmdhist
-shell option, if enabled, causes the shell to attempt to save each
-line of a multi-line command in the same history entry, adding
-semicolons where necessary to preserve syntactic correctness.
-The
-.B lithist
-shell option causes the shell to save the command with embedded newlines
-instead of semicolons. See the description of the
-.B shopt
-builtin below under
-.SM
-.B "SHELL BUILTIN COMMANDS"
-for information on setting and unsetting shell options.
-.SH "HISTORY EXPANSION"
-.PP
-The shell supports a history expansion feature that
-is similar to the history expansion in
-.BR csh.
-This section describes what syntax features are available. This
-feature is enabled by default for interactive shells, and can be
-disabled using the
-.B +H
-option to the
-.B set
-builtin command (see
-.SM
-.B SHELL BUILTIN COMMANDS
-below). Non-interactive shells do not perform history expansion
-by default.
-.PP
-History expansions introduce words from the history list into
-the input stream, making it easy to repeat commands, insert the
-arguments to a previous command into the current input line, or
-fix errors in previous commands quickly.
-.PP
-History expansion is performed immediately after a complete line
-is read, before the shell breaks it into words.
-It takes place in two parts.
-The first is to determine which line from the history list
-to use during substitution.
-The second is to select portions of that line for inclusion into
-the current one.
-The line selected from the history is the \fIevent\fP,
-and the portions of that line that are acted upon are \fIwords\fP.
-Various \fImodifiers\fP are available to manipulate the selected words.
-The line is broken into words in the same fashion as when reading input,
-so that several \fImetacharacter\fP-separated words surrounded by
-quotes are considered one word.
-History expansions are introduced by the appearance of the
-history expansion character, which is \^\fB!\fP\^ by default.
-Only backslash (\^\fB\e\fP\^) and single quotes can quote
-the history expansion character.
-.PP
-Several characters inhibit history expansion if found immediately
-following the history expansion character, even if it is unquoted:
-space, tab, newline, carriage return, and \fB=\fP.
-If the \fBextglob\fP shell option is enabled, \fB(\fP will also
-inhibit expansion.
-.PP
-Several shell options settable with the
-.B shopt
-builtin may be used to tailor the behavior of history expansion.
-If the
-.B histverify
-shell option is enabled (see the description of the
-.B shopt
-builtin below), and
-.B readline
-is being used, history substitutions are not immediately passed to
-the shell parser.
-Instead, the expanded line is reloaded into the
-.B readline
-editing buffer for further modification.
-If
-.B readline
-is being used, and the
-.B histreedit
-shell option is enabled, a failed history substitution will be reloaded
-into the
-.B readline
-editing buffer for correction.
-The
-.B \-p
-option to the
-.B history
-builtin command may be used to see what a history expansion will
-do before using it.
-The
-.B \-s
-option to the
-.B history
-builtin may be used to add commands to the end of the history list
-without actually executing them, so that they are available for
-subsequent recall.
-.PP
-The shell allows control of the various characters used by the
-history expansion mechanism (see the description of
-.B histchars
-above under
-.BR "Shell Variables" ).
-The shell uses
-the history comment character to mark history timestamps when
-writing the history file.
-.SS Event Designators
-.PP
-An event designator is a reference to a command line entry in the
-history list.
-Unless the reference is absolute, events are relative to the current
-position in the history list.
-.PP
-.PD 0
-.TP
-.B !
-Start a history substitution, except when followed by a
-.BR blank ,
-newline, carriage return, =
-or ( (when the \fBextglob\fP shell option is enabled using
-the \fBshopt\fP builtin).
-.TP
-.B !\fIn\fR
-Refer to command line
-.IR n .
-.TP
-.B !\-\fIn\fR
-Refer to the current command minus
-.IR n .
-.TP
-.B !!
-Refer to the previous command. This is a synonym for `!\-1'.
-.TP
-.B !\fIstring\fR
-Refer to the most recent command preceding the current position in the
-history list starting with
-.IR string .
-.TP
-.B !?\fIstring\fR\fB[?]\fR
-Refer to the most recent command preceding the current position in the
-history list containing
-.IR string .
-The trailing \fB?\fP may be omitted if
-.I string
-is followed immediately by a newline.
-.TP
-.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
-Quick substitution. Repeat the previous command, replacing
-.I string1
-with
-.IR string2 .
-Equivalent to
-``!!:s/\fIstring1\fP/\fIstring2\fP/''
-(see \fBModifiers\fP below).
-.TP
-.B !#
-The entire command line typed so far.
-.PD
-.SS Word Designators
-.PP
-Word designators are used to select desired words from the event.
-A
-.B :
-separates the event specification from the word designator.
-It may be omitted if the word designator begins with a
-.BR ^ ,
-.BR $ ,
-.BR * ,
-.BR \- ,
-or
-.BR % .
-Words are numbered from the beginning of the line,
-with the first word being denoted by 0 (zero).
-Words are inserted into the current line separated by single spaces.
-.PP
-.PD 0
-.TP
-.B 0 (zero)
-The zeroth word. For the shell, this is the command
-word.
-.TP
-.I n
-The \fIn\fRth word.
-.TP
-.B ^
-The first argument. That is, word 1.
-.TP
-.B $
-The last word. This is usually the last argument, but will expand to the
-zeroth word if there is only one word in the line.
-.TP
-.B %
-The word matched by the most recent `?\fIstring\fR?' search.
-.TP
-.I x\fB\-\fPy
-A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
-.TP
-.B *
-All of the words but the zeroth. This is a synonym
-for `\fI1\-$\fP'. It is not an error to use
-.B *
-if there is just one
-word in the event; the empty string is returned in that case.
-.TP
-.B x*
-Abbreviates \fIx\-$\fP.
-.TP
-.B x\-
-Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
-.PD
-.PP
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-.SS Modifiers
-.PP
-After the optional word designator, there may appear a sequence of
-one or more of the following modifiers, each preceded by a `:'.
-.PP
-.PD 0
-.PP
-.TP
-.B h
-Remove a trailing filename component, leaving only the head.
-.TP
-.B t
-Remove all leading filename components, leaving the tail.
-.TP
-.B r
-Remove a trailing suffix of the form \fI.xxx\fP, leaving the
-basename.
-.TP
-.B e
-Remove all but the trailing suffix.
-.TP
-.B p
-Print the new command but do not execute it.
-.TP
-.B q
-Quote the substituted words, escaping further substitutions.
-.TP
-.B x
-Quote the substituted words as with
-.BR q ,
-but break into words at
-.B blanks
-and newlines.
-.TP
-.B s/\fIold\fP/\fInew\fP/
-Substitute
-.I new
-for the first occurrence of
-.I old
-in the event line. Any delimiter can be used in place of /. The
-final delimiter is optional if it is the last character of the
-event line. The delimiter may be quoted in
-.I old
-and
-.I new
-with a single backslash. If & appears in
-.IR new ,
-it is replaced by
-.IR old .
-A single backslash will quote the &. If
-.I old
-is null, it is set to the last
-.I old
-substituted, or, if no previous history substitutions took place,
-the last
-.I string
-in a
-.B !?\fIstring\fR\fB[?]\fR
-search.
-.TP
-.B &
-Repeat the previous substitution.
-.TP
-.B g
-Cause changes to be applied over the entire event line. This is
-used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR')
-or `\fB:&\fP'. If used with
-`\fB:s\fP', any delimiter can be used
-in place of /, and the final delimiter is optional
-if it is the last character of the event line.
-An \fBa\fP may be used as a synonym for \fBg\fP.
-.TP
-.B G
-Apply the following `\fBs\fP' modifier once to each word in the event line.
-.PD
-.SH "SHELL BUILTIN COMMANDS"
-.\" start of bash_builtins
-.zZ
-.PP
-Unless otherwise noted, each builtin command documented in this
-section as accepting options preceded by
-.B \-
-accepts
-.B \-\-
-to signify the end of the options.
-The \fB:\fP, \fBtrue\fP, \fBfalse\fP, and \fBtest\fP builtins
-do not accept options and do not treat \fB\-\-\fP specially.
-The \fBexit\fP, \fBlogout\fP, \fBbreak\fP, \fBcontinue\fP, \fBlet\fP,
-and \fBshift\fP builtins accept and process arguments beginning with
-\fB\-\fP without requiring \fB\-\-\fP.
-Other builtins that accept arguments but are not specified as accepting
-options interpret arguments beginning with \fB\-\fP as invalid options and
-require \fB\-\-\fP to prevent this interpretation.
-.sp .5
-.PD 0
-.TP
-\fB:\fP [\fIarguments\fP]
-.PD
-No effect; the command does nothing beyond expanding
-.I arguments
-and performing any specified
-redirections. A zero exit code is returned.
-.TP
-\fB .\| \fP \fIfilename\fP [\fIarguments\fP]
-.PD 0
-.TP
-\fBsource\fP \fIfilename\fP [\fIarguments\fP]
-.PD
-Read and execute commands from
-.I filename
-in the current
-shell environment and return the exit status of the last command
-executed from
-.IR filename .
-If
-.I filename
-does not contain a slash, filenames in
-.SM
-.B PATH
-are used to find the directory containing
-.IR filename .
-The file searched for in
-.SM
-.B PATH
-need not be executable.
-When \fBbash\fP is not in \fIposix mode\fP, the current directory is
-searched if no file is found in
-.SM
-.BR PATH .
-If the
-.B sourcepath
-option to the
-.B shopt
-builtin command is turned off, the
-.SM
-.B PATH
-is not searched.
-If any \fIarguments\fP are supplied, they become the positional
-parameters when \fIfilename\fP is executed. Otherwise the positional
-parameters are unchanged.
-The return status is the status of the last command exited within
-the script (0 if no commands are executed), and false if
-.I filename
-is not found or cannot be read.
-.TP
-\fBalias\fP [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
-\fBAlias\fP with no arguments or with the
-.B \-p
-option prints the list of aliases in the form
-\fBalias\fP \fIname\fP=\fIvalue\fP on standard output.
-When arguments are supplied, an alias is defined for
-each \fIname\fP whose \fIvalue\fP is given.
-A trailing space in \fIvalue\fP causes the next word to be
-checked for alias substitution when the alias is expanded.
-For each \fIname\fP in the argument list for which no \fIvalue\fP
-is supplied, the name and value of the alias is printed.
-\fBAlias\fP returns true unless a \fIname\fP is given for which
-no alias has been defined.
-.TP
-\fBbg\fP [\fIjobspec\fP ...]
-Resume each suspended job \fIjobspec\fP in the background, as if it
-had been started with
-.BR & .
-If
-.I jobspec
-is not present, the shell's notion of the \fIcurrent job\fP is used.
-.B bg
-.I jobspec
-returns 0 unless run when job control is disabled or, when run with
-job control enabled, any specified \fIjobspec\fP was not found
-or was started without job control.
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSVX\fP]
-.PD 0
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-q\fP \fIfunction\fP] [\fB\-u\fP \fIfunction\fP] [\fB\-r\fP \fIkeyseq\fP]
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-f\fP \fIfilename\fP
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fB\-x\fP \fIkeyseq\fP:\fIshell\-command\fP
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIfunction\-name\fP
-.TP
-\fBbind\fP [\fB\-m\fP \fIkeymap\fP] \fIkeyseq\fP:\fIreadline\-command\fP
-.PD
-Display current
-.B readline
-key and function bindings, bind a key sequence to a
-.B readline
-function or macro, or set a
-.B readline
-variable.
-Each non-option argument is a command as it would appear in
-.IR .inputrc ,
-but each binding or command must be passed as a separate argument;
-e.g., '"\eC\-x\eC\-r": re\-read\-init\-file'.
-Options, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-m \fIkeymap\fP
-Use
-.I keymap
-as the keymap to be affected by the subsequent bindings.
-Acceptable
-.I keymap
-names are
-\fIemacs, emacs\-standard, emacs\-meta, emacs\-ctlx, vi,
-vi\-move, vi\-command\fP, and
-.IR vi\-insert .
-\fIvi\fP is equivalent to \fIvi\-command\fP; \fIemacs\fP is
-equivalent to \fIemacs\-standard\fP.
-.TP
-.B \-l
-List the names of all \fBreadline\fP functions.
-.TP
-.B \-p
-Display \fBreadline\fP function names and bindings in such a way
-that they can be re-read.
-.TP
-.B \-P
-List current \fBreadline\fP function names and bindings.
-.TP
-.B \-s
-Display \fBreadline\fP key sequences bound to macros and the strings
-they output in such a way that they can be re-read.
-.TP
-.B \-S
-Display \fBreadline\fP key sequences bound to macros and the strings
-they output.
-.TP
-.B \-v
-Display \fBreadline\fP variable names and values in such a way that they
-can be re-read.
-.TP
-.B \-V
-List current \fBreadline\fP variable names and values.
-.TP
-.B \-f \fIfilename\fP
-Read key bindings from \fIfilename\fP.
-.TP
-.B \-q \fIfunction\fP
-Query about which keys invoke the named \fIfunction\fP.
-.TP
-.B \-u \fIfunction\fP
-Unbind all keys bound to the named \fIfunction\fP.
-.TP
-.B \-r \fIkeyseq\fP
-Remove any current binding for \fIkeyseq\fP.
-.TP
-.B \-x \fIkeyseq\fP:\fIshell\-command\fP
-Cause \fIshell\-command\fP to be executed whenever \fIkeyseq\fP is
-entered.
-When \fIshell\-command\fP is executed, the shell sets the
-.SM
-.B READLINE_LINE
-variable to the contents of the \fBreadline\fP line buffer and the
-.SM
-.B READLINE_POINT
-variable to the current location of the insertion point.
-If the executed command changes the value of
-.SM
-.B READLINE_LINE
-or
-.SM
-.BR READLINE_POINT ,
-those new values will be reflected in the editing state.
-.TP
-.B \-X
-List all key sequences bound to shell commands and the associated commands
-in a format that can be reused as input.
-.PD
-.PP
-The return value is 0 unless an unrecognized option is given or an
-error occurred.
-.RE
-.TP
-\fBbreak\fP [\fIn\fP]
-Exit from within a
-.BR for ,
-.BR while ,
-.BR until ,
-or
-.B select
-loop. If \fIn\fP is specified, break \fIn\fP levels.
-.I n
-must be \(>= 1. If
-.I n
-is greater than the number of enclosing loops, all enclosing loops
-are exited.
-The return value is 0 unless \fIn\fP is not greater than or equal to 1.
-.TP
-\fBbuiltin\fP \fIshell\-builtin\fP [\fIarguments\fP]
-Execute the specified shell builtin, passing it
-.IR arguments ,
-and return its exit status.
-This is useful when defining a
-function whose name is the same as a shell builtin,
-retaining the functionality of the builtin within the function.
-The \fBcd\fP builtin is commonly redefined this way.
-The return status is false if
-.I shell\-builtin
-is not a shell builtin command.
-.TP
-\fBcaller\fP [\fIexpr\fP]
-Returns the context of any active subroutine call (a shell function or
-a script executed with the \fB.\fP or \fBsource\fP builtins).
-Without \fIexpr\fP, \fBcaller\fP displays the line number and source
-filename of the current subroutine call.
-If a non-negative integer is supplied as \fIexpr\fP, \fBcaller\fP
-displays the line number, subroutine name, and source file corresponding
-to that position in the current execution call stack. This extra
-information may be used, for example, to print a stack trace. The
-current frame is frame 0.
-The return value is 0 unless the shell is not executing a subroutine
-call or \fIexpr\fP does not correspond to a valid position in the
-call stack.
-.TP
-\fBcd\fP [\fB\-L\fP|[\fB\-P\fP [\fB\-e\fP]] [\-@]] [\fIdir\fP]
-Change the current directory to \fIdir\fP.
-if \fIdir\fP is not supplied, the value of the
-.SM
-.B HOME
-shell variable is the default.
-Any additional arguments following \fIdir\fP are ignored.
-The variable
-.SM
-.B CDPATH
-defines the search path for the directory containing
-.IR dir :
-each directory name in
-.SM
-.B CDPATH
-is searched for \fIdir\fP.
-Alternative directory names in
-.SM
-.B CDPATH
-are separated by a colon (:). A null directory name in
-.SM
-.B CDPATH
-is the same as the current directory, i.e., ``\fB.\fP''. If
-.I dir
-begins with a slash (/),
-then
-.SM
-.B CDPATH
-is not used. The
-.B \-P
-option causes \fBcd\fP to use the physical directory structure
-by resolving symbolic links while traversing \fIdir\fP and
-before processing instances of \fI..\fP in \fIdir\fP (see also the
-.B \-P
-option to the
-.B set
-builtin command); the
-.B \-L
-option forces symbolic links to be followed by resolving the link
-after processing instances of \fI..\fP in \fIdir\fP.
-If \fI..\fP appears in \fIdir\fP, it is processed by removing the
-immediately previous pathname component from \fIdir\fP, back to a slash
-or the beginning of \fIdir\fP.
-If the
-.B \-e
-option is supplied with
-.BR \-P ,
-and the current working directory cannot be successfully determined
-after a successful directory change, \fBcd\fP will return an unsuccessful
-status.
-On systems that support it, the \fB\-@\fP option presents the extended
-attributes associated with a file as a directory.
-An argument of
-.B \-
-is converted to
-.SM
-.B $OLDPWD
-before the directory change is attempted.
-If a non-empty directory name from
-.SM
-.B CDPATH
-is used, or if
-\fB\-\fP is the first argument, and the directory change is
-successful, the absolute pathname of the new working directory is
-written to the standard output.
-The return value is true if the directory was successfully changed;
-false otherwise.
-.TP
-\fBcommand\fP [\fB\-pVv\fP] \fIcommand\fP [\fIarg\fP ...]
-Run
-.I command
-with
-.I args
-suppressing the normal shell function lookup.
-Only builtin commands or commands found in the
-.SM
-.B PATH
-are executed. If the
-.B \-p
-option is given, the search for
-.I command
-is performed using a default value for
-.SM
-.B PATH
-that is guaranteed to find all of the standard utilities.
-If either the
-.B \-V
-or
-.B \-v
-option is supplied, a description of
-.I command
-is printed. The
-.B \-v
-option causes a single word indicating the command or filename
-used to invoke
-.I command
-to be displayed; the
-.B \-V
-option produces a more verbose description.
-If the
-.B \-V
-or
-.B \-v
-option is supplied, the exit status is 0 if
-.I command
-was found, and 1 if not. If neither option is supplied and
-an error occurred or
-.I command
-cannot be found, the exit status is 127. Otherwise, the exit status of the
-.B command
-builtin is the exit status of
-.IR command .
-.TP
-\fBcompgen\fP [\fIoption\fP] [\fIword\fP]
-Generate possible completion matches for \fIword\fP according to
-the \fIoption\fPs, which may be any option accepted by the
-.B complete
-builtin with the exception of \fB\-p\fP and \fB\-r\fP, and write
-the matches to the standard output.
-When using the \fB\-F\fP or \fB\-C\fP options, the various shell variables
-set by the programmable completion facilities, while available, will not
-have useful values.
-.sp 1
-The matches will be generated in the same way as if the programmable
-completion code had generated them directly from a completion specification
-with the same flags.
-If \fIword\fP is specified, only those completions matching \fIword\fP
-will be displayed.
-.sp 1
-The return value is true unless an invalid option is supplied, or no
-matches were generated.
-.TP
-\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\fP] [\fB\-DE\fP] [\fB\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP]
-.br
-[\fB\-X\fP \fIfilterpat\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP] \fIname\fP [\fIname ...\fP]
-.PD 0
-.TP
-\fBcomplete\fP \fB\-pr\fP [\fB\-DE\fP] [\fIname\fP ...]
-.PD
-Specify how arguments to each \fIname\fP should be completed.
-If the \fB\-p\fP option is supplied, or if no options are supplied,
-existing completion specifications are printed in a way that allows
-them to be reused as input.
-The \fB\-r\fP option removes a completion specification for
-each \fIname\fP, or, if no \fIname\fPs are supplied, all
-completion specifications.
-The \fB\-D\fP option indicates that the remaining options and actions should
-apply to the ``default'' command completion; that is, completion attempted
-on a command for which no completion has previously been defined.
-The \fB\-E\fP option indicates that the remaining options and actions should
-apply to ``empty'' command completion; that is, completion attempted on a
-blank line.
-.sp 1
-The process of applying these completion specifications when word completion
-is attempted is described above under \fBProgrammable Completion\fP.
-.sp 1
-Other options, if specified, have the following meanings.
-The arguments to the \fB\-G\fP, \fB\-W\fP, and \fB\-X\fP options
-(and, if necessary, the \fB\-P\fP and \fB\-S\fP options)
-should be quoted to protect them from expansion before the
-.B complete
-builtin is invoked.
-.RS
-.PD 0
-.TP 8
-\fB\-o\fP \fIcomp-option\fP
-The \fIcomp-option\fP controls several aspects of the compspec's behavior
-beyond the simple generation of completions.
-\fIcomp-option\fP may be one of:
-.RS
-.TP 8
-.B bashdefault
-Perform the rest of the default \fBbash\fP completions if the compspec
-generates no matches.
-.TP 8
-.B default
-Use readline's default filename completion if the compspec generates
-no matches.
-.TP 8
-.B dirnames
-Perform directory name completion if the compspec generates no matches.
-.TP 8
-.B filenames
-Tell readline that the compspec generates filenames, so it can perform any
-filename\-specific processing (like adding a slash to directory names,
-quoting special characters, or suppressing trailing spaces).
-Intended to be used with shell functions.
-.TP 8
-.B noquote
-Tell readline not to quote the completed words if they are filenames
-(quoting filenames is the default).
-.TP 8
-.B nospace
-Tell readline not to append a space (the default) to words completed at
-the end of the line.
-.TP 8
-.B plusdirs
-After any matches defined by the compspec are generated,
-directory name completion is attempted and any
-matches are added to the results of the other actions.
-.RE
-.TP 8
-\fB\-A\fP \fIaction\fP
-The \fIaction\fP may be one of the following to generate a list of possible
-completions:
-.RS
-.TP 8
-.B alias
-Alias names. May also be specified as \fB\-a\fP.
-.TP 8
-.B arrayvar
-Array variable names.
-.TP 8
-.B binding
-\fBReadline\fP key binding names.
-.TP 8
-.B builtin
-Names of shell builtin commands. May also be specified as \fB\-b\fP.
-.TP 8
-.B command
-Command names. May also be specified as \fB\-c\fP.
-.TP 8
-.B directory
-Directory names. May also be specified as \fB\-d\fP.
-.TP 8
-.B disabled
-Names of disabled shell builtins.
-.TP 8
-.B enabled
-Names of enabled shell builtins.
-.TP 8
-.B export
-Names of exported shell variables. May also be specified as \fB\-e\fP.
-.TP 8
-.B file
-File names. May also be specified as \fB\-f\fP.
-.TP 8
-.B function
-Names of shell functions.
-.TP 8
-.B group
-Group names. May also be specified as \fB\-g\fP.
-.TP 8
-.B helptopic
-Help topics as accepted by the \fBhelp\fP builtin.
-.TP 8
-.B hostname
-Hostnames, as taken from the file specified by the
-.SM
-.B HOSTFILE
-shell variable.
-.TP 8
-.B job
-Job names, if job control is active. May also be specified as \fB\-j\fP.
-.TP 8
-.B keyword
-Shell reserved words. May also be specified as \fB\-k\fP.
-.TP 8
-.B running
-Names of running jobs, if job control is active.
-.TP 8
-.B service
-Service names. May also be specified as \fB\-s\fP.
-.TP 8
-.B setopt
-Valid arguments for the \fB\-o\fP option to the \fBset\fP builtin.
-.TP 8
-.B shopt
-Shell option names as accepted by the \fBshopt\fP builtin.
-.TP 8
-.B signal
-Signal names.
-.TP 8
-.B stopped
-Names of stopped jobs, if job control is active.
-.TP 8
-.B user
-User names. May also be specified as \fB\-u\fP.
-.TP 8
-.B variable
-Names of all shell variables. May also be specified as \fB\-v\fP.
-.RE
-.TP 8
-\fB\-C\fP \fIcommand\fP
-\fIcommand\fP is executed in a subshell environment, and its output is
-used as the possible completions.
-.TP 8
-\fB\-F\fP \fIfunction\fP
-The shell function \fIfunction\fP is executed in the current shell
-environment.
-When the function is executed,
-the first argument (\fB$1\fP) is the name of the command whose arguments are
-being completed,
-the second argument (\fB$2\fP) is the word being completed,
-and the third argument (\fB$3\fP) is the word preceding the word being
-completed on the current command line.
-When it finishes, the possible completions are retrieved from the value
-of the
-.SM
-.B COMPREPLY
-array variable.
-.TP 8
-\fB\-G\fP \fIglobpat\fP
-The pathname expansion pattern \fIglobpat\fP is expanded to generate
-the possible completions.
-.TP 8
-\fB\-P\fP \fIprefix\fP
-\fIprefix\fP is added at the beginning of each possible completion
-after all other options have been applied.
-.TP 8
-\fB\-S\fP \fIsuffix\fP
-\fIsuffix\fP is appended to each possible completion
-after all other options have been applied.
-.TP 8
-\fB\-W\fP \fIwordlist\fP
-The \fIwordlist\fP is split using the characters in the
-.SM
-.B IFS
-special variable as delimiters, and each resultant word is expanded.
-The possible completions are the members of the resultant list which
-match the word being completed.
-.TP 8
-\fB\-X\fP \fIfilterpat\fP
-\fIfilterpat\fP is a pattern as used for pathname expansion.
-It is applied to the list of possible completions generated by the
-preceding options and arguments, and each completion matching
-\fIfilterpat\fP is removed from the list.
-A leading \fB!\fP in \fIfilterpat\fP negates the pattern; in this
-case, any completion not matching \fIfilterpat\fP is removed.
-.PD
-.PP
-The return value is true unless an invalid option is supplied, an option
-other than \fB\-p\fP or \fB\-r\fP is supplied without a \fIname\fP
-argument, an attempt is made to remove a completion specification for
-a \fIname\fP for which no specification exists, or
-an error occurs adding a completion specification.
-.RE
-.TP
-\fBcompopt\fP [\fB\-o\fP \fIoption\fP] [\fB\-DE\fP] [\fB+o\fP \fIoption\fP] [\fIname\fP]
-Modify completion options for each \fIname\fP according to the
-\fIoption\fPs, or for the
-currently-executing completion if no \fIname\fPs are supplied.
-If no \fIoption\fPs are given, display the completion options for each
-\fIname\fP or the current completion.
-The possible values of \fIoption\fP are those valid for the \fBcomplete\fP
-builtin described above.
-The \fB\-D\fP option indicates that the remaining options should
-apply to the ``default'' command completion; that is, completion attempted
-on a command for which no completion has previously been defined.
-The \fB\-E\fP option indicates that the remaining options should
-apply to ``empty'' command completion; that is, completion attempted on a
-blank line.
-.sp 1
-The return value is true unless an invalid option is supplied, an attempt
-is made to modify the options for a \fIname\fP for which no completion
-specification exists, or an output error occurs.
-.TP
-\fBcontinue\fP [\fIn\fP]
-Resume the next iteration of the enclosing
-.BR for ,
-.BR while ,
-.BR until ,
-or
-.B select
-loop.
-If
-.I n
-is specified, resume at the \fIn\fPth enclosing loop.
-.I n
-must be \(>= 1. If
-.I n
-is greater than the number of enclosing loops, the last enclosing loop
-(the ``top-level'' loop) is resumed.
-The return value is 0 unless \fIn\fP is not greater than or equal to 1.
-.TP
-\fBdeclare\fP [\fB\-aAfFgilnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
-.PD 0
-.TP
-\fBtypeset\fP [\fB\-aAfFgilnrtux\fP] [\fB\-p\fP] [\fIname\fP[=\fIvalue\fP] ...]
-.PD
-Declare variables and/or give them attributes.
-If no \fIname\fPs are given then display the values of variables.
-The
-.B \-p
-option will display the attributes and values of each
-.IR name .
-When
-.B \-p
-is used with \fIname\fP arguments, additional options,
-other than \fB\-f\fP and \fB\-F\fP, are ignored.
-When
-.B \-p
-is supplied without \fIname\fP arguments, it will display the attributes
-and values of all variables having the attributes specified by the
-additional options.
-If no other options are supplied with \fB\-p\fP, \fBdeclare\fP will display
-the attributes and values of all shell variables. The \fB\-f\fP option
-will restrict the display to shell functions.
-The
-.B \-F
-option inhibits the display of function definitions; only the
-function name and attributes are printed.
-If the \fBextdebug\fP shell option is enabled using \fBshopt\fP,
-the source file name and line number where the function is defined
-are displayed as well. The
-.B \-F
-option implies
-.BR \-f .
-The
-.B \-g
-option forces variables to be created or modified at the global scope,
-even when \fBdeclare\fP is executed in a shell function.
-It is ignored in all other cases.
-The following options can
-be used to restrict output to variables with the specified attribute or
-to give variables attributes:
-.RS
-.PD 0
-.TP
-.B \-a
-Each \fIname\fP is an indexed array variable (see
-.B Arrays
-above).
-.TP
-.B \-A
-Each \fIname\fP is an associative array variable (see
-.B Arrays
-above).
-.TP
-.B \-f
-Use function names only.
-.TP
-.B \-i
-The variable is treated as an integer; arithmetic evaluation (see
-.SM
-.B "ARITHMETIC EVALUATION"
-above) is performed when the variable is assigned a value.
-.TP
-.B \-l
-When the variable is assigned a value, all upper-case characters are
-converted to lower-case.
-The upper-case attribute is disabled.
-.TP
-.B \-n
-Give each \fIname\fP the \fInameref\fP attribute, making
-it a name reference to another variable.
-That other variable is defined by the value of \fIname\fP.
-All references, assignments, and attribute modifications
-to \fIname\fP, except for changing the
-\fB\-n\fP attribute itself, are performed on the variable referenced by
-\fIname\fP's value.
-The nameref attribute cannot be applied to array variables.
-.TP
-.B \-r
-Make \fIname\fPs readonly. These names cannot then be assigned values
-by subsequent assignment statements or unset.
-.TP
-.B \-t
-Give each \fIname\fP the \fItrace\fP attribute.
-Traced functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps from
-the calling shell.
-The trace attribute has no special meaning for variables.
-.TP
-.B \-u
-When the variable is assigned a value, all lower-case characters are
-converted to upper-case.
-The lower-case attribute is disabled.
-.TP
-.B \-x
-Mark \fIname\fPs for export to subsequent commands via the environment.
-.PD
-.PP
-Using `+' instead of `\-'
-turns off the attribute instead,
-with the exceptions that \fB+a\fP
-may not be used to destroy an array variable and \fB+r\fP will not
-remove the readonly attribute.
-When used in a function,
-.B declare
-and
-.B typeset
-make each
-\fIname\fP local, as with the
-.B local
-command,
-unless the \fB\-g\fP option is supplied.
-If a variable name is followed by =\fIvalue\fP, the value of
-the variable is set to \fIvalue\fP.
-When using \fB\-a\fP or \fB\-A\fP and the compound assignment syntax to
-create array variables, additional attributes do not take effect until
-subsequent assignments.
-The return value is 0 unless an invalid option is encountered,
-an attempt is made to define a function using
-.if n ``\-f foo=bar'',
-.if t \f(CW\-f foo=bar\fP,
-an attempt is made to assign a value to a readonly variable,
-an attempt is made to assign a value to an array variable without
-using the compound assignment syntax (see
-.B Arrays
-above), one of the \fInames\fP is not a valid shell variable name,
-an attempt is made to turn off readonly status for a readonly variable,
-an attempt is made to turn off array status for an array variable,
-or an attempt is made to display a non-existent function with \fB\-f\fP.
-.RE
-.TP
-.B dirs [\fB\-clpv\fP] [+\fIn\fP] [\-\fIn\fP]
-Without options, displays the list of currently remembered directories.
-The default display is on a single line with directory names separated
-by spaces.
-Directories are added to the list with the
-.B pushd
-command; the
-.B popd
-command removes entries from the list.
-.RS
-.PD 0
-.TP
-.B \-c
-Clears the directory stack by deleting all of the entries.
-.TP
-.B \-l
-Produces a listing using full pathnames;
-the default listing format uses a tilde to denote the home directory.
-.TP
-.B \-p
-Print the directory stack with one entry per line.
-.TP
-.B \-v
-Print the directory stack with one entry per line,
-prefixing each entry with its index in the stack.
-.TP
-\fB+\fP\fIn\fP
-Displays the \fIn\fPth entry counting from the left of the list
-shown by
-.B dirs
-when invoked without options, starting with zero.
-.TP
-\fB\-\fP\fIn\fP
-Displays the \fIn\fPth entry counting from the right of the list
-shown by
-.B dirs
-when invoked without options, starting with zero.
-.PD
-.PP
-The return value is 0 unless an
-invalid option is supplied or \fIn\fP indexes beyond the end
-of the directory stack.
-.RE
-.TP
-\fBdisown\fP [\fB\-ar\fP] [\fB\-h\fP] [\fIjobspec\fP ...]
-Without options, remove each
-.I jobspec
-from the table of active jobs.
-If
-.I jobspec
-is not present, and neither the \fB\-a\fP nor the \fB\-r\fP option
-is supplied, the \fIcurrent job\fP is used.
-If the \fB\-h\fP option is given, each
-.I jobspec
-is not removed from the table, but is marked so that
-.SM
-.B SIGHUP
-is not sent to the job if the shell receives a
-.SM
-.BR SIGHUP .
-If no
-.I jobspec
-is supplied, the
-.B \-a
-option means to remove or mark all jobs; the
-.B \-r
-option without a
-.I jobspec
-argument restricts operation to running jobs.
-The return value is 0 unless a
-.I jobspec
-does not specify a valid job.
-.TP
-\fBecho\fP [\fB\-neE\fP] [\fIarg\fP ...]
-Output the \fIarg\fPs, separated by spaces, followed by a newline.
-The return status is 0 unless a write error occurs.
-If \fB\-n\fP is specified, the trailing newline is
-suppressed. If the \fB\-e\fP option is given, interpretation of
-the following backslash-escaped characters is enabled. The
-.B \-E
-option disables the interpretation of these escape characters,
-even on systems where they are interpreted by default.
-The \fBxpg_echo\fP shell option may be used to
-dynamically determine whether or not \fBecho\fP expands these
-escape characters by default.
-.B echo
-does not interpret \fB\-\-\fP to mean the end of options.
-.B echo
-interprets the following escape sequences:
-.RS
-.PD 0
-.TP
-.B \ea
-alert (bell)
-.TP
-.B \eb
-backspace
-.TP
-.B \ec
-suppress further output
-.TP
-.B \ee
-.TP
-.B \eE
-an escape character
-.TP
-.B \ef
-form feed
-.TP
-.B \en
-new line
-.TP
-.B \er
-carriage return
-.TP
-.B \et
-horizontal tab
-.TP
-.B \ev
-vertical tab
-.TP
-.B \e\e
-backslash
-.TP
-.B \e0\fInnn\fP
-the eight-bit character whose value is the octal value \fInnn\fP
-(zero to three octal digits)
-.TP
-.B \ex\fIHH\fP
-the eight-bit character whose value is the hexadecimal value \fIHH\fP
-(one or two hex digits)
-.TP
-.B \eu\fIHHHH\fP
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-\fIHHHH\fP (one to four hex digits)
-.TP
-.B \eU\fIHHHHHHHH\fP
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-\fIHHHHHHHH\fP (one to eight hex digits)
-.PD
-.RE
-.TP
-\fBenable\fP [\fB\-a\fP] [\fB\-dnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
-Enable and disable builtin shell commands.
-Disabling a builtin allows a disk command which has the same name
-as a shell builtin to be executed without specifying a full pathname,
-even though the shell normally searches for builtins before disk commands.
-If \fB\-n\fP is used, each \fIname\fP
-is disabled; otherwise,
-\fInames\fP are enabled. For example, to use the
-.B test
-binary found via the
-.SM
-.B PATH
-instead of the shell builtin version, run
-.if t \f(CWenable -n test\fP.
-.if n ``enable -n test''.
-The
-.B \-f
-option means to load the new builtin command
-.I name
-from shared object
-.IR filename ,
-on systems that support dynamic loading. The
-.B \-d
-option will delete a builtin previously loaded with
-.BR \-f .
-If no \fIname\fP arguments are given, or if the
-.B \-p
-option is supplied, a list of shell builtins is printed.
-With no other option arguments, the list consists of all enabled
-shell builtins.
-If \fB\-n\fP is supplied, only disabled builtins are printed.
-If \fB\-a\fP is supplied, the list printed includes all builtins, with an
-indication of whether or not each is enabled.
-If \fB\-s\fP is supplied, the output is restricted to the POSIX
-\fIspecial\fP builtins.
-The return value is 0 unless a
-.I name
-is not a shell builtin or there is an error loading a new builtin
-from a shared object.
-.TP
-\fBeval\fP [\fIarg\fP ...]
-The \fIarg\fPs are read and concatenated together into a single
-command. This command is then read and executed by the shell, and
-its exit status is returned as the value of
-.BR eval .
-If there are no
-.IR args ,
-or only null arguments,
-.B eval
-returns 0.
-.TP
-\fBexec\fP [\fB\-cl\fP] [\fB\-a\fP \fIname\fP] [\fIcommand\fP [\fIarguments\fP]]
-If
-.I command
-is specified, it replaces the shell.
-No new process is created. The
-.I arguments
-become the arguments to \fIcommand\fP.
-If the
-.B \-l
-option is supplied,
-the shell places a dash at the beginning of the zeroth argument passed to
-.IR command .
-This is what
-.IR login (1)
-does. The
-.B \-c
-option causes
-.I command
-to be executed with an empty environment. If
-.B \-a
-is supplied, the shell passes
-.I name
-as the zeroth argument to the executed command.
-If
-.I command
-cannot be executed for some reason, a non-interactive shell exits,
-unless the
-.B execfail
-shell option
-is enabled. In that case, it returns failure.
-An interactive shell returns failure if the file cannot be executed.
-If
-.I command
-is not specified, any redirections take effect in the current shell,
-and the return status is 0. If there is a redirection error, the
-return status is 1.
-.TP
-\fBexit\fP [\fIn\fP]
-Cause the shell to exit
-with a status of \fIn\fP. If
-.I n
-is omitted, the exit status
-is that of the last command executed.
-A trap on
-.SM
-.B EXIT
-is executed before the shell terminates.
-.TP
-\fBexport\fP [\fB\-fn\fP\^] [\fIname\fP[=\fIword\fP]] ...
-.PD 0
-.TP
-.B export \-p
-.PD
-The supplied
-.I names
-are marked for automatic export to the environment of
-subsequently executed commands. If the
-.B \-f
-option is given, the
-.I names
-refer to functions.
-If no
-.I names
-are given, or if the
-.B \-p
-option is supplied, a list
-of names of all exported variables is printed.
-The
-.B \-n
-option causes the export property to be removed from each
-\fIname\fP.
-If a variable name is followed by =\fIword\fP, the value of
-the variable is set to \fIword\fP.
-.B export
-returns an exit status of 0 unless an invalid option is
-encountered,
-one of the \fInames\fP is not a valid shell variable name, or
-.B \-f
-is supplied with a
-.I name
-that is not a function.
-.TP
-\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-lnr\fP] [\fIfirst\fP] [\fIlast\fP]
-.PD 0
-.TP
-\fBfc\fP \fB\-s\fP [\fIpat\fP=\fIrep\fP] [\fIcmd\fP]
-.PD
-The first form selects a range of commands from
-.I first
-to
-.I last
-from the history list and displays or edits and re-executes them.
-.I First
-and
-.I last
-may be specified as a string (to locate the last command beginning
-with that string) or as a number (an index into the history list,
-where a negative number is used as an offset from the current
-command number). If
-.I last
-is not specified it is set to
-the current command for listing (so that
-.if n ``fc \-l \-10''
-.if t \f(CWfc \-l \-10\fP
-prints the last 10 commands) and to
-.I first
-otherwise.
-If
-.I first
-is not specified it is set to the previous
-command for editing and \-16 for listing.
-.sp 1
-The
-.B \-n
-option suppresses
-the command numbers when listing. The
-.B \-r
-option reverses the order of
-the commands. If the
-.B \-l
-option is given,
-the commands are listed on
-standard output. Otherwise, the editor given by
-.I ename
-is invoked
-on a file containing those commands. If
-.I ename
-is not given, the
-value of the
-.SM
-.B FCEDIT
-variable is used, and
-the value of
-.SM
-.B EDITOR
-if
-.SM
-.B FCEDIT
-is not set. If neither variable is set,
-.FN vi
-is used. When editing is complete, the edited commands are
-echoed and executed.
-.sp 1
-In the second form, \fIcommand\fP is re-executed after each instance
-of \fIpat\fP is replaced by \fIrep\fP.
-\fICommand\fP is intepreted the same as \fIfirst\fP above.
-A useful alias to use with this is
-.if n ``r="fc -s"'',
-.if t \f(CWr='fc \-s'\fP,
-so that typing
-.if n ``r cc''
-.if t \f(CWr cc\fP
-runs the last command beginning with
-.if n ``cc''
-.if t \f(CWcc\fP
-and typing
-.if n ``r''
-.if t \f(CWr\fP
-re-executes the last command.
-.sp 1
-If the first form is used, the return value is 0 unless an invalid
-option is encountered or
-.I first
-or
-.I last
-specify history lines out of range.
-If the
-.B \-e
-option is supplied, the return value is the value of the last
-command executed or failure if an error occurs with the temporary
-file of commands. If the second form is used, the return status
-is that of the command re-executed, unless
-.I cmd
-does not specify a valid history line, in which case
-.B fc
-returns failure.
-.TP
-\fBfg\fP [\fIjobspec\fP]
-Resume
-.I jobspec
-in the foreground, and make it the current job.
-If
-.I jobspec
-is not present, the shell's notion of the \fIcurrent job\fP is used.
-The return value is that of the command placed into the foreground,
-or failure if run when job control is disabled or, when run with
-job control enabled, if
-.I jobspec
-does not specify a valid job or
-.I jobspec
-specifies a job that was started without job control.
-.TP
-\fBgetopts\fP \fIoptstring\fP \fIname\fP [\fIargs\fP]
-.B getopts
-is used by shell procedures to parse positional parameters.
-.I optstring
-contains the option characters to be recognized; if a character
-is followed by a colon, the option is expected to have an
-argument, which should be separated from it by white space.
-The colon and question mark characters may not be used as
-option characters.
-Each time it is invoked,
-.B getopts
-places the next option in the shell variable
-.IR name ,
-initializing
-.I name
-if it does not exist,
-and the index of the next argument to be processed into the
-variable
-.SM
-.BR OPTIND .
-.SM
-.B OPTIND
-is initialized to 1 each time the shell or a shell script
-is invoked. When an option requires an argument,
-.B getopts
-places that argument into the variable
-.SM
-.BR OPTARG .
-The shell does not reset
-.SM
-.B OPTIND
-automatically; it must be manually reset between multiple
-calls to
-.B getopts
-within the same shell invocation if a new set of parameters
-is to be used.
-.sp 1
-When the end of options is encountered, \fBgetopts\fP exits with a
-return value greater than zero.
-.SM
-.B OPTIND
-is set to the index of the first non-option argument,
-and \fIname\fP is set to ?.
-.sp 1
-.B getopts
-normally parses the positional parameters, but if more arguments are
-given in
-.IR args ,
-.B getopts
-parses those instead.
-.sp 1
-.B getopts
-can report errors in two ways. If the first character of
-.I optstring
-is a colon,
-.I silent
-error reporting is used. In normal operation, diagnostic messages
-are printed when invalid options or missing option arguments are
-encountered.
-If the variable
-.SM
-.B OPTERR
-is set to 0, no error messages will be displayed, even if the first
-character of
-.I optstring
-is not a colon.
-.sp 1
-If an invalid option is seen,
-.B getopts
-places ? into
-.I name
-and, if not silent,
-prints an error message and unsets
-.SM
-.BR OPTARG .
-If
-.B getopts
-is silent,
-the option character found is placed in
-.SM
-.B OPTARG
-and no diagnostic message is printed.
-.sp 1
-If a required argument is not found, and
-.B getopts
-is not silent,
-a question mark (\^\fB?\fP\^) is placed in
-.IR name ,
-.SM
-.B OPTARG
-is unset, and a diagnostic message is printed.
-If
-.B getopts
-is silent, then a colon (\^\fB:\fP\^) is placed in
-.I name
-and
-.SM
-.B OPTARG
-is set to the option character found.
-.sp 1
-.B getopts
-returns true if an option, specified or unspecified, is found.
-It returns false if the end of options is encountered or an
-error occurs.
-.TP
-\fBhash\fP [\fB\-lr\fP] [\fB\-p\fP \fIfilename\fP] [\fB\-dt\fP] [\fIname\fP]
-Each time \fBhash\fP is invoked,
-the full pathname of the command
-.I name
-is determined by searching
-the directories in
-.B $PATH
-and remembered. Any previously-remembered pathname is discarded.
-If the
-.B \-p
-option is supplied, no path search is performed, and
-.I filename
-is used as the full filename of the command.
-The
-.B \-r
-option causes the shell to forget all
-remembered locations.
-The
-.B \-d
-option causes the shell to forget the remembered location of each \fIname\fP.
-If the
-.B \-t
-option is supplied, the full pathname to which each \fIname\fP corresponds
-is printed. If multiple \fIname\fP arguments are supplied with \fB\-t\fP,
-the \fIname\fP is printed before the hashed full pathname.
-The
-.B \-l
-option causes output to be displayed in a format that may be reused as input.
-If no arguments are given, or if only \fB\-l\fP is supplied,
-information about remembered commands is printed.
-The return status is true unless a
-.I name
-is not found or an invalid option is supplied.
-.TP
-\fBhelp\fP [\fB\-dms\fP] [\fIpattern\fP]
-Display helpful information about builtin commands. If
-.I pattern
-is specified,
-.B help
-gives detailed help on all commands matching
-.IR pattern ;
-otherwise help for all the builtins and shell control structures
-is printed.
-.RS
-.PD 0
-.TP
-.B \-d
-Display a short description of each \fIpattern\fP
-.TP
-.B \-m
-Display the description of each \fIpattern\fP in a manpage-like format
-.TP
-.B \-s
-Display only a short usage synopsis for each \fIpattern\fP
-.PD
-.PP
-The return status is 0 unless no command matches
-.IR pattern .
-.RE
-.TP
-\fBhistory [\fIn\fP]
-.PD 0
-.TP
-\fBhistory\fP \fB\-c\fP
-.TP
-\fBhistory \-d\fP \fIoffset\fP
-.TP
-\fBhistory\fP \fB\-anrw\fP [\fIfilename\fP]
-.TP
-\fBhistory\fP \fB\-p\fP \fIarg\fP [\fIarg ...\fP]
-.TP
-\fBhistory\fP \fB\-s\fP \fIarg\fP [\fIarg ...\fP]
-.PD
-With no options, display the command
-history list with line numbers. Lines listed
-with a
-.B *
-have been modified. An argument of
-.I n
-lists only the last
-.I n
-lines.
-If the shell variable
-.SM
-.B HISTTIMEFORMAT
-is set and not null,
-it is used as a format string for \fIstrftime\fP(3) to display
-the time stamp associated with each displayed history entry.
-No intervening blank is printed between the formatted time stamp
-and the history line.
-If \fIfilename\fP is supplied, it is used as the
-name of the history file; if not, the value of
-.SM
-.B HISTFILE
-is used. Options, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-c
-Clear the history list by deleting all the entries.
-.TP
-\fB\-d\fP \fIoffset\fP
-Delete the history entry at position \fIoffset\fP.
-.TP
-.B \-a
-Append the ``new'' history lines (history lines entered since the
-beginning of the current \fBbash\fP session) to the history file.
-.TP
-.B \-n
-Read the history lines not already read from the history
-file into the current history list. These are lines
-appended to the history file since the beginning of the
-current \fBbash\fP session.
-.TP
-.B \-r
-Read the contents of the history file
-and append them to the current history list.
-.TP
-.B \-w
-Write the current history list to the history file, overwriting the
-history file's contents.
-.TP
-.B \-p
-Perform history substitution on the following \fIargs\fP and display
-the result on the standard output.
-Does not store the results in the history list.
-Each \fIarg\fP must be quoted to disable normal history expansion.
-.TP
-.B \-s
-Store the
-.I args
-in the history list as a single entry. The last command in the
-history list is removed before the
-.I args
-are added.
-.PD
-.PP
-If the
-.SM
-.B HISTTIMEFORMAT
-variable is set, the time stamp information
-associated with each history entry is written to the history file,
-marked with the history comment character.
-When the history file is read, lines beginning with the history
-comment character followed immediately by a digit are interpreted
-as timestamps for the previous history line.
-The return value is 0 unless an invalid option is encountered, an
-error occurs while reading or writing the history file, an invalid
-\fIoffset\fP is supplied as an argument to \fB\-d\fP, or the
-history expansion supplied as an argument to \fB\-p\fP fails.
-.RE
-.TP
-\fBjobs\fP [\fB\-lnprs\fP] [ \fIjobspec\fP ... ]
-.PD 0
-.TP
-\fBjobs\fP \fB\-x\fP \fIcommand\fP [ \fIargs\fP ... ]
-.PD
-The first form lists the active jobs. The options have the following
-meanings:
-.RS
-.PD 0
-.TP
-.B \-l
-List process IDs
-in addition to the normal information.
-.TP
-.B \-n
-Display information only about jobs that have changed status since
-the user was last notified of their status.
-.TP
-.B \-p
-List only the process ID of the job's process group
-leader.
-.TP
-.B \-r
-Display only running jobs.
-.TP
-.B \-s
-Display only stopped jobs.
-.PD
-.PP
-If
-.I jobspec
-is given, output is restricted to information about that job.
-The return status is 0 unless an invalid option is encountered
-or an invalid
-.I jobspec
-is supplied.
-.PP
-If the
-.B \-x
-option is supplied,
-.B jobs
-replaces any
-.I jobspec
-found in
-.I command
-or
-.I args
-with the corresponding process group ID, and executes
-.I command
-passing it
-.IR args ,
-returning its exit status.
-.RE
-.TP
-\fBkill\fP [\fB\-s\fP \fIsigspec\fP | \fB\-n\fP \fIsignum\fP | \fB\-\fP\fIsigspec\fP] [\fIpid\fP | \fIjobspec\fP] ...
-.PD 0
-.TP
-\fBkill\fP \fB\-l\fP [\fIsigspec\fP | \fIexit_status\fP]
-.PD
-Send the signal named by
-.I sigspec
-or
-.I signum
-to the processes named by
-.I pid
-or
-.IR jobspec .
-.I sigspec
-is either a case-insensitive signal name such as
-.SM
-.B SIGKILL
-(with or without the
-.SM
-.B SIG
-prefix) or a signal number;
-.I signum
-is a signal number.
-If
-.I sigspec
-is not present, then
-.SM
-.B SIGTERM
-is assumed.
-An argument of
-.B \-l
-lists the signal names.
-If any arguments are supplied when
-.B \-l
-is given, the names of the signals corresponding to the arguments are
-listed, and the return status is 0.
-The \fIexit_status\fP argument to
-.B \-l
-is a number specifying either a signal number or the exit status of
-a process terminated by a signal.
-.B kill
-returns true if at least one signal was successfully sent, or false
-if an error occurs or an invalid option is encountered.
-.TP
-\fBlet\fP \fIarg\fP [\fIarg\fP ...]
-Each
-.I arg
-is an arithmetic expression to be evaluated (see
-.SM
-.B "ARITHMETIC EVALUATION"
-above).
-If the last
-.I arg
-evaluates to 0,
-.B let
-returns 1; 0 is returned otherwise.
-.TP
-\fBlocal\fP [\fIoption\fP] [\fIname\fP[=\fIvalue\fP] ...]
-For each argument, a local variable named
-.I name
-is created, and assigned
-.IR value .
-The \fIoption\fP can be any of the options accepted by \fBdeclare\fP.
-When
-.B local
-is used within a function, it causes the variable
-.I name
-to have a visible scope restricted to that function and its children.
-With no operands,
-.B local
-writes a list of local variables to the standard output. It is
-an error to use
-.B local
-when not within a function. The return status is 0 unless
-.B local
-is used outside a function, an invalid
-.I name
-is supplied, or
-\fIname\fP is a readonly variable.
-.TP
-.B logout
-Exit a login shell.
-.TP
-\fBmapfile\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
-.PD 0
-.TP
-\fBreadarray\fP [\fB\-d\fP \fIdelim\fP] [\fB\-n\fP \fIcount\fP] [\fB\-O\fP \fIorigin\fP] [\fB\-s\fP \fIcount\fP] [\fB\-t\fP] [\fB\-u\fP \fIfd\fP] [\fB\-C\fP \fIcallback\fP] [\fB\-c\fP \fIquantum\fP] [\fIarray\fP]
-.PD
-Read lines from the standard input into the indexed array variable
-.IR array ,
-or from file descriptor
-.IR fd
-if the
-.B \-u
-option is supplied.
-The variable
-.SM
-.B MAPFILE
-is the default \fIarray\fP.
-Options, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-d
-The first character of \fIdelim\fP is used to terminate each input line,
-rather than newline.
-.TP
-.B \-n
-Copy at most
-.I count
-lines. If \fIcount\fP is 0, all lines are copied.
-.TP
-.B \-O
-Begin assigning to
-.I array
-at index
-.IR origin .
-The default index is 0.
-.TP
-.B \-s
-Discard the first \fIcount\fP lines read.
-.TP
-.B \-t
-Remove a trailing newline from each line read.
-.TP
-.B \-u
-Read lines from file descriptor \fIfd\fP instead of the standard input.
-.TP
-.B \-C
-Evaluate
-.I callback
-each time \fIquantum\fP lines are read. The \fB\-c\fP option specifies
-.IR quantum .
-.TP
-.B \-c
-Specify the number of lines read between each call to
-.IR callback .
-.PD
-.PP
-If
-.B \-C
-is specified without
-.BR \-c ,
-the default quantum is 5000.
-When \fIcallback\fP is evaluated, it is supplied the index of the next
-array element to be assigned and the line to be assigned to that element
-as additional arguments.
-\fIcallback\fP is evaluated after the line is read but before the
-array element is assigned.
-.PP
-If not supplied with an explicit origin, \fBmapfile\fP will clear \fIarray\fP
-before assigning to it.
-.PP
-\fBmapfile\fP returns successfully unless an invalid option or option
-argument is supplied, \fIarray\fP is invalid or unassignable, or if
-\fIarray\fP is not an indexed array.
-.RE
-.TP
-\fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP]
-Removes entries from the directory stack. With no arguments,
-removes the top directory from the stack, and performs a
-.B cd
-to the new top directory.
-Arguments, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-n
-Suppresses the normal change of directory when removing directories
-from the stack, so that only the stack is manipulated.
-.TP
-\fB+\fP\fIn\fP
-Removes the \fIn\fPth entry counting from the left of the list
-shown by
-.BR dirs ,
-starting with zero. For example:
-.if n ``popd +0''
-.if t \f(CWpopd +0\fP
-removes the first directory,
-.if n ``popd +1''
-.if t \f(CWpopd +1\fP
-the second.
-.TP
-\fB\-\fP\fIn\fP
-Removes the \fIn\fPth entry counting from the right of the list
-shown by
-.BR dirs ,
-starting with zero. For example:
-.if n ``popd -0''
-.if t \f(CWpopd -0\fP
-removes the last directory,
-.if n ``popd -1''
-.if t \f(CWpopd -1\fP
-the next to last.
-.PD
-.PP
-If the
-.B popd
-command is successful, a
-.B dirs
-is performed as well, and the return status is 0.
-.B popd
-returns false if an invalid option is encountered, the directory stack
-is empty, a non-existent directory stack entry is specified, or the
-directory change fails.
-.RE
-.TP
-\fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP]
-Write the formatted \fIarguments\fP to the standard output under the
-control of the \fIformat\fP.
-The \fB\-v\fP option causes the output to be assigned to the variable
-\fIvar\fP rather than being printed to the standard output.
-.sp 1
-The \fIformat\fP is a character string which contains three types of objects:
-plain characters, which are simply copied to standard output, character
-escape sequences, which are converted and copied to the standard output, and
-format specifications, each of which causes printing of the next successive
-\fIargument\fP.
-In addition to the standard \fIprintf\fP(1) format specifications,
-\fBprintf\fP interprets the following extensions:
-.RS
-.PD 0
-.TP
-.B %b
-causes
-\fBprintf\fP to expand backslash escape sequences in the corresponding
-\fIargument\fP (except that \fB\ec\fP terminates output, backslashes in
-\fB\e\(aq\fP, \fB\e"\fP, and \fB\e?\fP are not removed, and octal escapes
-beginning with \fB\e0\fP may contain up to four digits).
-.TP
-.B %q
-causes \fBprintf\fP to output the corresponding
-\fIargument\fP in a format that can be reused as shell input.
-.TP
-.B %(\fIdatefmt\fP)T
-causes \fBprintf\fP to output the date-time string resulting from using
-\fIdatefmt\fP as a format string for \fIstrftime\fP(3).
-The corresponding \fIargument\fP is an integer representing the number of
-seconds since the epoch.
-Two special argument values may be used: -1 represents the current
-time, and -2 represents the time the shell was invoked.
-If no argument is specified, conversion behaves as if -1 had been given.
-This is an exception to the usual \fBprintf\fP behavior.
-.PD
-.PP
-Arguments to non-string format specifiers are treated as C constants,
-except that a leading plus or minus sign is allowed, and if the leading
-character is a single or double quote, the value is the ASCII value of
-the following character.
-.PP
-The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP.
-If the \fIformat\fP requires more \fIarguments\fP than are supplied, the
-extra format specifications behave as if a zero value or null string, as
-appropriate, had been supplied.
-The return value is zero on success, non-zero on failure.
-.RE
-.TP
-\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
-.PD 0
-.TP
-\fBpushd\fP [\fB\-n\fP] [\fIdir\fP]
-.PD
-Adds a directory to the top of the directory stack, or rotates
-the stack, making the new top of the stack the current working
-directory. With no arguments, exchanges the top two directories
-and returns 0, unless the directory stack is empty.
-Arguments, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-n
-Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
-.TP
-\fB+\fP\fIn\fP
-Rotates the stack so that the \fIn\fPth directory
-(counting from the left of the list shown by
-.BR dirs ,
-starting with zero)
-is at the top.
-.TP
-\fB\-\fP\fIn\fP
-Rotates the stack so that the \fIn\fPth directory
-(counting from the right of the list shown by
-.BR dirs ,
-starting with zero) is at the top.
-.TP
-.I dir
-Adds
-.I dir
-to the directory stack at the top, making it the
-new current working directory as if it had been supplied as the argument
-to the \fBcd\fP builtin.
-.PD
-.PP
-If the
-.B pushd
-command is successful, a
-.B dirs
-is performed as well.
-If the first form is used,
-.B pushd
-returns 0 unless the cd to
-.I dir
-fails. With the second form,
-.B pushd
-returns 0 unless the directory stack is empty,
-a non-existent directory stack element is specified,
-or the directory change to the specified new current directory
-fails.
-.RE
-.TP
-\fBpwd\fP [\fB\-LP\fP]
-Print the absolute pathname of the current working directory.
-The pathname printed contains no symbolic links if the
-.B \-P
-option is supplied or the
-.B \-o physical
-option to the
-.B set
-builtin command is enabled.
-If the
-.B \-L
-option is used, the pathname printed may contain symbolic links.
-The return status is 0 unless an error occurs while
-reading the name of the current directory or an
-invalid option is supplied.
-.TP
-\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...]
-One line is read from the standard input, or from the file descriptor
-\fIfd\fP supplied as an argument to the \fB\-u\fP option, and the first word
-is assigned to the first
-.IR name ,
-the second word to the second
-.IR name ,
-and so on, with leftover words and their intervening separators assigned
-to the last
-.IR name .
-If there are fewer words read from the input stream than names,
-the remaining names are assigned empty values.
-The characters in
-.SM
-.B IFS
-are used to split the line into words using the same rules the shell
-uses for expansion (described above under \fBWord Splitting\fP).
-The backslash character (\fB\e\fP) may be used to remove any special
-meaning for the next character read and for line continuation.
-Options, if supplied, have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-a \fIaname\fP
-The words are assigned to sequential indices
-of the array variable
-.IR aname ,
-starting at 0.
-.I aname
-is unset before any new values are assigned.
-Other \fIname\fP arguments are ignored.
-.TP
-.B \-d \fIdelim\fP
-The first character of \fIdelim\fP is used to terminate the input line,
-rather than newline.
-.TP
-.B \-e
-If the standard input
-is coming from a terminal,
-.B readline
-(see
-.SM
-.B READLINE
-above) is used to obtain the line.
-Readline uses the current (or default, if line editing was not previously
-active) editing settings.
-.TP
-.B \-i \fItext\fP
-If
-.B readline
-is being used to read the line, \fItext\fP is placed into the editing
-buffer before editing begins.
-.TP
-.B \-n \fInchars\fP
-\fBread\fP returns after reading \fInchars\fP characters rather than
-waiting for a complete line of input, but honor a delimiter if fewer
-than \fInchars\fP characters are read before the delimiter.
-.TP
-.B \-N \fInchars\fP
-\fBread\fP returns after reading exactly \fInchars\fP characters rather
-than waiting for a complete line of input, unless EOF is encountered or
-\fBread\fP times out.
-Delimiter characters encountered in the input are
-not treated specially and do not cause \fBread\fP to return until
-\fInchars\fP characters are read.
-.TP
-.B \-p \fIprompt\fP
-Display \fIprompt\fP on standard error, without a
-trailing newline, before attempting to read any input. The prompt
-is displayed only if input is coming from a terminal.
-.TP
-.B \-r
-Backslash does not act as an escape character.
-The backslash is considered to be part of the line.
-In particular, a backslash-newline pair may not be used as a line
-continuation.
-.TP
-.B \-s
-Silent mode. If input is coming from a terminal, characters are
-not echoed.
-.TP
-.B \-t \fItimeout\fP
-Cause \fBread\fP to time out and return failure if a complete line of
-input (or a specified number of characters)
-is not read within \fItimeout\fP seconds.
-\fItimeout\fP may be a decimal number with a fractional portion following
-the decimal point.
-This option is only effective if \fBread\fP is reading input from a
-terminal, pipe, or other special file; it has no effect when reading
-from regular files.
-If \fBread\fP times out, \fBread\fP saves any partial input read into
-the specified variable \fIname\fP.
-If \fItimeout\fP is 0, \fBread\fP returns immediately, without trying to
-read any data. The exit status is 0 if input is available on
-the specified file descriptor, non-zero otherwise.
-The exit status is greater than 128 if the timeout is exceeded.
-.TP
-.B \-u \fIfd\fP
-Read input from file descriptor \fIfd\fP.
-.PD
-.PP
-If no
-.I names
-are supplied, the line read is assigned to the variable
-.SM
-.BR REPLY .
-The return code is zero, unless end-of-file is encountered, \fBread\fP
-times out (in which case the return code is greater than 128),
-a variable assignment error (such as assigning to a readonly variable) occurs,
-or an invalid file descriptor is supplied as the argument to \fB\-u\fP.
-.RE
-.TP
-\fBreadonly\fP [\fB\-aAf\fP] [\fB\-p\fP] [\fIname\fP[=\fIword\fP] ...]
-.PD
-The given
-\fInames\fP are marked readonly; the values of these
-.I names
-may not be changed by subsequent assignment.
-If the
-.B \-f
-option is supplied, the functions corresponding to the
-\fInames\fP are so
-marked.
-The
-.B \-a
-option restricts the variables to indexed arrays; the
-.B \-A
-option restricts the variables to associative arrays.
-If both options are supplied,
-.B \-A
-takes precedence.
-If no
-.I name
-arguments are given, or if the
-.B \-p
-option is supplied, a list of all readonly names is printed.
-The other options may be used to restrict the output to a subset of
-the set of readonly names.
-The
-.B \-p
-option causes output to be displayed in a format that
-may be reused as input.
-If a variable name is followed by =\fIword\fP, the value of
-the variable is set to \fIword\fP.
-The return status is 0 unless an invalid option is encountered,
-one of the
-.I names
-is not a valid shell variable name, or
-.B \-f
-is supplied with a
-.I name
-that is not a function.
-.TP
-\fBreturn\fP [\fIn\fP]
-Causes a function to stop executing and return the value specified by
-.I n
-to its caller.
-If
-.I n
-is omitted, the return status is that of the last command
-executed in the function body.
-If \fBreturn\fP is executed by a trap handler, the last command used to
-determine the status is the last command executed before the trap handler.
-if \fBreturn\fP is executed during a \fBDEBUG\fP trap, the last command
-used to determine the status is the last command executed by the trap
-handler before \fBreturn\fP was invoked.
-If
-.B return
-is used outside a function,
-but during execution of a script by the
-.B .
-(\fBsource\fP) command, it causes the shell to stop executing
-that script and return either
-.I n
-or the exit status of the last command executed within the
-script as the exit status of the script.
-If \fIn\fP is supplied, the return value is its least significant
-8 bits.
-The return status is non-zero if
-.B return
-is supplied a non-numeric argument, or
-is used outside a
-function and not during execution of a script by \fB.\fP\^ or \fBsource\fP.
-Any command associated with the \fBRETURN\fP trap is executed
-before execution resumes after the function or script.
-.TP
-\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...]
-.PD 0
-.TP
-\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fIarg\fP ...]
-.PD
-Without options, the name and value of each shell variable are displayed
-in a format that can be reused as input
-for setting or resetting the currently-set variables.
-Read-only variables cannot be reset.
-In \fIposix\fP mode, only shell variables are listed.
-The output is sorted according to the current locale.
-When options are specified, they set or unset shell attributes.
-Any arguments remaining after option processing are treated
-as values for the positional parameters and are assigned, in order, to
-.BR $1 ,
-.BR $2 ,
-.B ...
-.BR $\fIn\fP .
-Options, if specified, have the following meanings:
-.RS
-.PD 0
-.TP 8
-.B \-a
-Automatically mark variables and functions which are modified or
-created for export to the environment of subsequent commands.
-.TP 8
-.B \-b
-Report the status of terminated background jobs
-immediately, rather than before the next primary prompt. This is
-effective only when job control is enabled.
-.TP 8
-.B \-e
-Exit immediately if a
-\fIpipeline\fP (which may consist of a single \fIsimple command\fP),
-a \fIlist\fP,
-or a \fIcompound command\fP
-(see
-.SM
-.B SHELL GRAMMAR
-above), exits with a non-zero status.
-The shell does not exit if the
-command that fails is part of the command list immediately following a
-.B while
-or
-.B until
-keyword,
-part of the test following the
-.B if
-or
-.B elif
-reserved words, part of any command executed in a
-.B &&
-or
-.B ||
-list except the command following the final \fB&&\fP or \fB||\fP,
-any command in a pipeline but the last,
-or if the command's return value is
-being inverted with
-.BR ! .
-If a compound command other than a subshell
-returns a non-zero status because a command failed
-while \fB\-e\fP was being ignored, the shell does not exit.
-A trap on \fBERR\fP, if set, is executed before the shell exits.
-This option applies to the shell environment and each subshell environment
-separately (see
-.SM
-.B "COMMAND EXECUTION ENVIRONMENT"
-above), and may cause
-subshells to exit before executing all the commands in the subshell.
-.if t .sp 0.5
-.if n .sp 1
-If a compound command or shell function executes in a context
-where \fB\-e\fP is being ignored,
-none of the commands executed within the compound command or function body
-will be affected by the \fB\-e\fP setting, even if \fB\-e\fP is set
-and a command returns a failure status.
-If a compound command or shell function sets \fB\-e\fP while executing in
-a context where \fB\-e\fP is ignored, that setting will not have any
-effect until the compound command or the command containing the function
-call completes.
-.TP 8
-.B \-f
-Disable pathname expansion.
-.TP 8
-.B \-h
-Remember the location of commands as they are looked up for execution.
-This is enabled by default.
-.TP 8
-.B \-k
-All arguments in the form of assignment statements
-are placed in the environment for a command, not just
-those that precede the command name.
-.TP 8
-.B \-m
-Monitor mode. Job control is enabled. This option is on
-by default for interactive shells on systems that support
-it (see
-.SM
-.B JOB CONTROL
-above).
-All processes run in a separate process group.
-When a background job completes, the shell prints a line
-containing its exit status.
-.TP 8
-.B \-n
-Read commands but do not execute them.
-This may be used to check a shell script for syntax errors.
-This is ignored by interactive shells.
-.TP 8
-.B \-o \fIoption\-name\fP
-The \fIoption\-name\fP can be one of the following:
-.RS
-.TP 8
-.B allexport
-Same as
-.BR \-a .
-.TP 8
-.B braceexpand
-Same as
-.BR \-B .
-.TP 8
-.B emacs
-Use an emacs-style command line editing interface. This is enabled
-by default when the shell is interactive, unless the shell is started
-with the
-.B \-\-noediting
-option.
-This also affects the editing interface used for \fBread \-e\fP.
-.TP 8
-.B errexit
-Same as
-.BR \-e .
-.TP 8
-.B errtrace
-Same as
-.BR \-E .
-.TP 8
-.B functrace
-Same as
-.BR \-T .
-.TP 8
-.B hashall
-Same as
-.BR \-h .
-.TP 8
-.B histexpand
-Same as
-.BR \-H .
-.TP 8
-.B history
-Enable command history, as described above under
-.SM
-.BR HISTORY .
-This option is on by default in interactive shells.
-.TP 8
-.B ignoreeof
-The effect is as if the shell command
-.if t \f(CWIGNOREEOF=10\fP
-.if n ``IGNOREEOF=10''
-had been executed
-(see
-.B Shell Variables
-above).
-.TP 8
-.B keyword
-Same as
-.BR \-k .
-.TP 8
-.B monitor
-Same as
-.BR \-m .
-.TP 8
-.B noclobber
-Same as
-.BR \-C .
-.TP 8
-.B noexec
-Same as
-.BR \-n .
-.TP 8
-.B noglob
-Same as
-.BR \-f .
-.TP 8
-.B nolog
-Currently ignored.
-.TP 8
-.B notify
-Same as
-.BR \-b .
-.TP 8
-.B nounset
-Same as
-.BR \-u .
-.TP 8
-.B onecmd
-Same as
-.BR \-t .
-.TP 8
-.B physical
-Same as
-.BR \-P .
-.TP 8
-.B pipefail
-If set, the return value of a pipeline is the value of the last
-(rightmost) command to exit with a non-zero status, or zero if all
-commands in the pipeline exit successfully.
-This option is disabled by default.
-.TP 8
-.B posix
-Change the behavior of
-.B bash
-where the default operation differs
-from the POSIX standard to match the standard (\fIposix mode\fP).
-See
-.SM
-.B "SEE ALSO"
-below for a reference to a document that details how posix mode affects
-bash's behavior.
-.TP 8
-.B privileged
-Same as
-.BR \-p .
-.TP 8
-.B verbose
-Same as
-.BR \-v .
-.TP 8
-.B vi
-Use a vi-style command line editing interface.
-This also affects the editing interface used for \fBread \-e\fP.
-.TP 8
-.B xtrace
-Same as
-.BR \-x .
-.sp .5
-.PP
-If
-.B \-o
-is supplied with no \fIoption\-name\fP, the values of the current options are
-printed.
-If
-.B +o
-is supplied with no \fIoption\-name\fP, a series of
-.B set
-commands to recreate the current option settings is displayed on
-the standard output.
-.RE
-.TP 8
-.B \-p
-Turn on
-.I privileged
-mode. In this mode, the
-.SM
-.B $ENV
-and
-.SM
-.B $BASH_ENV
-files are not processed, shell functions are not inherited from the
-environment, and the
-.SM
-.BR SHELLOPTS ,
-.SM
-.BR BASHOPTS ,
-.SM
-.BR CDPATH ,
-and
-.SM
-.B GLOBIGNORE
-variables, if they appear in the environment, are ignored.
-If the shell is started with the effective user (group) id not equal to the
-real user (group) id, and the \fB\-p\fP option is not supplied, these actions
-are taken and the effective user id is set to the real user id.
-If the \fB\-p\fP option is supplied at startup, the effective user id is
-not reset.
-Turning this option off causes the effective user
-and group ids to be set to the real user and group ids.
-.TP 8
-.B \-t
-Exit after reading and executing one command.
-.TP 8
-.B \-u
-Treat unset variables and parameters other than the special
-parameters "@" and "*" as an error when performing
-parameter expansion. If expansion is attempted on an
-unset variable or parameter, the shell prints an error message, and,
-if not interactive, exits with a non-zero status.
-.TP 8
-.B \-v
-Print shell input lines as they are read.
-.TP 8
-.B \-x
-After expanding each \fIsimple command\fP,
-\fBfor\fP command, \fBcase\fP command, \fBselect\fP command, or
-arithmetic \fBfor\fP command, display the expanded value of
-.SM
-.BR PS4 ,
-followed by the command and its expanded arguments
-or associated word list.
-.TP 8
-.B \-B
-The shell performs brace expansion (see
-.B Brace Expansion
-above). This is on by default.
-.TP 8
-.B \-C
-If set,
-.B bash
-does not overwrite an existing file with the
-.BR > ,
-.BR >& ,
-and
-.B <>
-redirection operators. This may be overridden when
-creating output files by using the redirection operator
-.B >|
-instead of
-.BR > .
-.TP 8
-.B \-E
-If set, any trap on \fBERR\fP is inherited by shell functions, command
-substitutions, and commands executed in a subshell environment.
-The \fBERR\fP trap is normally not inherited in such cases.
-.TP 8
-.B \-H
-Enable
-.B !
-style history substitution. This option is on by
-default when the shell is interactive.
-.TP 8
-.B \-P
-If set, the shell does not resolve symbolic links when executing
-commands such as
-.B cd
-that change the current working directory. It uses the
-physical directory structure instead. By default,
-.B bash
-follows the logical chain of directories when performing commands
-which change the current directory.
-.TP 8
-.B \-T
-If set, any traps on \fBDEBUG\fP and \fBRETURN\fP are inherited by shell
-functions, command substitutions, and commands executed in a
-subshell environment.
-The \fBDEBUG\fP and \fBRETURN\fP traps are normally not inherited
-in such cases.
-.TP 8
-.B \-\-
-If no arguments follow this option, then the positional parameters are
-unset. Otherwise, the positional parameters are set to the
-\fIarg\fPs, even if some of them begin with a
-.BR \- .
-.TP 8
-.B \-
-Signal the end of options, cause all remaining \fIarg\fPs to be
-assigned to the positional parameters. The
-.B \-x
-and
-.B \-v
-options are turned off.
-If there are no \fIarg\fPs,
-the positional parameters remain unchanged.
-.PD
-.PP
-The options are off by default unless otherwise noted.
-Using + rather than \- causes these options to be turned off.
-The options can also be specified as arguments to an invocation of
-the shell.
-The current set of options may be found in
-.BR $\- .
-The return status is always true unless an invalid option is encountered.
-.RE
-.TP
-\fBshift\fP [\fIn\fP]
-The positional parameters from \fIn\fP+1 ... are renamed to
-.B $1
-.B ....
-Parameters represented by the numbers \fB$#\fP
-down to \fB$#\fP\-\fIn\fP+1 are unset.
-.I n
-must be a non-negative number less than or equal to \fB$#\fP.
-If
-.I n
-is 0, no parameters are changed.
-If
-.I n
-is not given, it is assumed to be 1.
-If
-.I n
-is greater than \fB$#\fP, the positional parameters are not changed.
-The return status is greater than zero if
-.I n
-is greater than
-.B $#
-or less than zero; otherwise 0.
-.TP
-\fBshopt\fP [\fB\-pqsu\fP] [\fB\-o\fP] [\fIoptname\fP ...]
-Toggle the values of settings controlling optional shell behavior.
-The settings can be either those listed below, or, if the
-.B \-o
-option is used, those available with the
-.B \-o
-option to the \fBset\fP builtin command.
-With no options, or with the
-.B \-p
-option, a list of all settable options is displayed, with
-an indication of whether or not each is set.
-The \fB\-p\fP option causes output to be displayed in a form that
-may be reused as input.
-Other options have the following meanings:
-.RS
-.PD 0
-.TP
-.B \-s
-Enable (set) each \fIoptname\fP.
-.TP
-.B \-u
-Disable (unset) each \fIoptname\fP.
-.TP
-.B \-q
-Suppresses normal output (quiet mode); the return status indicates
-whether the \fIoptname\fP is set or unset.
-If multiple \fIoptname\fP arguments are given with
-.BR \-q ,
-the return status is zero if all \fIoptnames\fP are enabled; non-zero
-otherwise.
-.TP
-.B \-o
-Restricts the values of \fIoptname\fP to be those defined for the
-.B \-o
-option to the
-.B set
-builtin.
-.PD
-.PP
-If either
-.B \-s
-or
-.B \-u
-is used with no \fIoptname\fP arguments,
-.B shopt
-shows only those options which are set or unset, respectively.
-Unless otherwise noted, the \fBshopt\fP options are disabled (unset)
-by default.
-.PP
-The return status when listing options is zero if all \fIoptnames\fP
-are enabled, non-zero otherwise. When setting or unsetting options,
-the return status is zero unless an \fIoptname\fP is not a valid shell
-option.
-.PP
-The list of \fBshopt\fP options is:
-.if t .sp .5v
-.if n .sp 1v
-.PD 0
-.TP 8
-.B autocd
-If set, a command name that is the name of a directory is executed as if
-it were the argument to the \fBcd\fP command.
-This option is only used by interactive shells.
-.TP 8
-.B cdable_vars
-If set, an argument to the
-.B cd
-builtin command that
-is not a directory is assumed to be the name of a variable whose
-value is the directory to change to.
-.TP 8
-.B cdspell
-If set, minor errors in the spelling of a directory component in a
-.B cd
-command will be corrected.
-The errors checked for are transposed characters,
-a missing character, and one character too many.
-If a correction is found, the corrected filename is printed,
-and the command proceeds.
-This option is only used by interactive shells.
-.TP 8
-.B checkhash
-If set, \fBbash\fP checks that a command found in the hash
-table exists before trying to execute it. If a hashed command no
-longer exists, a normal path search is performed.
-.TP 8
-.B checkjobs
-If set, \fBbash\fP lists the status of any stopped and running jobs before
-exiting an interactive shell. If any jobs are running, this causes
-the exit to be deferred until a second exit is attempted without an
-intervening command (see
-.SM
-.B "JOB CONTROL"
-above). The shell always
-postpones exiting if any jobs are stopped.
-.TP 8
-.B checkwinsize
-If set, \fBbash\fP checks the window size after each command
-and, if necessary, updates the values of
-.SM
-.B LINES
-and
-.SM
-.BR COLUMNS .
-.TP 8
-.B cmdhist
-If set,
-.B bash
-attempts to save all lines of a multiple-line
-command in the same history entry. This allows
-easy re-editing of multi-line commands.
-.TP 8
-.B compat31
-If set,
-.B bash
-changes its behavior to that of version 3.1 with respect to quoted
-arguments to the \fB[[\fP conditional command's \fB=~\fP operator
-and locale-specific string comparison when using the \fB[[\fP
-conditional command's \fB<\fP and \fB>\fP operators.
-Bash versions prior to bash-4.1 use ASCII collation and
-.IR strcmp (3);
-bash-4.1 and later use the current locale's collation sequence and
-.IR strcoll (3).
-.TP 8
-.B compat32
-If set,
-.B bash
-changes its behavior to that of version 3.2 with respect to
-locale-specific string comparison when using the \fB[[\fP
-conditional command's \fB<\fP and \fB>\fP operators (see previous item).
-.TP 8
-.B compat40
-If set,
-.B bash
-changes its behavior to that of version 4.0 with respect to locale-specific
-string comparison when using the \fB[[\fP
-conditional command's \fB<\fP and \fB>\fP operators (see description of
-\fBcompat31\fP)
-and the effect of interrupting a command list.
-Bash versions 4.0 and later interrupt the list as if the shell received the
-interrupt; previous versions continue with the next command in the list.
-.TP 8
-.B compat41
-If set,
-.BR bash ,
-when in \fIposix\fP mode, treats a single quote in a double-quoted
-parameter expansion as a special character. The single quotes must match
-(an even number) and the characters between the single quotes are considered
-quoted. This is the behavior of posix mode through version 4.1.
-The default bash behavior remains as in previous versions.
-.TP 8
-.B compat42
-If set,
-.B bash
-does not process the replacement string in the pattern substitution word
-expansion using quote removal.
-.TP 8
-.B complete_fullquote
-If set,
-.B bash
-quotes all shell metacharacters in filenames and directory names when
-performing completion.
-If not set,
-.B bash
-removes metacharacters such as the dollar sign from the set of
-characters that will be quoted in completed filenames
-when these metacharacters appear in shell variable references in words to be
-completed.
-This means that dollar signs in variable names that expand to directories
-will not be quoted;
-however, any dollar signs appearing in filenames will not be quoted, either.
-This is active only when bash is using backslashes to quote completed
-filenames.
-This variable is set by default, which is the default bash behavior in
-versions through 4.2.
-.TP 8
-.B direxpand
-If set,
-.B bash
-replaces directory names with the results of word expansion when performing
-filename completion. This changes the contents of the readline editing
-buffer.
-If not set,
-.B bash
-attempts to preserve what the user typed.
-.TP 8
-.B dirspell
-If set,
-.B bash
-attempts spelling correction on directory names during word completion
-if the directory name initially supplied does not exist.
-.TP 8
-.B dotglob
-If set,
-.B bash
-includes filenames beginning with a `.' in the results of pathname
-expansion.
-.TP 8
-.B execfail
-If set, a non-interactive shell will not exit if
-it cannot execute the file specified as an argument to the
-.B exec
-builtin command. An interactive shell does not exit if
-.B exec
-fails.
-.TP 8
-.B expand_aliases
-If set, aliases are expanded as described above under
-.SM
-.BR ALIASES .
-This option is enabled by default for interactive shells.
-.TP 8
-.B extdebug
-If set, behavior intended for use by debuggers is enabled:
-.RS
-.TP
-.B 1.
-The \fB\-F\fP option to the \fBdeclare\fP builtin displays the source
-file name and line number corresponding to each function name supplied
-as an argument.
-.TP
-.B 2.
-If the command run by the \fBDEBUG\fP trap returns a non-zero value, the
-next command is skipped and not executed.
-.TP
-.B 3.
-If the command run by the \fBDEBUG\fP trap returns a value of 2, and the
-shell is executing in a subroutine (a shell function or a shell script
-executed by the \fB.\fP or \fBsource\fP builtins), the shell simulates
-a call to \fBreturn\fP.
-.TP
-.B 4.
-.SM
-.B BASH_ARGC
-and
-.SM
-.B BASH_ARGV
-are updated as described in their descriptions above.
-.TP
-.B 5.
-Function tracing is enabled: command substitution, shell functions, and
-subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
-\fBDEBUG\fP and \fBRETURN\fP traps.
-.TP
-.B 6.
-Error tracing is enabled: command substitution, shell functions, and
-subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
-\fBERR\fP trap.
-.RE
-.TP 8
-.B extglob
-If set, the extended pattern matching features described above under
-\fBPathname Expansion\fP are enabled.
-.TP 8
-.B extquote
-If set, \fB$\fP\(aq\fIstring\fP\(aq and \fB$\fP"\fIstring\fP" quoting is
-performed within \fB${\fP\fIparameter\fP\fB}\fP expansions
-enclosed in double quotes. This option is enabled by default.
-.TP 8
-.B failglob
-If set, patterns which fail to match filenames during pathname expansion
-result in an expansion error.
-.TP 8
-.B force_fignore
-If set, the suffixes specified by the
-.SM
-.B FIGNORE
-shell variable
-cause words to be ignored when performing word completion even if
-the ignored words are the only possible completions.
-See
-.SM
-\fBSHELL VARIABLES\fP
-above for a description of
-.SM
-.BR FIGNORE .
-This option is enabled by default.
-.TP 8
-.B globasciiranges
-If set, range expressions used in pattern matching bracket expressions (see
-.SM
-.B Pattern Matching
-above) behave as if in the traditional C locale when performing
-comparisons. That is, the current locale's collating sequence
-is not taken into account, so
-.B b
-will not collate between
-.B A
-and
-.BR B ,
-and upper-case and lower-case ASCII characters will collate together.
-.TP 8
-.B globstar
-If set, the pattern \fB**\fP used in a pathname expansion context will
-match all files and zero or more directories and subdirectories.
-If the pattern is followed by a \fB/\fP, only directories and
-subdirectories match.
-.TP 8
-.B gnu_errfmt
-If set, shell error messages are written in the standard GNU error
-message format.
-.TP 8
-.B histappend
-If set, the history list is appended to the file named by the value
-of the
-.SM
-.B HISTFILE
-variable when the shell exits, rather than overwriting the file.
-.TP 8
-.B histreedit
-If set, and
-.B readline
-is being used, a user is given the opportunity to re-edit a
-failed history substitution.
-.TP 8
-.B histverify
-If set, and
-.B readline
-is being used, the results of history substitution are not immediately
-passed to the shell parser. Instead, the resulting line is loaded into
-the \fBreadline\fP editing buffer, allowing further modification.
-.TP 8
-.B hostcomplete
-If set, and
-.B readline
-is being used, \fBbash\fP will attempt to perform hostname completion when a
-word containing a \fB@\fP is being completed (see
-.B Completing
-under
-.SM
-.B READLINE
-above).
-This is enabled by default.
-.TP 8
-.B huponexit
-If set, \fBbash\fP will send
-.SM
-.B SIGHUP
-to all jobs when an interactive login shell exits.
-.TP 8
-.B interactive_comments
-If set, allow a word beginning with
-.B #
-to cause that word and all remaining characters on that
-line to be ignored in an interactive shell (see
-.SM
-.B COMMENTS
-above). This option is enabled by default.
-.TP 8
-.B lastpipe
-If set, and job control is not active, the shell runs the last command of
-a pipeline not executed in the background in the current shell environment.
-.TP 8
-.B lithist
-If set, and the
-.B cmdhist
-option is enabled, multi-line commands are saved to the history with
-embedded newlines rather than using semicolon separators where possible.
-.TP 8
-.B login_shell
-The shell sets this option if it is started as a login shell (see
-.SM
-.B "INVOCATION"
-above).
-The value may not be changed.
-.TP 8
-.B mailwarn
-If set, and a file that \fBbash\fP is checking for mail has been
-accessed since the last time it was checked, the message ``The mail in
-\fImailfile\fP has been read'' is displayed.
-.TP 8
-.B no_empty_cmd_completion
-If set, and
-.B readline
-is being used,
-.B bash
-will not attempt to search the
-.SM
-.B PATH
-for possible completions when
-completion is attempted on an empty line.
-.TP 8
-.B nocaseglob
-If set,
-.B bash
-matches filenames in a case\-insensitive fashion when performing pathname
-expansion (see
-.B Pathname Expansion
-above).
-.TP 8
-.B nocasematch
-If set,
-.B bash
-matches patterns in a case\-insensitive fashion when performing matching
-while executing \fBcase\fP or \fB[[\fP conditional commands,
-when performing pattern substitution word expansions,
-or when filtering possible completions as part of programmable completion.
-.TP 8
-.B nullglob
-If set,
-.B bash
-allows patterns which match no
-files (see
-.B Pathname Expansion
-above)
-to expand to a null string, rather than themselves.
-.TP 8
-.B progcomp
-If set, the programmable completion facilities (see
-\fBProgrammable Completion\fP above) are enabled.
-This option is enabled by default.
-.TP 8
-.B promptvars
-If set, prompt strings undergo
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal after being expanded as described in
-.SM
-.B PROMPTING
-above. This option is enabled by default.
-.TP 8
-.B restricted_shell
-The shell sets this option if it is started in restricted mode (see
-.SM
-.B "RESTRICTED SHELL"
-below).
-The value may not be changed.
-This is not reset when the startup files are executed, allowing
-the startup files to discover whether or not a shell is restricted.
-.TP 8
-.B shift_verbose
-If set, the
-.B shift
-builtin prints an error message when the shift count exceeds the
-number of positional parameters.
-.TP 8
-.B sourcepath
-If set, the
-\fBsource\fP (\fB.\fP) builtin uses the value of
-.SM
-.B PATH
-to find the directory containing the file supplied as an argument.
-This option is enabled by default.
-.TP 8
-.B xpg_echo
-If set, the \fBecho\fP builtin expands backslash-escape sequences
-by default.
-.RE
-.PD
-.TP
-\fBsuspend\fP [\fB\-f\fP]
-Suspend the execution of this shell until it receives a
-.SM
-.B SIGCONT
-signal. A login shell cannot be suspended; the
-.B \-f
-option can be used to override this and force the suspension.
-The return status is 0 unless the shell is a login shell and
-.B \-f
-is not supplied, or if job control is not enabled.
-.TP
-\fBtest\fP \fIexpr\fP
-.PD 0
-.TP
-\fB[\fP \fIexpr\fP \fB]\fP
-Return a status of 0 (true) or 1 (false) depending on
-the evaluation of the conditional expression
-.IR expr .
-Each operator and operand must be a separate argument.
-Expressions are composed of the primaries described above under
-.SM
-.BR "CONDITIONAL EXPRESSIONS" .
-\fBtest\fP does not accept any options, nor does it accept and ignore
-an argument of \fB\-\-\fP as signifying the end of options.
-.if t .sp 0.5
-.if n .sp 1
-Expressions may be combined using the following operators, listed
-in decreasing order of precedence.
-The evaluation depends on the number of arguments; see below.
-Operator precedence is used when there are five or more arguments.
-.RS
-.PD 0
-.TP
-.B ! \fIexpr\fP
-True if
-.I expr
-is false.
-.TP
-.B ( \fIexpr\fP )
-Returns the value of \fIexpr\fP.
-This may be used to override the normal precedence of operators.
-.TP
-\fIexpr1\fP \-\fBa\fP \fIexpr2\fP
-True if both
-.I expr1
-and
-.I expr2
-are true.
-.TP
-\fIexpr1\fP \-\fBo\fP \fIexpr2\fP
-True if either
-.I expr1
-or
-.I expr2
-is true.
-.PD
-.PP
-\fBtest\fP and \fB[\fP evaluate conditional
-expressions using a set of rules based on the number of arguments.
-.if t .sp 0.5
-.if n .sp 1
-.PD 0
-.TP
-0 arguments
-The expression is false.
-.TP
-1 argument
-The expression is true if and only if the argument is not null.
-.TP
-2 arguments
-If the first argument is \fB!\fP, the expression is true if and
-only if the second argument is null.
-If the first argument is one of the unary conditional operators listed above
-under
-.SM
-.BR "CONDITIONAL EXPRESSIONS" ,
-the expression is true if the unary test is true.
-If the first argument is not a valid unary conditional operator, the expression
-is false.
-.TP
-3 arguments
-The following conditions are applied in the order listed.
-If the second argument is one of the binary conditional operators listed above
-under
-.SM
-.BR "CONDITIONAL EXPRESSIONS" ,
-the result of the expression is the result of the binary test using
-the first and third arguments as operands.
-The \fB\-a\fP and \fB\-o\fP operators are considered binary operators
-when there are three arguments.
-If the first argument is \fB!\fP, the value is the negation of
-the two-argument test using the second and third arguments.
-If the first argument is exactly \fB(\fP and the third argument is
-exactly \fB)\fP, the result is the one-argument test of the second
-argument.
-Otherwise, the expression is false.
-.TP
-4 arguments
-If the first argument is \fB!\fP, the result is the negation of
-the three-argument expression composed of the remaining arguments.
-Otherwise, the expression is parsed and evaluated according to
-precedence using the rules listed above.
-.TP
-5 or more arguments
-The expression is parsed and evaluated according to precedence
-using the rules listed above.
-.if t .sp 0.5
-.if n .sp 1
-.LP
-When used with \fBtest\fP or \fB[\fP, the \fB<\fP and \fB>\fP operators
-sort lexicographically using ASCII ordering.
-.RE
-.PD
-.TP
-.B times
-Print the accumulated user and system times for the shell and
-for processes run from the shell. The return status is 0.
-.TP
-\fBtrap\fP [\fB\-lp\fP] [[\fIarg\fP] \fIsigspec\fP ...]
-The command
-.I arg
-is to be read and executed when the shell receives
-signal(s)
-.IR sigspec .
-If
-.I arg
-is absent (and there is a single \fIsigspec\fP) or
-.BR \- ,
-each specified signal is
-reset to its original disposition (the value it had
-upon entrance to the shell).
-If
-.I arg
-is the null string the signal specified by each
-.I sigspec
-is ignored by the shell and by the commands it invokes.
-If
-.I arg
-is not present and
-.B \-p
-has been supplied, then the trap commands associated with each
-.I sigspec
-are displayed.
-If no arguments are supplied or if only
-.B \-p
-is given,
-.B trap
-prints the list of commands associated with each signal.
-The
-.B \-l
-option causes the shell to print a list of signal names and
-their corresponding numbers.
-Each
-.I sigspec
-is either
-a signal name defined in <\fIsignal.h\fP>, or a signal number.
-Signal names are case insensitive and the
-.SM
-.B SIG
-prefix is optional.
-.if t .sp 0.5
-.if n .sp 1
-If a
-.I sigspec
-is
-.SM
-.B EXIT
-(0) the command
-.I arg
-is executed on exit from the shell.
-If a
-.I sigspec
-is
-.SM
-.BR DEBUG ,
-the command
-.I arg
-is executed before every \fIsimple command\fP, \fIfor\fP command,
-\fIcase\fP command, \fIselect\fP command, every arithmetic \fIfor\fP
-command, and before the first command executes in a shell function (see
-.SM
-.B SHELL GRAMMAR
-above).
-Refer to the description of the \fBextdebug\fP option to the
-\fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap.
-If a
-.I sigspec
-is
-.SM
-.BR RETURN ,
-the command
-.I arg
-is executed each time a shell function or a script executed with
-the \fB.\fP or \fBsource\fP builtins finishes executing.
-.if t .sp 0.5
-.if n .sp 1
-If a
-.I sigspec
-is
-.SM
-.BR ERR ,
-the command
-.I arg
-is executed whenever a
-a pipeline (which may consist of a single simple
-command), a list, or a compound command returns a
-non\-zero exit status,
-subject to the following conditions.
-The
-.SM
-.B ERR
-trap is not executed if the failed
-command is part of the command list immediately following a
-.B while
-or
-.B until
-keyword,
-part of the test in an
-.I if
-statement, part of a command executed in a
-.B &&
-or
-.B ||
-list except the command following the final \fB&&\fP or \fB||\fP,
-any command in a pipeline but the last,
-or if the command's return value is
-being inverted using
-.BR ! .
-These are the same conditions obeyed by the \fBerrexit\fP (\fB\-e\fP) option.
-.if t .sp 0.5
-.if n .sp 1
-Signals ignored upon entry to the shell cannot be trapped or reset.
-Trapped signals that are not being ignored are reset to their original
-values in a subshell or subshell environment when one is created.
-The return status is false if any
-.I sigspec
-is invalid; otherwise
-.B trap
-returns true.
-.TP
-\fBtype\fP [\fB\-aftpP\fP] \fIname\fP [\fIname\fP ...]
-With no options,
-indicate how each
-.I name
-would be interpreted if used as a command name.
-If the
-.B \-t
-option is used,
-.B type
-prints a string which is one of
-.IR alias ,
-.IR keyword ,
-.IR function ,
-.IR builtin ,
-or
-.I file
-if
-.I name
-is an alias, shell reserved word, function, builtin, or disk file,
-respectively.
-If the
-.I name
-is not found, then nothing is printed, and an exit status of false
-is returned.
-If the
-.B \-p
-option is used,
-.B type
-either returns the name of the disk file
-that would be executed if
-.I name
-were specified as a command name,
-or nothing if
-.if t \f(CWtype -t name\fP
-.if n ``type -t name''
-would not return
-.IR file .
-The
-.B \-P
-option forces a
-.SM
-.B PATH
-search for each \fIname\fP, even if
-.if t \f(CWtype -t name\fP
-.if n ``type -t name''
-would not return
-.IR file .
-If a command is hashed,
-.B \-p
-and
-.B \-P
-print the hashed value, which is not necessarily the file that appears
-first in
-.SM
-.BR PATH .
-If the
-.B \-a
-option is used,
-.B type
-prints all of the places that contain
-an executable named
-.IR name .
-This includes aliases and functions,
-if and only if the
-.B \-p
-option is not also used.
-The table of hashed commands is not consulted
-when using
-.BR \-a .
-The
-.B \-f
-option suppresses shell function lookup, as with the \fBcommand\fP builtin.
-.B type
-returns true if all of the arguments are found, false if
-any are not found.
-.TP
-\fBulimit\fP [\fB\-HSabcdefiklmnpqrstuvxPT\fP [\fIlimit\fP]]
-Provides control over the resources available to the shell and to
-processes started by it, on systems that allow such control.
-The \fB\-H\fP and \fB\-S\fP options specify that the hard or soft limit is
-set for the given resource.
-A hard limit cannot be increased by a non-root user once it is set;
-a soft limit may be increased up to the value of the hard limit.
-If neither \fB\-H\fP nor \fB\-S\fP is specified, both the soft and hard
-limits are set.
-The value of
-.I limit
-can be a number in the unit specified for the resource
-or one of the special values
-.BR hard ,
-.BR soft ,
-or
-.BR unlimited ,
-which stand for the current hard limit, the current soft limit, and
-no limit, respectively.
-If
-.I limit
-is omitted, the current value of the soft limit of the resource is
-printed, unless the \fB\-H\fP option is given. When more than one
-resource is specified, the limit name and unit are printed before the value.
-Other options are interpreted as follows:
-.RS
-.PD 0
-.TP
-.B \-a
-All current limits are reported
-.TP
-.B \-b
-The maximum socket buffer size
-.TP
-.B \-c
-The maximum size of core files created
-.TP
-.B \-d
-The maximum size of a process's data segment
-.TP
-.B \-e
-The maximum scheduling priority ("nice")
-.TP
-.B \-f
-The maximum size of files written by the shell and its children
-.TP
-.B \-i
-The maximum number of pending signals
-.TP
-.B \-k
-The maximum number of kqueues that may be allocated
-.TP
-.B \-l
-The maximum size that may be locked into memory
-.TP
-.B \-m
-The maximum resident set size (many systems do not honor this limit)
-.TP
-.B \-n
-The maximum number of open file descriptors (most systems do not
-allow this value to be set)
-.TP
-.B \-p
-The pipe size in 512-byte blocks (this may not be set)
-.TP
-.B \-q
-The maximum number of bytes in POSIX message queues
-.TP
-.B \-r
-The maximum real-time scheduling priority
-.TP
-.B \-s
-The maximum stack size
-.TP
-.B \-t
-The maximum amount of cpu time in seconds
-.TP
-.B \-u
-The maximum number of processes available to a single user
-.TP
-.B \-v
-The maximum amount of virtual memory available to the shell and, on
-some systems, to its children
-.TP
-.B \-x
-The maximum number of file locks
-.TP
-.B \-P
-The maximum number of pseudoterminals
-.TP
-.B \-T
-The maximum number of threads
-.PD
-.PP
-If
-.I limit
-is given, and the
-.B \-a
-option is not used,
-\fIlimit\fP is the new value of the specified resource.
-If no option is given, then
-.B \-f
-is assumed. Values are in 1024-byte increments, except for
-.BR \-t ,
-which is in seconds;
-.BR \-p ,
-which is in units of 512-byte blocks;
-and
-.BR \-P ,
-.BR \-T ,
-.BR \-b ,
-.BR \-k ,
-.BR \-n ,
-and
-.BR \-u ,
-which are unscaled values.
-The return status is 0 unless an invalid option or argument is supplied,
-or an error occurs while setting a new limit.
-.RE
-.TP
-\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP]
-The user file-creation mask is set to
-.IR mode .
-If
-.I mode
-begins with a digit, it
-is interpreted as an octal number; otherwise
-it is interpreted as a symbolic mode mask similar
-to that accepted by
-.IR chmod (1).
-If
-.I mode
-is omitted, the current value of the mask is printed.
-The
-.B \-S
-option causes the mask to be printed in symbolic form; the
-default output is an octal number.
-If the
-.B \-p
-option is supplied, and
-.I mode
-is omitted, the output is in a form that may be reused as input.
-The return status is 0 if the mode was successfully changed or if
-no \fImode\fP argument was supplied, and false otherwise.
-.TP
-\fBunalias\fP [\-\fBa\fP] [\fIname\fP ...]
-Remove each \fIname\fP from the list of defined aliases. If
-.B \-a
-is supplied, all alias definitions are removed. The return
-value is true unless a supplied
-.I name
-is not a defined alias.
-.TP
-\fBunset\fP [\-\fBfv\fP] [\-\fBn\fP] [\fIname\fP ...]
-For each
-.IR name ,
-remove the corresponding variable or function.
-If the
-.B \-v
-option is given, each
-.I name
-refers to a shell variable, and that variable is removed.
-Read-only variables may not be unset.
-If
-.B \-f
-is specified, each
-.I name
-refers to a shell function, and the function definition
-is removed.
-If the
-.B \-n
-option is supplied, and \fIname\fP is a variable with the \fInameref\fP
-attribute, \fIname\fP will be unset rather than the variable it
-references.
-\fB\-n\fP has no effect if the \fB\-f\fP option is supplied.
-If no options are supplied, each \fIname\fP refers to a variable; if
-there is no variable by that name, any function with that name is
-unset.
-Each unset variable or function is removed from the environment
-passed to subsequent commands.
-If any of
-.SM
-.BR COMP_WORDBREAKS ,
-.SM
-.BR RANDOM ,
-.SM
-.BR SECONDS ,
-.SM
-.BR LINENO ,
-.SM
-.BR HISTCMD ,
-.SM
-.BR FUNCNAME ,
-.SM
-.BR GROUPS ,
-or
-.SM
-.B DIRSTACK
-are unset, they lose their special properties, even if they are
-subsequently reset. The exit status is true unless a
-.I name
-is readonly.
-.TP
-\fBwait\fP [\fB\-n\fP] [\fIn ...\fP]
-Wait for each specified child process and return its termination status.
-Each
-.I n
-may be a process
-ID or a job specification; if a job spec is given, all processes
-in that job's pipeline are waited for. If
-.I n
-is not given, all currently active child processes
-are waited for, and the return status is zero.
-If the \fB\-n\fP option is supplied, \fBwait\fP waits for any job to
-terminate and returns its exit status.
-If
-.I n
-specifies a non-existent process or job, the return status is
-127. Otherwise, the return status is the exit status of the last
-process or job waited for.
-.\" bash_builtins
-.if \n(zZ=1 .ig zZ
-.SH "RESTRICTED SHELL"
-.\" rbash.1
-.zY
-.PP
-If
-.B bash
-is started with the name
-.BR rbash ,
-or the
-.B \-r
-option is supplied at invocation,
-the shell becomes restricted.
-A restricted shell is used to
-set up an environment more controlled than the standard shell.
-It behaves identically to
-.B bash
-with the exception that the following are disallowed or not performed:
-.IP \(bu
-changing directories with \fBcd\fP
-.IP \(bu
-setting or unsetting the values of
-.SM
-.BR SHELL ,
-.SM
-.BR PATH ,
-.SM
-.BR ENV ,
-or
-.SM
-.B BASH_ENV
-.IP \(bu
-specifying command names containing
-.B /
-.IP \(bu
-specifying a filename containing a
-.B /
-as an argument to the
-.B .
-builtin command
-.IP \(bu
-specifying a filename containing a slash as an argument to the
-.B \-p
-option to the
-.B hash
-builtin command
-.IP \(bu
-importing function definitions from the shell environment at startup
-.IP \(bu
-parsing the value of
-.SM
-.B SHELLOPTS
-from the shell environment at startup
-.IP \(bu
-redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
-.IP \(bu
-using the
-.B exec
-builtin command to replace the shell with another command
-.IP \(bu
-adding or deleting builtin commands with the
-.B \-f
-and
-.B \-d
-options to the
-.B enable
-builtin command
-.IP \(bu
-using the \fBenable\fP builtin command to enable disabled shell builtins
-.IP \(bu
-specifying the
-.B \-p
-option to the
-.B command
-builtin command
-.IP \(bu
-turning off restricted mode with
-\fBset +r\fP or \fBset +o restricted\fP.
-.PP
-These restrictions are enforced after any startup files are read.
-.PP
-.ie \n(zY=1 When a command that is found to be a shell script is executed,
-.el \{ When a command that is found to be a shell script is executed
-(see
-.SM
-.B "COMMAND EXECUTION"
-above),
-\}
-.B rbash
-turns off any restrictions in the shell spawned to execute the
-script.
-.\" end of rbash.1
-.if \n(zY=1 .ig zY
-.SH "SEE ALSO"
-.PD 0
-.TP
-\fIBash Reference Manual\fP, Brian Fox and Chet Ramey
-.TP
-\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey
-.TP
-\fIPortable Operating System Interface (POSIX) Part 2: Shell and Utilities\fP, IEEE --
-http://pubs.opengroup.org/onlinepubs/9699919799/
-.TP
-http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
-.TP
-\fIsh\fP(1), \fIksh\fP(1), \fIcsh\fP(1)
-.TP
-\fIemacs\fP(1), \fIvi\fP(1)
-.TP
-\fIreadline\fP(3)
-.PD
-.SH FILES
-.PD 0
-.TP
-.FN /bin/bash
-The \fBbash\fP executable
-.TP
-.FN /etc/profile
-The systemwide initialization file, executed for login shells
-.TP
-.FN ~/.bash_profile
-The personal initialization file, executed for login shells
-.TP
-.FN ~/.bashrc
-The individual per-interactive-shell startup file
-.TP
-.FN ~/.bash_logout
-The individual login shell cleanup file, executed when a login shell exits
-.TP
-.FN ~/.inputrc
-Individual \fIreadline\fP initialization file
-.PD
-.SH AUTHORS
-Brian Fox, Free Software Foundation
-.br
-bfox@gnu.org
-.PP
-Chet Ramey, Case Western Reserve University
-.br
-chet.ramey@case.edu
-.SH BUG REPORTS
-If you find a bug in
-.B bash,
-you should report it. But first, you should
-make sure that it really is a bug, and that it appears in the latest
-version of
-.BR bash .
-The latest version is always available from
-\fIftp://ftp.gnu.org/pub/gnu/bash/\fP.
-.PP
-Once you have determined that a bug actually exists, use the
-.I bashbug
-command to submit a bug report.
-If you have a fix, you are encouraged to mail that as well!
-Suggestions and `philosophical' bug reports may be mailed
-to \fIbug-bash@gnu.org\fP or posted to the Usenet
-newsgroup
-.BR gnu.bash.bug .
-.PP
-ALL bug reports should include:
-.PP
-.PD 0
-.TP 20
-The version number of \fBbash\fR
-.TP
-The hardware and operating system
-.TP
-The compiler used to compile
-.TP
-A description of the bug behaviour
-.TP
-A short script or `recipe' which exercises the bug
-.PD
-.PP
-.I bashbug
-inserts the first three items automatically into the template
-it provides for filing a bug report.
-.PP
-Comments and bug reports concerning
-this manual page should be directed to
-.IR chet.ramey@case.edu .
-.SH BUGS
-.PP
-It's too big and too slow.
-.PP
-There are some subtle differences between
-.B bash
-and traditional versions of
-.BR sh ,
-mostly because of the
-.SM
-.B POSIX
-specification.
-.PP
-Aliases are confusing in some uses.
-.PP
-Shell builtin commands and functions are not stoppable/restartable.
-.PP
-Compound commands and command sequences of the form `a ; b ; c'
-are not handled gracefully when process suspension is attempted.
-When a process is stopped, the shell immediately executes the next
-command in the sequence.
-It suffices to place the sequence of commands between
-parentheses to force it into a subshell, which may be stopped as
-a unit.
-.PP
-Array variables may not (yet) be exported.
-.PP
-There may be only one active coprocess at a time.
-.zZ
-.zY
diff --git a/doc/bashref.texi~ b/doc/bashref.texi~
deleted file mode 100644
index 71d468b4..00000000
--- a/doc/bashref.texi~
+++ /dev/null
@@ -1,8824 +0,0 @@
-\input texinfo.tex @c -*- texinfo -*-
-@c %**start of header
-@setfilename bashref.info
-@settitle Bash Reference Manual
-
-@include version.texi
-@c %**end of header
-
-@copying
-This text is a brief description of the features that are present in
-the Bash shell (version @value{VERSION}, @value{UPDATED}).
-
-This is Edition @value{EDITION}, last updated @value{UPDATED},
-of @cite{The GNU Bash Reference Manual},
-for @code{Bash}, Version @value{VERSION}.
-
-Copyright @copyright{} 1988--2014 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-@end quotation
-@end copying
-
-@defcodeindex bt
-@defcodeindex rw
-@set BashFeatures
-
-@dircategory Basics
-@direntry
-* Bash: (bash). The GNU Bourne-Again SHell.
-@end direntry
-
-@finalout
-
-@titlepage
-@title Bash Reference Manual
-@subtitle Reference Documentation for Bash
-@subtitle Edition @value{EDITION}, for @code{Bash} Version @value{VERSION}.
-@subtitle @value{UPDATED-MONTH}
-@author Chet Ramey, Case Western Reserve University
-@author Brian Fox, Free Software Foundation
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top, Introduction, (dir), (dir)
-@top Bash Features
-
-This text is a brief description of the features that are present in
-the Bash shell (version @value{VERSION}, @value{UPDATED}).
-The Bash home page is @url{http://www.gnu.org/software/bash/}.
-
-This is Edition @value{EDITION}, last updated @value{UPDATED},
-of @cite{The GNU Bash Reference Manual},
-for @code{Bash}, Version @value{VERSION}.
-
-Bash contains features that appear in other popular shells, and some
-features that only appear in Bash. Some of the shells that Bash has
-borrowed concepts from are the Bourne Shell (@file{sh}), the Korn Shell
-(@file{ksh}), and the C-shell (@file{csh} and its successor,
-@file{tcsh}). The following menu breaks the features up into
-categories, noting which features were inspired by other shells and
-which are specific to Bash.
-
-This manual is meant as a brief introduction to features found in
-Bash. The Bash manual page should be used as the definitive
-reference on shell behavior.
-
-@menu
-* Introduction:: An introduction to the shell.
-* Definitions:: Some definitions used in the rest of this
- manual.
-* Basic Shell Features:: The shell "building blocks".
-* Shell Builtin Commands:: Commands that are a part of the shell.
-* Shell Variables:: Variables used or set by Bash.
-* Bash Features:: Features found only in Bash.
-* Job Control:: What job control is and how Bash allows you
- to use it.
-* Command Line Editing:: Chapter describing the command line
- editing features.
-* Using History Interactively:: Command History Expansion
-* Installing Bash:: How to build and install Bash on your system.
-* Reporting Bugs:: How to report bugs in Bash.
-* Major Differences From The Bourne Shell:: A terse list of the differences
- between Bash and historical
- versions of /bin/sh.
-* GNU Free Documentation License:: Copying and sharing this documentation.
-* Indexes:: Various indexes for this manual.
-@end menu
-@end ifnottex
-
-@node Introduction
-@chapter Introduction
-@menu
-* What is Bash?:: A short description of Bash.
-* What is a shell?:: A brief introduction to shells.
-@end menu
-
-@node What is Bash?
-@section What is Bash?
-
-Bash is the shell, or command language interpreter,
-for the @sc{gnu} operating system.
-The name is an acronym for the @samp{Bourne-Again SHell},
-a pun on Stephen Bourne, the author of the direct ancestor of
-the current Unix shell @code{sh},
-which appeared in the Seventh Edition Bell Labs Research version
-of Unix.
-
-Bash is largely compatible with @code{sh} and incorporates useful
-features from the Korn shell @code{ksh} and the C shell @code{csh}.
-It is intended to be a conformant implementation of the @sc{ieee}
-@sc{posix} Shell and Tools portion of the @sc{ieee} @sc{posix}
-specification (@sc{ieee} Standard 1003.1).
-It offers functional improvements over @code{sh} for both interactive and
-programming use.
-
-While the @sc{gnu} operating system provides other shells, including
-a version of @code{csh}, Bash is the default shell.
-Like other @sc{gnu} software, Bash is quite portable. It currently runs
-on nearly every version of Unix and a few other operating systems @minus{}
-independently-supported ports exist for @sc{ms-dos}, @sc{os/2},
-and Windows platforms.
-
-@node What is a shell?
-@section What is a shell?
-
-At its base, a shell is simply a macro processor that executes
-commands. The term macro processor means functionality where text
-and symbols are expanded to create larger expressions.
-
-A Unix shell is both a command interpreter and a programming
-language. As a command interpreter, the shell provides the user
-interface to the rich set of @sc{gnu} utilities. The programming
-language features allow these utilities to be combined.
-Files containing commands can be created, and become
-commands themselves. These new commands have the same status as
-system commands in directories such as @file{/bin}, allowing users
-or groups to establish custom environments to automate their common
-tasks.
-
-Shells may be used interactively or non-interactively. In
-interactive mode, they accept input typed from the keyboard.
-When executing non-interactively, shells execute commands read
-from a file.
-
-A shell allows execution of @sc{gnu} commands, both synchronously and
-asynchronously.
-The shell waits for synchronous commands to complete before accepting
-more input; asynchronous commands continue to execute in parallel
-with the shell while it reads and executes additional commands.
-The @dfn{redirection} constructs permit
-fine-grained control of the input and output of those commands.
-Moreover, the shell allows control over the contents of commands'
-environments.
-
-Shells also provide a small set of built-in
-commands (@dfn{builtins}) implementing functionality impossible
-or inconvenient to obtain via separate utilities.
-For example, @code{cd}, @code{break}, @code{continue}, and
-@code{exec} cannot be implemented outside of the shell because
-they directly manipulate the shell itself.
-The @code{history}, @code{getopts}, @code{kill}, or @code{pwd}
-builtins, among others, could be implemented in separate utilities,
-but they are more convenient to use as builtin commands.
-All of the shell builtins are described in
-subsequent sections.
-
-While executing commands is essential, most of the power (and
-complexity) of shells is due to their embedded programming
-languages. Like any high-level language, the shell provides
-variables, flow control constructs, quoting, and functions.
-
-Shells offer features geared specifically for
-interactive use rather than to augment the programming language.
-These interactive features include job control, command line
-editing, command history and aliases. Each of these features is
-described in this manual.
-
-@node Definitions
-@chapter Definitions
-These definitions are used throughout the remainder of this manual.
-
-@table @code
-
-@item POSIX
-@cindex POSIX
-A family of open system standards based on Unix. Bash
-is primarily concerned with the Shell and Utilities portion of the
-@sc{posix} 1003.1 standard.
-
-@item blank
-A space or tab character.
-
-@item builtin
-@cindex builtin
-A command that is implemented internally by the shell itself, rather
-than by an executable program somewhere in the file system.
-
-@item control operator
-@cindex control operator
-A @code{token} that performs a control function. It is a @code{newline}
-or one of the following:
-@samp{||}, @samp{&&}, @samp{&}, @samp{;}, @samp{;;},
-@samp{|}, @samp{|&}, @samp{(}, or @samp{)}.
-
-@item exit status
-@cindex exit status
-The value returned by a command to its caller. The value is restricted
-to eight bits, so the maximum value is 255.
-
-@item field
-@cindex field
-A unit of text that is the result of one of the shell expansions. After
-expansion, when executing a command, the resulting fields are used as
-the command name and arguments.
-
-@item filename
-@cindex filename
-A string of characters used to identify a file.
-
-@item job
-@cindex job
-A set of processes comprising a pipeline, and any processes descended
-from it, that are all in the same process group.
-
-@item job control
-@cindex job control
-A mechanism by which users can selectively stop (suspend) and restart
-(resume) execution of processes.
-
-@item metacharacter
-@cindex metacharacter
-A character that, when unquoted, separates words. A metacharacter is
-a @code{blank} or one of the following characters:
-@samp{|}, @samp{&}, @samp{;}, @samp{(}, @samp{)}, @samp{<}, or
-@samp{>}.
-
-@item name
-@cindex name
-@cindex identifier
-A @code{word} consisting solely of letters, numbers, and underscores,
-and beginning with a letter or underscore. @code{Name}s are used as
-shell variable and function names.
-Also referred to as an @code{identifier}.
-
-@item operator
-@cindex operator, shell
-A @code{control operator} or a @code{redirection operator}.
-@xref{Redirections}, for a list of redirection operators.
-Operators contain at least one unquoted @code{metacharacter}.
-
-@item process group
-@cindex process group
-A collection of related processes each having the same process
-group @sc{id}.
-
-@item process group ID
-@cindex process group ID
-A unique identifier that represents a @code{process group}
-during its lifetime.
-
-@item reserved word
-@cindex reserved word
-A @code{word} that has a special meaning to the shell. Most reserved
-words introduce shell flow control constructs, such as @code{for} and
-@code{while}.
-
-@item return status
-@cindex return status
-A synonym for @code{exit status}.
-
-@item signal
-@cindex signal
-A mechanism by which a process may be notified by the kernel
-of an event occurring in the system.
-
-@item special builtin
-@cindex special builtin
-A shell builtin command that has been classified as special by the
-@sc{posix} standard.
-
-@item token
-@cindex token
-A sequence of characters considered a single unit by the shell.
-It is either a @code{word} or an @code{operator}.
-
-@item word
-@cindex word
-A sequence of characters treated as a unit by the shell.
-Words may not include unquoted @code{metacharacters}.
-@end table
-
-@node Basic Shell Features
-@chapter Basic Shell Features
-@cindex Bourne shell
-
-Bash is an acronym for @samp{Bourne-Again SHell}.
-The Bourne shell is
-the traditional Unix shell originally written by Stephen Bourne.
-All of the Bourne shell builtin commands are available in Bash,
-The rules for evaluation and quoting are taken from the @sc{posix}
-specification for the `standard' Unix shell.
-
-This chapter briefly summarizes the shell's `building blocks':
-commands, control structures, shell functions, shell @i{parameters},
-shell expansions,
-@i{redirections}, which are a way to direct input and output from
-and to named files, and how the shell executes commands.
-
-@menu
-* Shell Syntax:: What your input means to the shell.
-* Shell Commands:: The types of commands you can use.
-* Shell Functions:: Grouping commands by name.
-* Shell Parameters:: How the shell stores values.
-* Shell Expansions:: How Bash expands parameters and the various
- expansions available.
-* Redirections:: A way to control where input and output go.
-* Executing Commands:: What happens when you run a command.
-* Shell Scripts:: Executing files of shell commands.
-@end menu
-
-@node Shell Syntax
-@section Shell Syntax
-@menu
-* Shell Operation:: The basic operation of the shell.
-* Quoting:: How to remove the special meaning from characters.
-* Comments:: How to specify comments.
-@end menu
-
-When the shell reads input, it proceeds through a
-sequence of operations. If the input indicates the beginning of a
-comment, the shell ignores the comment symbol (@samp{#}), and the rest
-of that line.
-
-Otherwise, roughly speaking, the shell reads its input and
-divides the input into words and operators, employing the quoting rules
-to select which meanings to assign various words and characters.
-
-The shell then parses these tokens into commands and other constructs,
-removes the special meaning of certain words or characters, expands
-others, redirects input and output as needed, executes the specified
-command, waits for the command's exit status, and makes that exit status
-available for further inspection or processing.
-
-@node Shell Operation
-@subsection Shell Operation
-
-The following is a brief description of the shell's operation when it
-reads and executes a command. Basically, the shell does the
-following:
-
-@enumerate
-@item
-Reads its input from a file (@pxref{Shell Scripts}), from a string
-supplied as an argument to the @option{-c} invocation option
-(@pxref{Invoking Bash}), or from the user's terminal.
-
-@item
-Breaks the input into words and operators, obeying the quoting rules
-described in @ref{Quoting}. These tokens are separated by
-@code{metacharacters}. Alias expansion is performed by this step
-(@pxref{Aliases}).
-
-@item
-Parses the tokens into simple and compound commands
-(@pxref{Shell Commands}).
-
-@item
-Performs the various shell expansions (@pxref{Shell Expansions}), breaking
-the expanded tokens into lists of filenames (@pxref{Filename Expansion})
-and commands and arguments.
-
-@item
-Performs any necessary redirections (@pxref{Redirections}) and removes
-the redirection operators and their operands from the argument list.
-
-@item
-Executes the command (@pxref{Executing Commands}).
-
-@item
-Optionally waits for the command to complete and collects its exit
-status (@pxref{Exit Status}).
-
-@end enumerate
-
-@node Quoting
-@subsection Quoting
-@cindex quoting
-@menu
-* Escape Character:: How to remove the special meaning from a single
- character.
-* Single Quotes:: How to inhibit all interpretation of a sequence
- of characters.
-* Double Quotes:: How to suppress most of the interpretation of a
- sequence of characters.
-* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
-* Locale Translation:: How to translate strings into different languages.
-@end menu
-
-Quoting is used to remove the special meaning of certain
-characters or words to the shell. Quoting can be used to
-disable special treatment for special characters, to prevent
-reserved words from being recognized as such, and to prevent
-parameter expansion.
-
-Each of the shell metacharacters (@pxref{Definitions})
-has special meaning to the shell and must be quoted if it is to
-represent itself.
-When the command history expansion facilities are being used
-(@pxref{History Interaction}), the
-@var{history expansion} character, usually @samp{!}, must be quoted
-to prevent history expansion. @xref{Bash History Facilities}, for
-more details concerning history expansion.
-
-There are three quoting mechanisms: the
-@var{escape character}, single quotes, and double quotes.
-
-@node Escape Character
-@subsubsection Escape Character
-A non-quoted backslash @samp{\} is the Bash escape character.
-It preserves the literal value of the next character that follows,
-with the exception of @code{newline}. If a @code{\newline} pair
-appears, and the backslash itself is not quoted, the @code{\newline}
-is treated as a line continuation (that is, it is removed from
-the input stream and effectively ignored).
-
-@node Single Quotes
-@subsubsection Single Quotes
-
-Enclosing characters in single quotes (@samp{'}) preserves the literal value
-of each character within the quotes. A single quote may not occur
-between single quotes, even when preceded by a backslash.
-
-@node Double Quotes
-@subsubsection Double Quotes
-
-Enclosing characters in double quotes (@samp{"}) preserves the literal value
-of all characters within the quotes, with the exception of
-@samp{$}, @samp{`}, @samp{\},
-and, when history expansion is enabled, @samp{!}.
-The characters @samp{$} and @samp{`}
-retain their special meaning within double quotes (@pxref{Shell Expansions}).
-The backslash retains its special meaning only when followed by one of
-the following characters:
-@samp{$}, @samp{`}, @samp{"}, @samp{\}, or @code{newline}.
-Within double quotes, backslashes that are followed by one of these
-characters are removed. Backslashes preceding characters without a
-special meaning are left unmodified.
-A double quote may be quoted within double quotes by preceding it with
-a backslash.
-If enabled, history expansion will be performed unless an @samp{!}
-appearing in double quotes is escaped using a backslash.
-The backslash preceding the @samp{!} is not removed.
-
-The special parameters @samp{*} and @samp{@@} have special meaning
-when in double quotes (@pxref{Shell Parameter Expansion}).
-
-@node ANSI-C Quoting
-@subsubsection ANSI-C Quoting
-@cindex quoting, ANSI
-
-Words of the form @code{$'@var{string}'} are treated specially. The
-word expands to @var{string}, with backslash-escaped characters replaced
-as specified by the ANSI C standard. Backslash escape sequences, if
-present, are decoded as follows:
-
-@table @code
-@item \a
-alert (bell)
-@item \b
-backspace
-@item \e
-@itemx \E
-an escape character (not ANSI C)
-@item \f
-form feed
-@item \n
-newline
-@item \r
-carriage return
-@item \t
-horizontal tab
-@item \v
-vertical tab
-@item \\
-backslash
-@item \'
-single quote
-@item \"
-double quote
-@item \@var{nnn}
-the eight-bit character whose value is the octal value @var{nnn}
-(one to three digits)
-@item \x@var{HH}
-the eight-bit character whose value is the hexadecimal value @var{HH}
-(one or two hex digits)
-@item \u@var{HHHH}
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-@var{HHHH} (one to four hex digits)
-@item \U@var{HHHHHHHH}
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-@var{HHHHHHHH} (one to eight hex digits)
-@item \c@var{x}
-a control-@var{x} character
-@end table
-
-@noindent
-The expanded result is single-quoted, as if the dollar sign had not
-been present.
-
-@node Locale Translation
-@subsubsection Locale-Specific Translation
-@cindex localization
-@cindex internationalization
-@cindex native languages
-@cindex translation, native languages
-
-A double-quoted string preceded by a dollar sign (@samp{$}) will cause
-the string to be translated according to the current locale.
-If the current locale is @code{C} or @code{POSIX}, the dollar sign
-is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
-
-@vindex LC_MESSAGES
-@vindex TEXTDOMAIN
-@vindex TEXTDOMAINDIR
-Some systems use the message catalog selected by the @env{LC_MESSAGES}
-shell variable. Others create the name of the message catalog from the
-value of the @env{TEXTDOMAIN} shell variable, possibly adding a
-suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
-may need to set the @env{TEXTDOMAINDIR} variable to the location of
-the message catalog files. Still others use both variables in this
-fashion:
-@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
-
-@node Comments
-@subsection Comments
-@cindex comments, shell
-
-In a non-interactive shell, or an interactive shell in which the
-@code{interactive_comments} option to the @code{shopt}
-builtin is enabled (@pxref{The Shopt Builtin}),
-a word beginning with @samp{#}
-causes that word and all remaining characters on that line to
-be ignored. An interactive shell without the @code{interactive_comments}
-option enabled does not allow comments. The @code{interactive_comments}
-option is on by default in interactive shells.
-@xref{Interactive Shells}, for a description of what makes
-a shell interactive.
-
-@node Shell Commands
-@section Shell Commands
-@cindex commands, shell
-
-A simple shell command such as @code{echo a b c} consists of the command
-itself followed by arguments, separated by spaces.
-
-More complex shell commands are composed of simple commands arranged together
-in a variety of ways: in a pipeline in which the output of one command
-becomes the input of a second, in a loop or conditional construct, or in
-some other grouping.
-
-@menu
-* Simple Commands:: The most common type of command.
-* Pipelines:: Connecting the input and output of several
- commands.
-* Lists:: How to execute commands sequentially.
-* Compound Commands:: Shell commands for control flow.
-* Coprocesses:: Two-way communication between commands.
-* GNU Parallel:: Running commands in parallel.
-@end menu
-
-@node Simple Commands
-@subsection Simple Commands
-@cindex commands, simple
-
-A simple command is the kind of command encountered most often.
-It's just a sequence of words separated by @code{blank}s, terminated
-by one of the shell's control operators (@pxref{Definitions}). The
-first word generally specifies a command to be executed, with the
-rest of the words being that command's arguments.
-
-The return status (@pxref{Exit Status}) of a simple command is
-its exit status as provided
-by the @sc{posix} 1003.1 @code{waitpid} function, or 128+@var{n} if
-the command was terminated by signal @var{n}.
-
-@node Pipelines
-@subsection Pipelines
-@cindex pipeline
-@cindex commands, pipelines
-
-A @code{pipeline} is a sequence of one or more commands separated by
-one of the control operators @samp{|} or @samp{|&}.
-
-@rwindex time
-@rwindex !
-@cindex command timing
-The format for a pipeline is
-@example
-[time [-p]] [!] @var{command1} [ | or |& @var{command2} ] @dots{}
-@end example
-
-@noindent
-The output of each command in the pipeline is connected via a pipe
-to the input of the next command.
-That is, each command reads the previous command's output. This
-connection is performed before any redirections specified by the
-command.
-
-If @samp{|&} is used, @var{command1}'s standard error, in addition to
-its standard output, is connected to
-@var{command2}'s standard input through the pipe;
-it is shorthand for @code{2>&1 |}.
-This implicit redirection of the standard error to the standard output is
-performed after any redirections specified by the command.
-
-The reserved word @code{time} causes timing statistics
-to be printed for the pipeline once it finishes.
-The statistics currently consist of elapsed (wall-clock) time and
-user and system time consumed by the command's execution.
-The @option{-p} option changes the output format to that specified
-by @sc{posix}.
-When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
-it does not recognize @code{time} as a reserved word if the next
-token begins with a @samp{-}.
-The @env{TIMEFORMAT} variable may be set to a format string that
-specifies how the timing information should be displayed.
-@xref{Bash Variables}, for a description of the available formats.
-The use of @code{time} as a reserved word permits the timing of
-shell builtins, shell functions, and pipelines. An external
-@code{time} command cannot time these easily.
-
-When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}), @code{time}
-may be followed by a newline. In this case, the shell displays the
-total user and system time consumed by the shell and its children.
-The @env{TIMEFORMAT} variable may be used to specify the format of
-the time information.
-
-If the pipeline is not executed asynchronously (@pxref{Lists}), the
-shell waits for all commands in the pipeline to complete.
-
-Each command in a pipeline is executed in its own subshell
-(@pxref{Command Execution Environment}). The exit
-status of a pipeline is the exit status of the last command in the
-pipeline, unless the @code{pipefail} option is enabled
-(@pxref{The Set Builtin}).
-If @code{pipefail} is enabled, the pipeline's return status is the
-value of the last (rightmost) command to exit with a non-zero status,
-or zero if all commands exit successfully.
-If the reserved word @samp{!} precedes the pipeline, the
-exit status is the logical negation of the exit status as described
-above.
-The shell waits for all commands in the pipeline to terminate before
-returning a value.
-
-@node Lists
-@subsection Lists of Commands
-@cindex commands, lists
-
-A @code{list} is a sequence of one or more pipelines separated by one
-of the operators @samp{;}, @samp{&}, @samp{&&}, or @samp{||},
-and optionally terminated by one of @samp{;}, @samp{&}, or a
-@code{newline}.
-
-Of these list operators, @samp{&&} and @samp{||}
-have equal precedence, followed by @samp{;} and @samp{&},
-which have equal precedence.
-
-A sequence of one or more newlines may appear in a @code{list}
-to delimit commands, equivalent to a semicolon.
-
-If a command is terminated by the control operator @samp{&},
-the shell executes the command asynchronously in a subshell.
-This is known as executing the command in the @var{background}.
-The shell does not wait for the command to finish, and the return
-status is 0 (true).
-When job control is not active (@pxref{Job Control}),
-the standard input for asynchronous commands, in the absence of any
-explicit redirections, is redirected from @code{/dev/null}.
-
-Commands separated by a @samp{;} are executed sequentially; the shell
-waits for each command to terminate in turn. The return status is the
-exit status of the last command executed.
-
-@sc{and} and @sc{or} lists are sequences of one or more pipelines
-separated by the control operators @samp{&&} and @samp{||},
-respectively. @sc{and} and @sc{or} lists are executed with left
-associativity.
-
-An @sc{and} list has the form
-@example
-@var{command1} && @var{command2}
-@end example
-
-@noindent
-@var{command2} is executed if, and only if, @var{command1}
-returns an exit status of zero.
-
-An @sc{or} list has the form
-@example
-@var{command1} || @var{command2}
-@end example
-
-@noindent
-@var{command2} is executed if, and only if, @var{command1}
-returns a non-zero exit status.
-
-The return status of
-@sc{and} and @sc{or} lists is the exit status of the last command
-executed in the list.
-
-@node Compound Commands
-@subsection Compound Commands
-@cindex commands, compound
-
-@menu
-* Looping Constructs:: Shell commands for iterative action.
-* Conditional Constructs:: Shell commands for conditional execution.
-* Command Grouping:: Ways to group commands.
-@end menu
-
-Compound commands are the shell programming constructs.
-Each construct begins with a reserved word or control operator and is
-terminated by a corresponding reserved word or operator.
-Any redirections (@pxref{Redirections}) associated with a compound command
-apply to all commands within that compound command unless explicitly overridden.
-
-In most cases a list of commands in a compound command's description may be
-separated from the rest of the command by one or more newlines, and may be
-followed by a newline in place of a semicolon.
-
-Bash provides looping constructs, conditional commands, and mechanisms
-to group commands and execute them as a unit.
-
-@node Looping Constructs
-@subsubsection Looping Constructs
-@cindex commands, looping
-
-Bash supports the following looping constructs.
-
-Note that wherever a @samp{;} appears in the description of a
-command's syntax, it may be replaced with one or more newlines.
-
-@table @code
-@item until
-@rwindex until
-@rwindex do
-@rwindex done
-The syntax of the @code{until} command is:
-
-@example
-until @var{test-commands}; do @var{consequent-commands}; done
-@end example
-
-Execute @var{consequent-commands} as long as
-@var{test-commands} has an exit status which is not zero.
-The return status is the exit status of the last command executed
-in @var{consequent-commands}, or zero if none was executed.
-
-@item while
-@rwindex while
-The syntax of the @code{while} command is:
-
-@example
-while @var{test-commands}; do @var{consequent-commands}; done
-@end example
-
-Execute @var{consequent-commands} as long as
-@var{test-commands} has an exit status of zero.
-The return status is the exit status of the last command executed
-in @var{consequent-commands}, or zero if none was executed.
-
-@item for
-@rwindex for
-The syntax of the @code{for} command is:
-
-@example
-for @var{name} [ [in [@var{words} @dots{}] ] ; ] do @var{commands}; done
-@end example
-
-Expand @var{words}, and execute @var{commands} once for each member
-in the resultant list, with @var{name} bound to the current member.
-If @samp{in @var{words}} is not present, the @code{for} command
-executes the @var{commands} once for each positional parameter that is
-set, as if @samp{in "$@@"} had been specified
-(@pxref{Special Parameters}).
-The return status is the exit status of the last command that executes.
-If there are no items in the expansion of @var{words}, no commands are
-executed, and the return status is zero.
-
-An alternate form of the @code{for} command is also supported:
-
-@example
-for (( @var{expr1} ; @var{expr2} ; @var{expr3} )) ; do @var{commands} ; done
-@end example
-
-First, the arithmetic expression @var{expr1} is evaluated according
-to the rules described below (@pxref{Shell Arithmetic}).
-The arithmetic expression @var{expr2} is then evaluated repeatedly
-until it evaluates to zero.
-Each time @var{expr2} evaluates to a non-zero value, @var{commands} are
-executed and the arithmetic expression @var{expr3} is evaluated.
-If any expression is omitted, it behaves as if it evaluates to 1.
-The return value is the exit status of the last command in @var{commands}
-that is executed, or false if any of the expressions is invalid.
-@end table
-
-The @code{break} and @code{continue} builtins (@pxref{Bourne Shell Builtins})
-may be used to control loop execution.
-
-@node Conditional Constructs
-@subsubsection Conditional Constructs
-@cindex commands, conditional
-
-@table @code
-@item if
-@rwindex if
-@rwindex then
-@rwindex else
-@rwindex elif
-@rwindex fi
-The syntax of the @code{if} command is:
-
-@example
-if @var{test-commands}; then
- @var{consequent-commands};
-[elif @var{more-test-commands}; then
- @var{more-consequents};]
-[else @var{alternate-consequents};]
-fi
-@end example
-
-The @var{test-commands} list is executed, and if its return status is zero,
-the @var{consequent-commands} list is executed.
-If @var{test-commands} returns a non-zero status, each @code{elif} list
-is executed in turn, and if its exit status is zero,
-the corresponding @var{more-consequents} is executed and the
-command completes.
-If @samp{else @var{alternate-consequents}} is present, and
-the final command in the final @code{if} or @code{elif} clause
-has a non-zero exit status, then @var{alternate-consequents} is executed.
-The return status is the exit status of the last command executed, or
-zero if no condition tested true.
-
-@item case
-@rwindex case
-@rwindex in
-@rwindex esac
-The syntax of the @code{case} command is:
-
-@example
-case @var{word} in [ [(] @var{pattern} [| @var{pattern}]@dots{}) @var{command-list} ;;]@dots{} esac
-@end example
-
-@code{case} will selectively execute the @var{command-list} corresponding to
-the first @var{pattern} that matches @var{word}.
-If the @code{nocasematch} shell option
-(see the description of @code{shopt} in @ref{The Shopt Builtin})
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-The @samp{|} is used to separate multiple patterns, and the @samp{)}
-operator terminates a pattern list.
-A list of patterns and an associated command-list is known
-as a @var{clause}.
-
-Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}.
-The @var{word} undergoes tilde expansion, parameter expansion, command
-substitution, arithmetic expansion, and quote removal before matching is
-attempted. Each @var{pattern} undergoes tilde expansion, parameter
-expansion, command substitution, and arithmetic expansion.
-
-There may be an arbitrary number of @code{case} clauses, each terminated
-by a @samp{;;}, @samp{;&}, or @samp{;;&}.
-The first pattern that matches determines the
-command-list that is executed.
-It's a common idiom to use @samp{*} as the final pattern to define the
-default case, since that pattern will always match.
-
-Here is an example using @code{case} in a script that could be used to
-describe one interesting feature of an animal:
-
-@example
-echo -n "Enter the name of an animal: "
-read ANIMAL
-echo -n "The $ANIMAL has "
-case $ANIMAL in
- horse | dog | cat) echo -n "four";;
- man | kangaroo ) echo -n "two";;
- *) echo -n "an unknown number of";;
-esac
-echo " legs."
-@end example
-
-@noindent
-
-If the @samp{;;} operator is used, no subsequent matches are attempted after
-the first pattern match.
-Using @samp{;&} in place of @samp{;;} causes execution to continue with
-the @var{command-list} associated with the next clause, if any.
-Using @samp{;;&} in place of @samp{;;} causes the shell to test the patterns
-in the next clause, if any, and execute any associated @var{command-list}
-on a successful match.
-
-The return status is zero if no @var{pattern} is matched. Otherwise, the
-return status is the exit status of the @var{command-list} executed.
-
-@item select
-@rwindex select
-
-The @code{select} construct allows the easy generation of menus.
-It has almost the same syntax as the @code{for} command:
-
-@example
-select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
-@end example
-
-The list of words following @code{in} is expanded, generating a list
-of items. The set of expanded words is printed on the standard
-error output stream, each preceded by a number. If the
-@samp{in @var{words}} is omitted, the positional parameters are printed,
-as if @samp{in "$@@"} had been specified.
-The @env{PS3} prompt is then displayed and a line is read from the
-standard input.
-If the line consists of a number corresponding to one of the displayed
-words, then the value of @var{name} is set to that word.
-If the line is empty, the words and prompt are displayed again.
-If @code{EOF} is read, the @code{select} command completes.
-Any other value read causes @var{name} to be set to null.
-The line read is saved in the variable @env{REPLY}.
-
-The @var{commands} are executed after each selection until a
-@code{break} command is executed, at which
-point the @code{select} command completes.
-
-Here is an example that allows the user to pick a filename from the
-current directory, and displays the name and index of the file
-selected.
-
-@example
-select fname in *;
-do
- echo you picked $fname \($REPLY\)
- break;
-done
-@end example
-
-@item ((@dots{}))
-@example
-(( @var{expression} ))
-@end example
-
-The arithmetic @var{expression} is evaluated according to the rules
-described below (@pxref{Shell Arithmetic}).
-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
-let "@var{expression}"
-@end example
-@noindent
-@xref{Bash Builtins}, for a full description of the @code{let} builtin.
-
-@item [[@dots{}]]
-@rwindex [[
-@rwindex ]]
-@example
-[[ @var{expression} ]]
-@end example
-
-Return a status of 0 or 1 depending on the evaluation of
-the conditional expression @var{expression}.
-Expressions are composed of the primaries described below in
-@ref{Bash Conditional Expressions}.
-Word splitting and filename expansion are not performed on the words
-between the @code{[[} and @code{]]}; tilde expansion, parameter and
-variable expansion, arithmetic expansion, command substitution, process
-substitution, and quote removal are performed.
-Conditional operators such as @samp{-f} must be unquoted to be recognized
-as primaries.
-
-When used with @code{[[}, the @samp{<} and @samp{>} operators sort
-lexicographically using the current locale.
-
-When the @samp{==} and @samp{!=} operators are used, the string to the
-right of the operator is considered a pattern and matched according
-to the rules described below in @ref{Pattern Matching},
-as if the @code{extglob} shell option were enabled.
-The @samp{=} operator is identical to @samp{==}.
-If the @code{nocasematch} shell option
-(see the description of @code{shopt} in @ref{The Shopt Builtin})
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-The return value is 0 if the string matches (@samp{==}) or does not
-match (@samp{!=})the pattern, and 1 otherwise.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-
-An additional binary operator, @samp{=~}, is available, with the same
-precedence as @samp{==} and @samp{!=}.
-When it is used, the string to the right of the operator is considered
-an extended regular expression and matched accordingly (as in @i{regex}3)).
-The return value is 0 if the string matches
-the pattern, and 1 otherwise.
-If the regular expression is syntactically incorrect, the conditional
-expression's return value is 2.
-If the @code{nocasematch} shell option
-(see the description of @code{shopt} in @ref{The Shopt Builtin})
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
-If the pattern is stored in a shell variable, quoting the variable
-expansion forces the entire pattern to be matched as a string.
-Substrings matched by parenthesized subexpressions within the regular
-expression are saved in the array variable @code{BASH_REMATCH}.
-The element of @code{BASH_REMATCH} with index 0 is the portion of the string
-matching the entire regular expression.
-The element of @code{BASH_REMATCH} with index @var{n} is the portion of the
-string matching the @var{n}th parenthesized subexpression.
-
-For example, the following will match a line
-(stored in the shell variable @var{line})
-if there is a sequence of characters in the value consisting of
-any number, including zero, of
-space characters, zero or one instances of @samp{a}, then a @samp{b}:
-@example
-[[ $line =~ [[:space:]]*(a)?b ]]
-@end example
-
-@noindent
-That means values like @samp{aab} and @samp{ aaaaaab} will match, as
-will a line containing a @samp{b} anywhere in its value.
-
-Storing the regular expression in a shell variable is often a useful
-way to avoid problems with quoting characters that are special to the
-shell.
-It is sometimes difficult to specify a regular expression literally
-without using quotes, or to keep track of the quoting used by regular
-expressions while paying attention to the shell's quote removal.
-Using a shell variable to store the pattern decreases these problems.
-For example, the following is equivalent to the above:
-@example
-pattern='[[:space:]]*(a)?b'
-[[ $line =~ $pattern ]]
-@end example
-
-@noindent
-If you want to match a character that's special to the regular expression
-grammar, it has to be quoted to remove its special meaning.
-This means that in the pattern @samp{xxx.txt}, the @samp{.} matches any
-character in the string (its usual regular expression meaning), but in the
-pattern @samp{"xxx.txt"} it can only match a literal @samp{.}.
-Shell programmers should take special care with backslashes, since backslashes
-are used both by the shell and regular expressions to remove the special
-meaning from the following character.
-The following two sets of commands are @emph{not} equivalent:
-@example
-pattern='\.'
-
-[[ . =~ $pattern ]]
-[[ . =~ \. ]]
-
-[[ . =~ "$pattern" ]]
-[[ . =~ '\.' ]]
-@end example
-
-@noindent
-The first two matches will succeed, but the second two will not, because
-in the second two the backslash will be part of the pattern to be matched.
-In the first two examples, the backslash removes the special meaning from
-@samp{.}, so the literal @samp{.} matches.
-If the string in the first examples were anything other than @samp{.}, say
-@samp{a}, the pattern would not match, because the quoted @samp{.} in the
-pattern loses its special meaning of matching any single character.
-
-Expressions may be combined using the following operators, listed
-in decreasing order of precedence:
-
-@table @code
-@item ( @var{expression} )
-Returns the value of @var{expression}.
-This may be used to override the normal precedence of operators.
-
-@item ! @var{expression}
-True if @var{expression} is false.
-
-@item @var{expression1} && @var{expression2}
-True if both @var{expression1} and @var{expression2} are true.
-
-@item @var{expression1} || @var{expression2}
-True if either @var{expression1} or @var{expression2} is true.
-@end table
-
-@noindent
-The @code{&&} and @code{||} operators do not evaluate @var{expression2} if the
-value of @var{expression1} is sufficient to determine the return
-value of the entire conditional expression.
-@end table
-
-@node Command Grouping
-@subsubsection Grouping Commands
-@cindex commands, grouping
-
-Bash provides two ways to group a list of commands to be executed
-as a unit. When commands are grouped, redirections may be applied
-to the entire command list. For example, the output of all the
-commands in the list may be redirected to a single stream.
-
-@table @code
-@item ()
-@example
-( @var{list} )
-@end example
-
-Placing a list of commands between parentheses causes a subshell
-environment to be created (@pxref{Command Execution Environment}), and each
-of the commands in @var{list} to be executed in that subshell. Since the
-@var{list} is executed in a subshell, variable assignments do not remain in
-effect after the subshell completes.
-
-@item @{@}
-@rwindex @{
-@rwindex @}
-@example
-@{ @var{list}; @}
-@end example
-
-Placing a list of commands between curly braces causes the list to
-be executed in the current shell context. No subshell is created.
-The semicolon (or newline) following @var{list} is required.
-@end table
-
-In addition to the creation of a subshell, there is a subtle difference
-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 or other shell metacharacters.
-The parentheses are @code{operators}, and are
-recognized as separate tokens by the shell even if they are not separated
-from the @var{list} by whitespace.
-
-The exit status of both of these constructs is the exit status of
-@var{list}.
-
-@node Coprocesses
-@subsection Coprocesses
-@cindex coprocess
-
-A @code{coprocess} is a shell command preceded by the @code{coproc}
-reserved word.
-A coprocess is executed asynchronously in a subshell, as if the command
-had been terminated with the @samp{&} control operator, with a two-way pipe
-established between the executing shell and the coprocess.
-
-The format for a coprocess is:
-@example
-coproc [@var{NAME}] @var{command} [@var{redirections}]
-@end example
-
-@noindent
-This creates a coprocess named @var{NAME}.
-If @var{NAME} is not supplied, the default name is @var{COPROC}.
-@var{NAME} must not be supplied if @var{command} is a simple
-command (@pxref{Simple Commands}); otherwise, it is interpreted as
-the first word of the simple command.
-
-When the coprocess is executed, the shell creates an array variable
-(@pxref{Arrays})
-named @env{NAME} in the context of the executing shell.
-The standard output of @var{command}
-is connected via a pipe to a file descriptor in the executing shell,
-and that file descriptor is assigned to @env{NAME}[0].
-The standard input of @var{command}
-is connected via a pipe to a file descriptor in the executing shell,
-and that file descriptor is assigned to @env{NAME}[1].
-This pipe is established before any redirections specified by the
-command (@pxref{Redirections}).
-The file descriptors can be utilized as arguments to shell commands
-and redirections using standard word expansions.
-The file descriptors are not available in subshells.
-
-The process ID of the shell spawned to execute the coprocess is
-available as the value of the variable @env{NAME}_PID.
-The @code{wait}
-builtin command may be used to wait for the coprocess to terminate.
-
-Since the coprocess is created as an asynchronous command,
-the @code{coproc} command always returns success.
-The return status of a coprocess is the exit status of @var{command}.
-
-@node GNU Parallel
-@subsection GNU Parallel
-
-There are ways to run commands in parallel that are not built into Bash.
-GNU Parallel is a tool to do just that.
-
-GNU Parallel, as its name suggests, can be used to build and run commands
-in parallel. You may run the same command with different arguments, whether
-they are filenames, usernames, hostnames, or lines read from files. GNU
-Parallel provides shorthand references to many of the most common operations
-(input lines, various portions of the input line, different ways to specify
-the input source, and so on). Parallel can replace @code{xargs} or feed
-commands from its input sources to several different instances of Bash.
-
-For a complete description, refer to the GNU Parallel documentation. A few
-examples should provide a brief introduction to its use.
-
-For example, it is easy to replace @code{xargs} to gzip all html files in the
-current directory and its subdirectories:
-@example
-find . -type f -name '*.html' -print | parallel gzip
-@end example
-@noindent
-If you need to protect special characters such as newlines in file names,
-use find's @option{-print0} option and parallel's @option{-0} option.
-
-You can use Parallel to move files from the current directory when the
-number of files is too large to process with one @code{mv} invocation:
-@example
-ls | parallel mv @{@} destdir
-@end example
-
-As you can see, the @{@} is replaced with each line read from standard input.
-While using @code{ls} will work in most instances, it is not sufficient to
-deal with all filenames.
-If you need to accommodate special characters in filenames, you can use
-
-@example
-find . -depth 1 \! -name '.*' -print0 | parallel -0 mv @{@} destdir
-@end example
-
-@noindent
-as alluded to above.
-
-This will run as many @code{mv} commands as there are files in the current
-directory.
-You can emulate a parallel @code{xargs} by adding the @option{-X} option:
-@example
-find . -depth 1 \! -name '.*' -print0 | parallel -0 -X mv @{@} destdir
-@end example
-
-GNU Parallel can replace certain common idioms that operate on lines read
-from a file (in this case, filenames listed one per line):
-@example
- while IFS= read -r x; do
- do-something1 "$x" "config-$x"
- do-something2 < "$x"
- done < file | process-output
-@end example
-
-@noindent
-with a more compact syntax reminiscent of lambdas:
-@example
-cat list | parallel "do-something1 @{@} config-@{@} ; do-something2 < @{@}" | process-output
-@end example
-
-Parallel provides a built-in mechanism to remove filename extensions, which
-lends itself to batch file transformations or renaming:
-@example
-ls *.gz | parallel -j+0 "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}"
-@end example
-@noindent
-This will recompress all files in the current directory with names ending
-in .gz using bzip2, running one job per CPU (-j+0) in parallel.
-(We use @code{ls} for brevity here; using @code{find} as above is more
-robust in the face of filenames containing unexpected characters.)
-Parallel can take arguments from the command line; the above can also be
-written as
-
-@example
-parallel "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}" ::: *.gz
-@end example
-
-If a command generates output, you may want to preserve the input order in
-the output. For instance, the following command
-@example
-@{ echo foss.org.my ; echo debian.org; echo freenetproject.org; @} | parallel traceroute
-@end example
-@noindent
-will display as output the traceroute invocation that finishes first.
-Adding the @option{-k} option
-@example
-@{ echo foss.org.my ; echo debian.org; echo freenetproject.org; @} | parallel -k traceroute
-@end example
-@noindent
-will ensure that the output of @code{traceroute foss.org.my} is displayed first.
-
-Finally, Parallel can be used to run a sequence of shell commands in parallel,
-similar to @samp{cat file | bash}.
-It is not uncommon to take a list of filenames, create a series of shell
-commands to operate on them, and feed that list of commnds to a shell.
-Parallel can speed this up. Assuming that @file{file} contains a list of
-shell commands, one per line,
-
-@example
-parallel -j 10 < file
-@end example
-
-@noindent
-will evaluate the commands using the shell (since no explicit command is
-supplied as an argument), in blocks of ten shell jobs at a time.
-
-@node Shell Functions
-@section Shell Functions
-@cindex shell function
-@cindex functions, shell
-
-Shell functions are a way to group commands for later execution
-using a single name for the group. They are executed just like
-a "regular" command.
-When the name of a shell function is used as a simple command name,
-the list of commands associated with that function name is executed.
-Shell functions are executed in the current
-shell context; no new process is created to interpret them.
-
-Functions are declared using this syntax:
-@rwindex function
-@example
-@var{name} () @var{compound-command} [ @var{redirections} ]
-@end example
-
-or
-
-@example
-function @var{name} [()] @var{compound-command} [ @var{redirections} ]
-@end example
-
-This defines a shell function named @var{name}. The reserved
-word @code{function} is optional.
-If the @code{function} reserved
-word is supplied, the parentheses are optional.
-The @var{body} of the function is the compound command
-@var{compound-command} (@pxref{Compound Commands}).
-That command is usually a @var{list} enclosed between @{ and @}, but
-may be any compound command listed above,
-with one exception: If the @code{function} reserved word is used, but the
-parentheses are not supplied, the braces are required.
-@var{compound-command} is executed whenever @var{name} is specified as the
-name of a command.
-When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
-@var{name} may not be the same as one of the special builtins
-(@pxref{Special Builtins}).
-Any redirections (@pxref{Redirections}) associated with the shell function
-are performed when the function is executed.
-
-A function definition may be deleted using the @option{-f} option to the
-@code{unset} builtin (@pxref{Bourne Shell Builtins}).
-
-The exit status of a function definition is zero unless a syntax error
-occurs or a readonly function with the same name already exists.
-When executed, the exit status of a function is the exit status of the
-last command executed in the body.
-
-Note that for historical reasons, in the most common usage the curly braces
-that surround the body of the function must be separated from the body by
-@code{blank}s or newlines.
-This is because the braces are reserved words and are only recognized
-as such when they are separated from the command list
-by whitespace or another shell metacharacter.
-Also, when using the braces, the @var{list} must be terminated by a semicolon,
-a @samp{&}, or a newline.
-
-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 expands to the number of
-positional parameters is updated to reflect the change.
-Special parameter @code{0} is unchanged.
-The first element of the @env{FUNCNAME} variable is set to the
-name of the function while the function is executing.
-
-All other aspects of the shell execution
-environment are identical between a function and its caller
-with these exceptions:
-the @env{DEBUG} and @env{RETURN} traps
-are not inherited unless the function has been given the
-@code{trace} attribute using the @code{declare} builtin or
-the @code{-o functrace} option has been enabled with
-the @code{set} builtin,
-(in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps),
-and the @env{ERR} trap is not inherited unless the @code{-o errtrace}
-shell option has been enabled.
-@xref{Bourne Shell Builtins}, for the description of the
-@code{trap} builtin.
-
-The @env{FUNCNEST} variable, if set to a numeric value greater
-than 0, defines a maximum function nesting level. Function
-invocations that exceed the limit cause the entire command to
-abort.
-
-If the builtin command @code{return}
-is executed in a function, the function completes and
-execution resumes with the next command after the function
-call.
-Any command associated with the @code{RETURN} trap is executed
-before execution resumes.
-When a function completes, the values of the
-positional parameters and the special parameter @samp{#}
-are restored to the values they had prior to the function's
-execution. If a numeric argument is given to @code{return},
-that is the function's return status; otherwise the function's
-return status is the exit status of the last command executed
-before the @code{return}.
-
-Variables local to the function may be declared with the
-@code{local} builtin. These variables are visible only to
-the function and the commands it invokes.
-
-Function names and definitions may be listed with the
-@option{-f} option to the @code{declare} (@code{typeset})
-builtin command (@pxref{Bash Builtins}).
-The @option{-F} option to @code{declare} or @code{typeset}
-will list the function names only
-(and optionally the source file and line number, if the @code{extdebug}
-shell option is enabled).
-Functions may be exported so that subshells
-automatically have them defined with the
-@option{-f} option to the @code{export} builtin
-(@pxref{Bourne Shell Builtins}).
-Note that shell functions and variables with the same name may result
-in multiple identically-named entries in the environment passed to the
-shell's children.
-Care should be taken in cases where this may cause a problem.
-
-Functions may be recursive.
-The @code{FUNCNEST} variable may be used to limit the depth of the
-function call stack and restrict the number of function invocations.
-By default, no limit is placed on the number of recursive calls.
-
-@node Shell Parameters
-@section Shell Parameters
-@cindex parameters
-@cindex variable, shell
-@cindex shell variable
-
-@menu
-* Positional Parameters:: The shell's command-line arguments.
-* Special Parameters:: Parameters denoted by special characters.
-@end menu
-
-A @var{parameter} is an entity that stores values.
-It can be a @code{name}, a number, or one of the special characters
-listed below.
-A @var{variable} is a parameter denoted by a @code{name}.
-A variable has a @var{value} and zero or more @var{attributes}.
-Attributes are assigned using the @code{declare} builtin command
-(see the description of the @code{declare} builtin in @ref{Bash Builtins}).
-
-A parameter is set if it has been assigned a value. The null string is
-a valid value. Once a variable is set, it may be unset only by using
-the @code{unset} builtin command.
-
-A variable may be assigned to by a statement of the form
-@example
-@var{name}=[@var{value}]
-@end example
-@noindent
-If @var{value}
-is not given, the variable is assigned the null string. All
-@var{value}s undergo tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote
-removal (detailed below). If the variable has its @code{integer}
-attribute set, then @var{value}
-is evaluated as an arithmetic expression even if the @code{$((@dots{}))}
-expansion is not used (@pxref{Arithmetic Expansion}).
-Word splitting is not performed, with the exception
-of @code{"$@@"} as explained below.
-Filename expansion is not performed.
-Assignment statements may also appear as arguments to the
-@code{alias},
-@code{declare}, @code{typeset}, @code{export}, @code{readonly},
-and @code{local} builtin commands (@var{declaration} commands).
-When in @sc{posix} mode (@pxref{Bash POSIX Mode}), these builtins may appear
-in a command after one or more instances of the @code{command} builtin
-and retain these assignment statement properties.
-
-In the context where an assignment statement is assigning a value
-to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
-operator can be used to
-append to or add to the variable's previous value.
-This includes arguments to builtin commands such as @code{declare} that
-accept assignment statements (@var{declaration} commands).
-When @samp{+=} is applied to a variable for which the @var{integer} attribute
-has been set, @var{value} is evaluated as an arithmetic expression and
-added to the variable's current value, which is also evaluated.
-When @samp{+=} is applied to an array variable using compound assignment
-(@pxref{Arrays}), the
-variable's value is not unset (as it is when using @samp{=}), and new
-values are appended to the array beginning at one greater than the array's
-maximum index (for indexed arrays), or added as additional key-value pairs
-in an associative array.
-When applied to a string-valued variable, @var{value} is expanded and
-appended to the variable's value.
-
-A variable can be assigned the @var{nameref} attribute using the
-@option{-n} option to the \fBdeclare\fP or \fBlocal\fP builtin commands
-(@pxref{Bash Builtins})
-to create a @var{nameref}, or a reference to another variable.
-This allows variables to be manipulated indirectly.
-Whenever the nameref variable is referenced, assigned to, unset, or has
-its attributes modified (other than the nameref attribute itself), the
-operation is actually performed on the variable specified by the nameref
-variable's value.
-A nameref is commonly used within shell functions to refer to a variable
-whose name is passed as an argument to the function.
-For instance, if a variable name is passed to a shell function as its first
-argument, running
-@example
-declare -n ref=$1
-@end example
-@noindent
-inside the function creates a nameref variable @var{ref} whose value is
-the variable name passed as the first argument.
-References and assignments to @var{ref}, and changes to its attributes,
-are treated as references, assignments, and attribute modifications
-to the variable whose name was passed as @code{$1}.
-
-If the control variable in a @code{for} loop has the nameref attribute,
-the list of words can be a list of shell variables, and a name reference
-will be established for each word in the list, in turn, when the loop is
-executed.
-Array variables cannot be given the nameref attribute.
-However, nameref variables can reference array variables and subscripted
-array variables.
-Namerefs can be unset using the @option{-n} option to the @code{unset} builtin
-(@pxref{Bourne Shell Builtins}).
-Otherwise, if @code{unset} is executed with the name of a nameref variable
-as an argument, the variable referenced by the nameref variable will be unset.
-
-@node Positional Parameters
-@subsection Positional Parameters
-@cindex parameters, positional
-
-A @var{positional parameter} is a parameter denoted by one or more
-digits, other than the single digit @code{0}. Positional parameters are
-assigned from the shell's arguments when it is invoked,
-and may be reassigned using the @code{set} builtin command.
-Positional parameter @code{N} may be referenced as @code{$@{N@}}, or
-as @code{$N} when @code{N} consists of a single digit.
-Positional parameters may not be assigned to with assignment statements.
-The @code{set} and @code{shift} builtins are used to set and
-unset them (@pxref{Shell Builtin Commands}).
-The positional parameters are
-temporarily replaced when a shell function is executed
-(@pxref{Shell Functions}).
-
-When a positional parameter consisting of more than a single
-digit is expanded, it must be enclosed in braces.
-
-@node Special Parameters
-@subsection Special Parameters
-@cindex parameters, special
-
-The shell treats several parameters specially. These parameters may
-only be referenced; assignment to them is not allowed.
-
-@vtable @code
-
-@item *
-@vindex $*
-($*) Expands to the positional parameters, starting from one.
-When the expansion is not within double quotes, each positional parameter
-expands to a separate word.
-In contexts where it is performed, those words
-are subject to further word splitting and pathname expansion.
-When the expansion occurs within double quotes, it expands to a single word
-with the value of each parameter separated by the first character of the
-@env{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 @env{IFS} is unset, the parameters are separated by spaces.
-If @env{IFS} is null, the parameters are joined without intervening
-separators.
-
-@item @@
-@vindex $@@
-($@@) Expands to the positional parameters, starting from one. When the
-expansion occurs within double quotes, each parameter expands to a
-separate word. That is, @code{"$@@"} is equivalent to
-@code{"$1" "$2" @dots{}}.
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-When there are no positional parameters, @code{"$@@"} and
-@code{$@@}
-expand to nothing (i.e., they are removed).
-
-@item #
-@vindex $#
-($#) Expands to the number of positional parameters in decimal.
-
-@item ?
-@vindex $?
-($?) Expands to the exit status of the most recently executed foreground
-pipeline.
-
-@item -
-@vindex $-
-($-, a hyphen.) Expands to the current option flags as specified upon
-invocation, by the @code{set}
-builtin command, or those set by the shell itself
-(such as the @option{-i} option).
-
-@item $
-@vindex $$
-($$) Expands to the process @sc{id} of the shell. In a @code{()} subshell, it
-expands to the process @sc{id} of the invoking shell, not the subshell.
-
-@item !
-@vindex $!
-($!) Expands to the process @sc{id} of the job most recently placed into the
-background, whether executed as an asynchronous command or using
-the @code{bg} builtin (@pxref{Job Control Builtins}).
-
-@item 0
-@vindex $0
-($0) Expands to the name of the shell or shell script. This is set at
-shell initialization. If Bash is invoked with a file of commands
-(@pxref{Shell Scripts}), @code{$0} is set to the name of that file.
-If Bash is started with the @option{-c} option (@pxref{Invoking Bash}),
-then @code{$0} is set to the first argument after the string to be
-executed, if one is present. Otherwise, it is set
-to the filename used to invoke Bash, as given by argument zero.
-
-@item _
-@vindex $_
-($_, an underscore.)
-At shell startup, set to the absolute pathname used to invoke the
-shell or shell script being executed as passed in the environment
-or argument list.
-Subsequently, expands to the last argument to the previous command,
-after expansion.
-Also set to the full pathname used to invoke each command executed
-and placed in the environment exported to that command.
-When checking mail, this parameter holds the name of the mail file.
-@end vtable
-
-@node Shell Expansions
-@section Shell Expansions
-@cindex expansion
-
-Expansion is performed on the command line after it has been split into
-@code{token}s. There are seven kinds of expansion performed:
-
-@itemize @bullet
-@item brace expansion
-@item tilde expansion
-@item parameter and variable expansion
-@item command substitution
-@item arithmetic expansion
-@item word splitting
-@item filename expansion
-@end itemize
-
-@menu
-* Brace Expansion:: Expansion of expressions within braces.
-* Tilde Expansion:: Expansion of the ~ character.
-* Shell Parameter Expansion:: How Bash expands variables to their values.
-* Command Substitution:: Using the output of a command as an argument.
-* Arithmetic Expansion:: How to use arithmetic in shell expansions.
-* Process Substitution:: A way to write and read to and from a
- command.
-* Word Splitting:: How the results of expansion are split into separate
- arguments.
-* Filename Expansion:: A shorthand for specifying filenames matching patterns.
-* Quote Removal:: How and when quote characters are removed from
- words.
-@end menu
-
-The order of expansions is:
-brace expansion;
-tilde expansion, parameter and variable expansion, arithmetic expansion,
-and command substitution (done in a left-to-right fashion);
-word splitting;
-and filename expansion.
-
-On systems that can support it, there is an additional expansion
-available: @var{process substitution}.
-This is performed at the
-same time as tilde, parameter, variable, and arithmetic expansion and
-command substitution.
-
-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{"$@{@var{name}[@@]@}"}
-(@pxref{Arrays}).
-
-After all expansions, @code{quote removal} (@pxref{Quote Removal})
-is performed.
-
-@node Brace Expansion
-@subsection Brace Expansion
-@cindex brace expansion
-@cindex expansion, brace
-
-Brace expansion is a mechanism by which arbitrary strings may be generated.
-This mechanism is similar to
-@var{filename expansion} (@pxref{Filename Expansion}),
-but the filenames generated need not exist.
-Patterns to be brace expanded take the form of an optional @var{preamble},
-followed by either a series of comma-separated strings or a sequence expression
-between a pair of braces,
-followed by an optional @var{postscript}.
-The preamble is prefixed to each string contained within the braces, and
-the postscript is then appended to each resulting string, expanding left
-to right.
-
-Brace expansions may be nested.
-The results of each expanded string are not sorted; left to right order
-is preserved.
-For example,
-@example
-bash$ echo a@{d,c,b@}e
-ade ace abe
-@end example
-
-A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}},
-where @var{x} and @var{y} are either integers or single characters,
-and @var{incr}, an optional increment, is an integer.
-When integers are supplied, the expression expands to each number between
-@var{x} and @var{y}, inclusive.
-Supplied integers may be prefixed with @samp{0} to force each term to have the
-same width.
-When either @var{x} or @var{y} begins with a zero, the shell
-attempts to force all generated terms to contain the same number of digits,
-zero-padding where necessary.
-When characters are supplied, the expression expands to each character
-lexicographically between @var{x} and @var{y}, inclusive,
-using the default C locale.
-Note that both @var{x} and @var{y} must be of the same type.
-When the increment is supplied, it is used as the difference between
-each term. The default increment is 1 or -1 as appropriate.
-
-Brace expansion is performed before any other expansions,
-and any characters special to other expansions are preserved
-in the result. It is strictly textual. Bash
-does not apply any syntactic interpretation to the context of the
-expansion or the text between the braces.
-To avoid conflicts with parameter expansion, the string @samp{$@{}
-is not considered eligible for brace expansion.
-
-A correctly-formed brace expansion must contain unquoted opening
-and closing braces, and at least one unquoted comma or a valid
-sequence expression.
-Any incorrectly formed brace expansion is left unchanged.
-
-A @{ or @samp{,} may be quoted with a backslash to prevent its
-being considered part of a brace expression.
-To avoid conflicts with parameter expansion, the string @samp{$@{}
-is not considered eligible for brace expansion.
-
-This construct is typically used as shorthand when the common
-prefix of the strings to be generated is longer than in the
-above example:
-@example
-mkdir /usr/local/src/bash/@{old,new,dist,bugs@}
-@end example
-or
-@example
-chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
-@end example
-
-@node Tilde Expansion
-@subsection Tilde Expansion
-@cindex tilde expansion
-@cindex expansion, tilde
-
-If a word begins with an unquoted tilde character (@samp{~}), all of the
-characters up to the first unquoted slash (or all characters,
-if there is no unquoted slash) are considered a @var{tilde-prefix}.
-If none of the characters in the tilde-prefix are quoted, the
-characters in the tilde-prefix following the tilde are treated as a
-possible @var{login name}.
-If this login name is the null string, the tilde is replaced with the
-value of the @env{HOME} shell variable.
-If @env{HOME} is unset, the home directory of the user executing the
-shell is substituted instead.
-Otherwise, the tilde-prefix is replaced with the home directory
-associated with the specified login name.
-
-If the tilde-prefix is @samp{~+}, the value of
-the shell variable @env{PWD} replaces the tilde-prefix.
-If the tilde-prefix is @samp{~-}, the value of the shell variable
-@env{OLDPWD}, if it is set, is substituted.
-
-If the characters following the tilde in the tilde-prefix consist of a
-number @var{N}, optionally prefixed by a @samp{+} or a @samp{-},
-the tilde-prefix is replaced with the
-corresponding element from the directory stack, as it would be displayed
-by the @code{dirs} builtin invoked with the characters following tilde
-in the tilde-prefix as an argument (@pxref{The Directory Stack}).
-If the tilde-prefix, sans the tilde, consists of a number without a
-leading @samp{+} or @samp{-}, @samp{+} is assumed.
-
-If the login name is invalid, or the tilde expansion fails, the word is
-left unchanged.
-
-Each variable assignment is checked for unquoted tilde-prefixes immediately
-following a @samp{:} or the first @samp{=}.
-In these cases, tilde expansion is also performed.
-Consequently, one may use filenames with tildes in assignments to
-@env{PATH}, @env{MAILPATH}, and @env{CDPATH},
-and the shell assigns the expanded value.
-
-The following table shows how Bash treats unquoted tilde-prefixes:
-
-@table @code
-@item ~
-The value of @code{$HOME}
-@item ~/foo
-@file{$HOME/foo}
-
-@item ~fred/foo
-The subdirectory @code{foo} of the home directory of the user
-@code{fred}
-
-@item ~+/foo
-@file{$PWD/foo}
-
-@item ~-/foo
-@file{$@{OLDPWD-'~-'@}/foo}
-
-@item ~@var{N}
-The string that would be displayed by @samp{dirs +@var{N}}
-
-@item ~+@var{N}
-The string that would be displayed by @samp{dirs +@var{N}}
-
-@item ~-@var{N}
-The string that would be displayed by @samp{dirs -@var{N}}
-@end table
-
-@node Shell Parameter Expansion
-@subsection Shell Parameter Expansion
-@cindex parameter expansion
-@cindex expansion, parameter
-
-The @samp{$} character introduces parameter expansion,
-command substitution, or arithmetic expansion. The parameter name
-or symbol to be expanded may be enclosed in braces, which
-are optional but serve to protect the variable to be expanded from
-characters immediately following it which could be
-interpreted as part of the name.
-
-When braces are used, the matching ending brace is the first @samp{@}}
-not escaped by a backslash or within a quoted string, and not within an
-embedded arithmetic expansion, command substitution, or parameter
-expansion.
-
-The basic form of parameter expansion is $@{@var{parameter}@}.
-The value of @var{parameter} is substituted.
-The @var{parameter} is a shell parameter as described above
-(@pxref{Shell Parameters}) or an array reference (@pxref{Arrays}).
-The braces are required when @var{parameter}
-is a positional parameter with more than one digit,
-or when @var{parameter} is followed by a character that is not to be
-interpreted as part of its name.
-
-If the first character of @var{parameter} is an exclamation point (!),
-it introduces a level of variable indirection.
-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 is used in the rest of the substitution, rather
-than the value of @var{parameter} itself.
-This is known as @code{indirect expansion}.
-The exceptions to this are the expansions of $@{!@var{prefix}*@}
-and $@{!@var{name}[@@]@}
-described below.
-The exclamation point must immediately follow the left brace in order to
-introduce indirection.
-
-In each of the cases below, @var{word} is subject to tilde expansion,
-parameter expansion, command substitution, and arithmetic expansion.
-
-When not performing substring expansion, using the form described
-below (e.g., @samp{:-}), Bash tests for a parameter that is unset or null.
-Omitting the colon results in a test only for a parameter that is unset.
-Put another way, if the colon is included,
-the operator tests for both @var{parameter}'s existence and that its value
-is not null; if the colon is omitted, the operator tests only for existence.
-
-@table @code
-
-@item $@{@var{parameter}:@minus{}@var{word}@}
-If @var{parameter} is unset or null, the expansion of
-@var{word} is substituted. Otherwise, the value of
-@var{parameter} is substituted.
-
-@item $@{@var{parameter}:=@var{word}@}
-If @var{parameter}
-is unset or null, the expansion of @var{word}
-is assigned to @var{parameter}.
-The value of @var{parameter} is then substituted.
-Positional parameters and special parameters may not be assigned to
-in this way.
-
-@item $@{@var{parameter}:?@var{word}@}
-If @var{parameter}
-is null or unset, the expansion of @var{word} (or a message
-to that effect if @var{word}
-is not present) is written to the standard error and the shell, if it
-is not interactive, exits. Otherwise, the value of @var{parameter} is
-substituted.
-
-@item $@{@var{parameter}:+@var{word}@}
-If @var{parameter}
-is null or unset, nothing is substituted, otherwise the expansion of
-@var{word} is substituted.
-
-@item $@{@var{parameter}:@var{offset}@}
-@itemx $@{@var{parameter}:@var{offset}:@var{length}@}
-This is referred to as Substring Expansion.
-It expands to up to @var{length} characters of the value of @var{parameter}
-starting at the character specified by @var{offset}.
-If @var{parameter} is @samp{@@}, an indexed array subscripted by
-@samp{@@} or @samp{*}, or an associative array name, the results differ as
-described below.
-If @var{length} is omitted, it expands to the substring of the value of
-@var{parameter} starting at the character specified by @var{offset}
-and extending to the end of the value.
-@var{length} and @var{offset} are arithmetic expressions
-(@pxref{Shell Arithmetic}).
-
-If @var{offset} evaluates to a number less than zero, the value
-is used as an offset in characters
-from the end of the value of @var{parameter}.
-If @var{length} evaluates to a number less than zero,
-it is interpreted as an offset in characters
-from the end of the value of @var{parameter} rather than
-a number of characters, and the expansion is the characters between
-@var{offset} and that result.
-Note that a negative offset must be separated from the colon by at least
-one space to avoid being confused with the @samp{:-} expansion.
-
-Here are some examples illustrating substring expansion on parameters and
-subscripted arrays:
-
-@verbatim
-$ string=01234567890abcdefgh
-$ echo ${string:7}
-7890abcdefgh
-$ echo ${string:7:0}
-
-$ echo ${string:7:2}
-78
-$ echo ${string:7:-2}
-7890abcdef
-$ echo ${string: -7}
-bcdefgh
-$ echo ${string: -7:0}
-
-$ echo ${string: -7:2}
-bc
-$ echo ${string: -7:-2}
-bcdef
-$ set -- 01234567890abcdefgh
-$ echo ${1:7}
-7890abcdefgh
-$ echo ${1:7:0}
-
-$ echo ${1:7:2}
-78
-$ echo ${1:7:-2}
-7890abcdef
-$ echo ${1: -7}
-bcdefgh
-$ echo ${1: -7:0}
-
-$ echo ${1: -7:2}
-bc
-$ echo ${1: -7:-2}
-bcdef
-$ array[0]=01234567890abcdefgh
-$ echo ${array[0]:7}
-7890abcdefgh
-$ echo ${array[0]:7:0}
-
-$ echo ${array[0]:7:2}
-78
-$ echo ${array[0]:7:-2}
-7890abcdef
-$ echo ${array[0]: -7}
-bcdefgh
-$ echo ${array[0]: -7:0}
-
-$ echo ${array[0]: -7:2}
-bc
-$ echo ${array[0]: -7:-2}
-bcdef
-@end verbatim
-
-If @var{parameter} is @samp{@@}, the result is @var{length} positional
-parameters beginning at @var{offset}.
-A negative @var{offset} is taken relative to one greater than the greatest
-positional parameter, so an offset of -1 evaluates to the last positional
-parameter.
-It is an expansion error if @var{length} evaluates to a number less than zero.
-
-The following examples illustrate substring expansion using positional
-parameters:
-
-@verbatim
-$ set -- 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
-$ echo ${@:7}
-7 8 9 0 a b c d e f g h
-$ echo ${@:7:0}
-
-$ echo ${@:7:2}
-7 8
-$ echo ${@:7:-2}
-bash: -2: substring expression < 0
-$ echo ${@: -7:2}
-b c
-$ echo ${@:0}
-./bash 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
-$ echo ${@:0:2}
-./bash 1
-$ echo ${@: -7:0}
-
-@end verbatim
-
-If @var{parameter} is an indexed array name subscripted
-by @samp{@@} or @samp{*}, the result is the @var{length}
-members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
-A negative @var{offset} is taken relative to one greater than the maximum
-index of the specified array.
-It is an expansion error if @var{length} evaluates to a number less than zero.
-
-These examples show how you can use substring expansion with indexed
-arrays:
-
-@verbatim
-$ array=(0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h)
-$ echo ${array[@]:7}
-7 8 9 0 a b c d e f g h
-$ echo ${array[@]:7:2}
-7 8
-$ echo ${array[@]: -7:2}
-b c
-$ echo ${array[@]: -7:-2}
-bash: -2: substring expression < 0
-$ echo ${array[@]:0}
-0 1 2 3 4 5 6 7 8 9 0 a b c d e f g h
-$ echo ${array[@]:0:2}
-0 1
-$ echo ${array[@]: -7:0}
-
-@end verbatim
-
-Substring expansion applied to an associative array produces undefined
-results.
-
-Substring indexing is zero-based unless the positional parameters
-are used, in which case the indexing starts at 1 by default.
-If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
-prefixed to the list.
-
-@item $@{!@var{prefix}*@}
-@itemx $@{!@var{prefix}@@@}
-Expands to the names of variables whose names begin with @var{prefix},
-separated by the first character of the @env{IFS} special variable.
-When @samp{@@} is used and the expansion appears within double quotes, each
-variable name expands to a separate word.
-
-@item $@{!@var{name}[@@]@}
-@itemx $@{!@var{name}[*]@}
-If @var{name} is an array variable, expands to the list of array indices
-(keys) assigned in @var{name}.
-If @var{name} is not an array, expands to 0 if @var{name} is set and null
-otherwise.
-When @samp{@@} is used and the expansion appears within double quotes, each
-key expands to a separate word.
-
-@item $@{#@var{parameter}@}
-The length in characters of the expanded value of @var{parameter} is
-substituted.
-If @var{parameter} is @samp{*} or @samp{@@}, the value substituted
-is the number of positional parameters.
-If @var{parameter} is an array name subscripted by @samp{*} or @samp{@@},
-the value substituted is the number of elements in the array.
-If @var{parameter}
-is an indexed array name subscripted by a negative number, that number is
-interpreted as relative to one greater than the maximum index of
-@var{parameter}, so negative indices count back from the end of the
-array, and an index of -1 references the last element.
-
-@item $@{@var{parameter}#@var{word}@}
-@itemx $@{@var{parameter}##@var{word}@}
-The @var{word}
-is expanded to produce a pattern just as in filename
-expansion (@pxref{Filename Expansion}). If the pattern matches
-the beginning of the expanded value of @var{parameter},
-then the result of the expansion is the expanded value of @var{parameter}
-with the shortest matching pattern (the @samp{#} case) or the
-longest matching pattern (the @samp{##} case) deleted.
-If @var{parameter} is @samp{@@} or @samp{*},
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If @var{parameter} is an array variable subscripted with
-@samp{@@} or @samp{*},
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-
-@item $@{@var{parameter}%@var{word}@}
-@itemx $@{@var{parameter}%%@var{word}@}
-The @var{word} is expanded to produce a pattern just as in
-filename expansion.
-If the pattern matches a trailing portion of the expanded value of
-@var{parameter}, then the result of the expansion is the value of
-@var{parameter} with the shortest matching pattern (the @samp{%} case)
-or the longest matching pattern (the @samp{%%} case) deleted.
-If @var{parameter} is @samp{@@} or @samp{*},
-the pattern removal operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If @var{parameter}
-is an array variable subscripted with @samp{@@} or @samp{*},
-the pattern removal operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-
-@item $@{@var{parameter}/@var{pattern}/@var{string}@}
-
-The @var{pattern} is expanded to produce a pattern just as in
-filename expansion.
-@var{Parameter} is expanded and the longest match of @var{pattern}
-against its value is replaced with @var{string}.
-If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are
-replaced with @var{string}. Normally only the first match is replaced.
-If @var{pattern} begins with @samp{#}, it must match at the beginning
-of the expanded value of @var{parameter}.
-If @var{pattern} begins with @samp{%}, it must match at the end
-of the expanded value of @var{parameter}.
-If @var{string} is null, matches of @var{pattern} are deleted
-and the @code{/} following @var{pattern} may be omitted.
-If the @code{nocasematch} shell option
-(see the description of @code{shopt} in @ref{The Shopt Builtin})
-is enabled, the match is performed without regard to the case
-of alphabetic characters.
-If @var{parameter} is @samp{@@} or @samp{*},
-the substitution operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If @var{parameter}
-is an array variable subscripted with @samp{@@} or @samp{*},
-the substitution operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-
-@item $@{@var{parameter}^@var{pattern}@}
-@itemx $@{@var{parameter}^^@var{pattern}@}
-@itemx $@{@var{parameter},@var{pattern}@}
-@itemx $@{@var{parameter},,@var{pattern}@}
-This expansion modifies the case of alphabetic characters in @var{parameter}.
-The @var{pattern} is expanded to produce a pattern just as in
-filename expansion.
-Each character in the expanded value of @var{parameter} is tested against
-@var{pattern}, and, if it matches the pattern, its case is converted.
-The pattern should not attempt to match more than one character.
-The @samp{^} operator converts lowercase letters matching @var{pattern}
-to uppercase; the @samp{,} operator converts matching uppercase letters
-to lowercase.
-The @samp{^^} and @samp{,,} expansions convert each matched character in the
-expanded value; the @samp{^} and @samp{,} expansions match and convert only
-the first character in the expanded value.
-If @var{pattern} is omitted, it is treated like a @samp{?}, which matches
-every character.
-If @var{parameter} is @samp{@@} or @samp{*},
-the case modification operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If @var{parameter}
-is an array variable subscripted with @samp{@@} or @samp{*},
-the case modification operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-
-@item $@{@var{parameter}@@@var{operator}@}
-The expansion is either a transformation of the value of @var{parameter}
-or information about @var{parameter} itself, depending on the value of
-@var{operator}. Each @var{operator} is a single letter:
-
-@table @code
-@item Q
-The expansion is a string that is the value of @var{parameter} quoted in a
-format that can be reused as input.
-@item E
-The expansion is a string that is the value of @var{parameter} with backslash
-escape sequences expanded as with the @code{$'@dots{}'} quoting mechansim.
-@item P
-The expansion is a string that is the result of expanding the value of
-@var{parameter} as if it were a prompt string (@pxref{Controlling the Prompt}).
-@item A
-The expansion is a string in the form of a @code{declare} command that, if
-evaluated, will recreate @var{parameter} with its attributes and value.
-@item a
-The expansion is a string consisting of flag values representing
-@var{parameter}'s attributes.
-@end table
-
-If @var{parameter} is @samp{@@} or @samp{*},
-the operation is applied to each positional
-parameter in turn, and the expansion is the resultant list.
-If @var{parameter}
-is an array variable subscripted with @samp{@@} or @samp{*},
-the operation is applied to each member of the
-array in turn, and the expansion is the resultant list.
-
-The result of the expansion is subject to word splitting and pathname
-expansion as described below.
-@end table
-
-@node Command Substitution
-@subsection Command Substitution
-@cindex command substitution
-
-Command substitution allows the output of a command to replace
-the command itself.
-Command substitution occurs when a command is enclosed as follows:
-@example
-$(@var{command})
-@end example
-@noindent
-or
-@example
-`@var{command}`
-@end example
-
-@noindent
-Bash performs the expansion by executing @var{command} and
-replacing the command substitution with the standard output of the
-command, with any trailing newlines deleted.
-Embedded newlines are not deleted, but they may be removed during
-word splitting.
-The command substitution @code{$(cat @var{file})} can be
-replaced by the equivalent but faster @code{$(< @var{file})}.
-
-When the old-style backquote form of substitution is used,
-backslash retains its literal meaning except when followed by
-@samp{$}, @samp{`}, or @samp{\}.
-The first backquote not preceded by a backslash terminates the
-command substitution.
-When using the @code{$(@var{command})} form, all characters between
-the parentheses make up the command; none are treated specially.
-
-Command substitutions may be nested. To nest when using the backquoted
-form, escape the inner backquotes with backslashes.
-
-If the substitution appears within double quotes, word splitting and
-filename expansion are not performed on the results.
-
-@node Arithmetic Expansion
-@subsection Arithmetic Expansion
-@cindex expansion, arithmetic
-@cindex arithmetic expansion
-
-Arithmetic expansion allows the evaluation of an arithmetic expression
-and the substitution of the result. The format for arithmetic expansion is:
-
-@example
-$(( @var{expression} ))
-@end example
-
-The expression is treated as if it were within double quotes, but
-a double quote inside the parentheses is not treated specially.
-All tokens in the expression undergo parameter and variable expansion,
-command substitution, and quote removal.
-The result is treated as the arithmetic expression to be evaluated.
-Arithmetic expansions may be nested.
-
-The evaluation is performed according to the rules listed below
-(@pxref{Shell Arithmetic}).
-If the expression is invalid, Bash prints a message indicating
-failure to the standard error and no substitution occurs.
-
-@node Process Substitution
-@subsection Process Substitution
-@cindex process substitution
-
-Process substitution is supported on systems that support named
-pipes (@sc{fifo}s) or the @file{/dev/fd} method of naming open files.
-It takes the form of
-@example
-<(@var{list})
-@end example
-@noindent
-or
-@example
->(@var{list})
-@end example
-@noindent
-The process @var{list} is run with its input or output connected to a
-@sc{fifo} or some file in @file{/dev/fd}. The name of this file is
-passed as an argument to the current command as the result of the
-expansion. If the @code{>(@var{list})} form is used, writing to
-the file will provide input for @var{list}. If the
-@code{<(@var{list})} form is used, the file passed as an
-argument should be read to obtain the output of @var{list}.
-Note that no space may appear between the @code{<} or @code{>}
-and the left parenthesis, otherwise the construct would be interpreted
-as a redirection.
-
-When available, process substitution is performed simultaneously with
-parameter and variable expansion, command substitution, and arithmetic
-expansion.
-
-@node Word Splitting
-@subsection Word Splitting
-@cindex word splitting
-
-The shell scans the results of parameter expansion, command substitution,
-and arithmetic expansion that did not occur within double quotes for
-word splitting.
-
-The shell treats each character of @env{$IFS} as a delimiter, and splits
-the results of the other expansions into words using these characters
-as field terminators.
-If @env{IFS} is unset, or its value is exactly @code{<space><tab><newline>},
-the default, then sequences of
-@code{ <space>}, @code{<tab>}, and @code{<newline>}
-at the beginning and end of the results of the previous
-expansions are ignored, and any sequence of @env{IFS}
-characters not at the beginning or end serves to delimit words.
-If @env{IFS} has a value other than the default, then sequences of
-the whitespace characters @code{space} and @code{tab}
-are ignored at the beginning and end of the
-word, as long as the whitespace character is in the
-value of @env{IFS} (an @env{IFS} whitespace character).
-Any character in @env{IFS} that is not @env{IFS}
-whitespace, along with any adjacent @env{IFS}
-whitespace characters, delimits a field. A sequence of @env{IFS}
-whitespace characters is also treated as a delimiter.
-If the value of @env{IFS} is null, no word splitting occurs.
-
-Explicit null arguments (@code{""} or @code{''}) are retained.
-Unquoted implicit null arguments, resulting from the expansion of
-parameters that have no values, are removed.
-If a parameter with no value is expanded within double quotes, a
-null argument results and is retained.
-
-Note that if no expansion occurs, no splitting
-is performed.
-
-@node Filename Expansion
-@subsection Filename Expansion
-@menu
-* Pattern Matching:: How the shell matches patterns.
-@end menu
-@cindex expansion, filename
-@cindex expansion, pathname
-@cindex filename expansion
-@cindex pathname expansion
-
-After word splitting, unless the @option{-f} option has been set
-(@pxref{The Set Builtin}), Bash scans each word for the characters
-@samp{*}, @samp{?}, and @samp{[}.
-If one of these characters appears, then the word is
-regarded as a @var{pattern},
-and replaced with an alphabetically sorted list of
-filenames matching the pattern (@pxref{Pattern Matching}).
-If no matching filenames are found,
-and the shell option @code{nullglob} is disabled, the word is left
-unchanged.
-If the @code{nullglob} option is set, and no matches are found, the word
-is removed.
-If the @code{failglob} shell option is set, and no matches are found,
-an error message is printed and the command is not executed.
-If the shell option @code{nocaseglob} is enabled, the match is performed
-without regard to the case of alphabetic characters.
-
-When a pattern is used for filename expansion, the character @samp{.}
-at the start of a filename or immediately following a slash
-must be matched explicitly, unless the shell option @code{dotglob} is set.
-When matching a filename, the slash character must always be
-matched explicitly.
-In other cases, the @samp{.} character is not treated specially.
-
-See the description of @code{shopt} in @ref{The Shopt Builtin},
-for a description of the @code{nocaseglob}, @code{nullglob},
-@code{failglob}, and @code{dotglob} options.
-
-The @env{GLOBIGNORE}
-shell variable may be used to restrict the set of filenames matching a
-pattern. If @env{GLOBIGNORE}
-is set, each matching filename that also matches one of the patterns in
-@env{GLOBIGNORE} is removed from the list of matches.
-If the @code{nocaseglob} option is set, the matching against the patterns in
-@env{GLOBIGNORE} is performed without regard to case.
-The filenames
-@file{.} and @file{..}
-are always ignored when @env{GLOBIGNORE}
-is set and not null.
-However, setting @env{GLOBIGNORE} to a non-null value has the effect of
-enabling the @code{dotglob}
-shell option, so all other filenames beginning with a
-@samp{.} will match.
-To get the old behavior of ignoring filenames beginning with a
-@samp{.}, make @samp{.*} one of the patterns in @env{GLOBIGNORE}.
-The @code{dotglob} option is disabled when @env{GLOBIGNORE}
-is unset.
-
-@node Pattern Matching
-@subsubsection Pattern Matching
-@cindex pattern matching
-@cindex matching, pattern
-
-Any character that appears in a pattern, other than the special pattern
-characters described below, matches itself.
-The @sc{nul} character may not occur in a pattern.
-A backslash escapes the following character; the
-escaping backslash is discarded when matching.
-The special pattern characters must be quoted if they are to be matched
-literally.
-
-The special pattern characters have the following meanings:
-@table @code
-@item *
-Matches any string, including the null string.
-When the @code{globstar} shell option is enabled, and @samp{*} is used in
-a filename expansion context, two adjacent @samp{*}s used as a single
-pattern will match all files and zero or more directories and
-subdirectories.
-If followed by a @samp{/}, two adjacent @samp{*}s will match only
-directories and subdirectories.
-@item ?
-Matches any single character.
-@item [@dots{}]
-Matches any one of the enclosed characters. A pair of characters
-separated by a hyphen denotes a @var{range expression};
-any character that falls between those two characters, inclusive,
-using the current locale's collating sequence and character set,
-is matched. If the first character following the
-@samp{[} is a @samp{!} or a @samp{^}
-then any character not enclosed is matched. A @samp{@minus{}}
-may be matched by including it as the first or last character
-in the set. A @samp{]} may be matched by including it as the first
-character in the set.
-The sorting order of characters in range expressions is determined by
-the current locale and the values of the
-@env{LC_COLLATE} and @env{LC_ALL} shell variables, if set.
-
-For example, in the default C locale, @samp{[a-dx-z]} is equivalent to
-@samp{[abcdxyz]}. Many locales sort characters in dictionary order, and in
-these locales @samp{[a-dx-z]} is typically not equivalent to @samp{[abcdxyz]};
-it might be equivalent to @samp{[aBbCcDdxXyYz]}, for example. To obtain
-the traditional interpretation of ranges in bracket expressions, you can
-force the use of the C locale by setting the @env{LC_COLLATE} or
-@env{LC_ALL} environment variable to the value @samp{C}, or enable the
-@code{globasciiranges} shell option.
-
-Within @samp{[} and @samp{]}, @var{character classes} can be specified
-using the syntax
-@code{[:}@var{class}@code{:]}, where @var{class} is one of the
-following classes defined in the @sc{posix} standard:
-@example
-alnum alpha ascii blank cntrl digit graph lower
-print punct space upper word xdigit
-@end example
-@noindent
-A character class matches any character belonging to that class.
-The @code{word} character class matches letters, digits, and the character
-@samp{_}.
-
-Within @samp{[} and @samp{]}, an @var{equivalence class} can be
-specified using the syntax @code{[=}@var{c}@code{=]}, which
-matches all characters with the same collation weight (as defined
-by the current locale) as the character @var{c}.
-
-Within @samp{[} and @samp{]}, the syntax @code{[.}@var{symbol}@code{.]}
-matches the collating symbol @var{symbol}.
-@end table
-
-If the @code{extglob} shell option is enabled using the @code{shopt}
-builtin, several extended pattern matching operators are recognized.
-In the following description, a @var{pattern-list} is a list of one
-or more patterns separated by a @samp{|}.
-Composite patterns may be formed using one or more of the following
-sub-patterns:
-
-@table @code
-@item ?(@var{pattern-list})
-Matches zero or one occurrence of the given patterns.
-
-@item *(@var{pattern-list})
-Matches zero or more occurrences of the given patterns.
-
-@item +(@var{pattern-list})
-Matches one or more occurrences of the given patterns.
-
-@item @@(@var{pattern-list})
-Matches one of the given patterns.
-
-@item !(@var{pattern-list})
-Matches anything except one of the given patterns.
-@end table
-
-@node Quote Removal
-@subsection Quote Removal
-
-After the preceding expansions, all unquoted occurrences of the
-characters @samp{\}, @samp{'}, and @samp{"} that did not
-result from one of the above expansions are removed.
-
-@node Redirections
-@section Redirections
-@cindex redirection
-
-Before a command is executed, its input and output
-may be @var{redirected}
-using a special notation interpreted by the shell.
-Redirection allows commands' file handles to be
-duplicated, opened, closed,
-made to refer to different files,
-and can change the files the command reads from and writes to.
-Redirection may also be used to modify file handles in the
-current shell execution environment. The following redirection
-operators may precede or appear anywhere within a
-simple command or may follow a command.
-Redirections are processed in the order they appear, from
-left to right.
-
-Each redirection that may be preceded by a file descriptor number
-may instead be preceded by a word of the form @{@var{varname}@}.
-In this case, for each redirection operator except
->&- and <&-, the shell will allocate a file descriptor greater
-than 10 and assign it to @{@var{varname}@}. If >&- or <&- is preceded
-by @{@var{varname}@}, the value of @var{varname} defines the file
-descriptor to close.
-
-In the following descriptions, if the file descriptor number is
-omitted, and the first character of the redirection operator is
-@samp{<}, the redirection refers to the standard input (file
-descriptor 0). If the first character of the redirection operator
-is @samp{>}, the redirection refers to the standard output (file
-descriptor 1).
-
-The word following the redirection operator in the following
-descriptions, unless otherwise noted, is subjected to brace expansion,
-tilde expansion, parameter expansion, command substitution, arithmetic
-expansion, quote removal, filename expansion, and word splitting.
-If it expands to more than one word, Bash reports an error.
-
-Note that the order of redirections is significant. For example,
-the command
-@example
-ls > @var{dirlist} 2>&1
-@end example
-@noindent
-directs both standard output (file descriptor 1) and standard error
-(file descriptor 2) to the file @var{dirlist}, while the command
-@example
-ls 2>&1 > @var{dirlist}
-@end example
-@noindent
-directs only the standard output to file @var{dirlist},
-because the standard error was made a copy of the standard output
-before the standard output was redirected to @var{dirlist}.
-
-Bash handles several filenames specially when they are used in
-redirections, as described in the following table:
-
-@table @code
-@item /dev/fd/@var{fd}
-If @var{fd} is a valid integer, file descriptor @var{fd} is duplicated.
-
-@item /dev/stdin
-File descriptor 0 is duplicated.
-
-@item /dev/stdout
-File descriptor 1 is duplicated.
-
-@item /dev/stderr
-File descriptor 2 is duplicated.
-
-@item /dev/tcp/@var{host}/@var{port}
-If @var{host} is a valid hostname or Internet address, and @var{port}
-is an integer port number or service name, Bash attempts to open
-the corresponding TCP socket.
-
-@item /dev/udp/@var{host}/@var{port}
-If @var{host} is a valid hostname or Internet address, and @var{port}
-is an integer port number or service name, Bash attempts to open
-the corresponding UDP socket.
-@end table
-
-A failure to open or create a file causes the redirection to fail.
-
-Redirections using file descriptors greater than 9 should be used with
-care, as they may conflict with file descriptors the shell uses
-internally.
-
-@subsection Redirecting Input
-Redirection of input causes the file whose name results from
-the expansion of @var{word}
-to be opened for reading on file descriptor @code{n},
-or the standard input (file descriptor 0) if @code{n}
-is not specified.
-
-The general format for redirecting input is:
-@example
-[@var{n}]<@var{word}
-@end example
-
-@subsection Redirecting Output
-Redirection of output causes the file whose name results from
-the expansion of @var{word}
-to be opened for writing on file descriptor @var{n},
-or the standard output (file descriptor 1) if @var{n}
-is not specified. If the file does not exist it is created;
-if it does exist it is truncated to zero size.
-
-The general format for redirecting output is:
-@example
-[@var{n}]>[|]@var{word}
-@end example
-
-If the redirection operator is @samp{>}, and the @code{noclobber}
-option to the @code{set} builtin has been enabled, the redirection
-will fail if the file whose name results from the expansion of
-@var{word} exists and is a regular file.
-If the redirection operator is @samp{>|}, or the redirection operator is
-@samp{>} and the @code{noclobber} option is not enabled, the redirection
-is attempted even if the file named by @var{word} exists.
-
-@subsection Appending Redirected Output
-Redirection of output in this fashion
-causes the file whose name results from
-the expansion of @var{word}
-to be opened for appending on file descriptor @var{n},
-or the standard output (file descriptor 1) if @var{n}
-is not specified. If the file does not exist it is created.
-
-The general format for appending output is:
-@example
-[@var{n}]>>@var{word}
-@end example
-
-@subsection Redirecting Standard Output and Standard Error
-This construct allows both the
-standard output (file descriptor 1) and
-the standard error output (file descriptor 2)
-to be redirected to the file whose name is the
-expansion of @var{word}.
-
-There are two formats for redirecting standard output and
-standard error:
-@example
-&>@var{word}
-@end example
-@noindent
-and
-@example
->&@var{word}
-@end example
-@noindent
-Of the two forms, the first is preferred.
-This is semantically equivalent to
-@example
->@var{word} 2>&1
-@end example
-When using the second form, @var{word} may not expand to a number or
-@samp{-}. If it does, other redirection operators apply
-(see Duplicating File Descriptors below) for compatibility reasons.
-
-@subsection Appending Standard Output and Standard Error
-This construct allows both the
-standard output (file descriptor 1) and
-the standard error output (file descriptor 2)
-to be appended to the file whose name is the
-expansion of @var{word}.
-
-The format for appending standard output and standard error is:
-@example
-&>>@var{word}
-@end example
-@noindent
-This is semantically equivalent to
-@example
->>@var{word} 2>&1
-@end example
-(see Duplicating File Descriptors below).
-
-@subsection Here Documents
-This type of redirection instructs the shell to read input from the
-current source until a line containing only @var{word}
-(with no trailing blanks) is seen. All of
-the lines read up to that point are then used as the standard
-input (or file descriptor @var{n} if @var{n} is specified) for a command.
-
-The format of here-documents is:
-@example
-[@var{n}]<<[@minus{}]@var{word}
- @var{here-document}
-@var{delimiter}
-@end example
-
-No parameter and variable expansion, command substitution,
-arithmetic expansion, or filename expansion is performed on
-@var{word}. If any characters in @var{word} are quoted, the
-@var{delimiter} is the result of quote removal on @var{word},
-and the lines in the here-document are not expanded.
-If @var{word} is unquoted,
-all lines of the here-document are subjected to
-parameter expansion, command substitution, and arithmetic expansion,
-the character sequence @code{\newline} is ignored, and @samp{\}
-must be used to quote the characters
-@samp{\}, @samp{$}, and @samp{`}.
-
-If the redirection operator is @samp{<<-},
-then all leading tab characters are stripped from input lines and the
-line containing @var{delimiter}.
-This allows here-documents within shell scripts to be indented in a
-natural fashion.
-
-@subsection Here Strings
-A variant of here documents, the format is:
-@example
-[@var{n}]<<< @var{word}
-@end example
-
-The @var{word} undergoes
-brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote removal.
-Pathname expansion and word splitting are not performed.
-The result is supplied as a single string to the command on its
-standard input (or file descriptor @var{n} if @var{n} is specified).
-
-@subsection Duplicating File Descriptors
-The redirection operator
-@example
-[@var{n}]<&@var{word}
-@end example
-@noindent
-is used to duplicate input file descriptors.
-If @var{word}
-expands to one or more digits, the file descriptor denoted by @var{n}
-is made to be a copy of that file descriptor.
-If the digits in @var{word} do not specify a file descriptor open for
-input, a redirection error occurs.
-If @var{word}
-evaluates to @samp{-}, file descriptor @var{n} is closed.
-If @var{n} is not specified, the standard input (file descriptor 0) is used.
-
-The operator
-@example
-[@var{n}]>&@var{word}
-@end example
-@noindent
-is used similarly to duplicate output file descriptors. If
-@var{n} is not specified, the standard output (file descriptor 1) is used.
-If the digits in @var{word} do not specify a file descriptor open for
-output, a redirection error occurs.
-If @var{word}
-evaluates to @samp{-}, file descriptor @var{n} is closed.
-As a special case, if @var{n} is omitted, and @var{word} does not
-expand to one or more digits or @samp{-}, the standard output and standard
-error are redirected as described previously.
-
-@subsection Moving File Descriptors
-The redirection operator
-@example
-[@var{n}]<&@var{digit}-
-@end example
-@noindent
-moves the file descriptor @var{digit} to file descriptor @var{n},
-or the standard input (file descriptor 0) if @var{n} is not specified.
-@var{digit} is closed after being duplicated to @var{n}.
-
-Similarly, the redirection operator
-@example
-[@var{n}]>&@var{digit}-
-@end example
-@noindent
-moves the file descriptor @var{digit} to file descriptor @var{n},
-or the standard output (file descriptor 1) if @var{n} is not specified.
-
-@subsection Opening File Descriptors for Reading and Writing
-The redirection operator
-@example
-[@var{n}]<>@var{word}
-@end example
-@noindent
-causes the file whose name is the expansion of @var{word}
-to be opened for both reading and writing on file descriptor
-@var{n}, or on file descriptor 0 if @var{n}
-is not specified. If the file does not exist, it is created.
-
-@node Executing Commands
-@section Executing Commands
-
-@menu
-* Simple Command Expansion:: How Bash expands simple commands before
- executing them.
-* Command Search and Execution:: How Bash finds commands and runs them.
-* Command Execution Environment:: The environment in which Bash
- executes commands that are not
- shell builtins.
-* Environment:: The environment given to a command.
-* Exit Status:: The status returned by commands and how Bash
- interprets it.
-* Signals:: What happens when Bash or a command it runs
- receives a signal.
-@end menu
-
-@node Simple Command Expansion
-@subsection Simple Command Expansion
-@cindex command expansion
-
-When a simple command is executed, the shell performs the following
-expansions, assignments, and redirections, from left to right.
-
-@enumerate
-@item
-The words that the parser has marked as variable assignments (those
-preceding the command name) and redirections are saved for later
-processing.
-
-@item
-The words that are not variable assignments or redirections are
-expanded (@pxref{Shell Expansions}).
-If any words remain after expansion, the first word
-is taken to be the name of the command and the remaining words are
-the arguments.
-
-@item
-Redirections are performed as described above (@pxref{Redirections}).
-
-@item
-The text after the @samp{=} in each variable assignment undergoes tilde
-expansion, parameter expansion, command substitution, arithmetic expansion,
-and quote removal before being assigned to the variable.
-@end enumerate
-
-If no command name results, the variable assignments affect the current
-shell environment. Otherwise, the variables are added to the environment
-of the executed command and do not affect the current shell environment.
-If any of the assignments attempts to assign a value to a readonly variable,
-an error occurs, and the command exits with a non-zero status.
-
-If no command name results, redirections are performed, but do not
-affect the current shell environment. A redirection error causes the
-command to exit with a non-zero status.
-
-If there is a command name left after expansion, execution proceeds as
-described below. Otherwise, the command exits. If one of the expansions
-contained a command substitution, the exit status of the command is
-the exit status of the last command substitution performed. If there
-were no command substitutions, the command exits with a status of zero.
-
-@node Command Search and Execution
-@subsection Command Search and Execution
-@cindex command execution
-@cindex command search
-
-After a command has been split into words, if it results in a
-simple command and an optional list of arguments, the following
-actions are taken.
-
-@enumerate
-@item
-If the command name contains no slashes, the shell attempts to
-locate it. If there exists a shell function by that name, that
-function is invoked as described in @ref{Shell Functions}.
-
-@item
-If the name does not match a function, the shell searches for
-it in the list of shell builtins. If a match is found, that
-builtin is invoked.
-
-@item
-If the name is neither a shell function nor a builtin,
-and contains no slashes, Bash searches each element of
-@env{$PATH} for a directory containing an executable file
-by that name. Bash uses a hash table to remember the full
-pathnames of executable files to avoid multiple @env{PATH} searches
-(see the description of @code{hash} in @ref{Bourne Shell Builtins}).
-A full search of the directories in @env{$PATH}
-is performed only if the command is not found in the hash table.
-If the search is unsuccessful, the shell searches for a defined shell
-function named @code{command_not_found_handle}.
-If that function exists, it is invoked with the original command and
-the original command's arguments as its arguments, and the function's
-exit status becomes the exit status of the shell.
-If that function is not defined, the shell prints an error
-message and returns an exit status of 127.
-
-@item
-If the search is successful, or if the command name contains
-one or more slashes, the shell executes the named program in
-a separate execution environment.
-Argument 0 is set to the name given, and the remaining arguments
-to the command are set to the arguments supplied, if any.
-
-@item
-If this execution fails because the file is not in executable
-format, and the file is not a directory, it is assumed to be a
-@var{shell script} and the shell executes it as described in
-@ref{Shell Scripts}.
-
-@item
-If the command was not begun asynchronously, the shell waits for
-the command to complete and collects its exit status.
-
-@end enumerate
-
-@node Command Execution Environment
-@subsection Command Execution Environment
-@cindex execution environment
-
-The shell has an @var{execution environment}, which consists of the
-following:
-
-@itemize @bullet
-@item
-open files inherited by the shell at invocation, as modified by
-redirections supplied to the @code{exec} builtin
-
-@item
-the current working directory as set by @code{cd}, @code{pushd}, or
-@code{popd}, or inherited by the shell at invocation
-
-@item
-the file creation mode mask as set by @code{umask} or inherited from
-the shell's parent
-
-@item
-current traps set by @code{trap}
-
-@item
-shell parameters that are set by variable assignment or with @code{set}
-or inherited from the shell's parent in the environment
-
-@item
-shell functions defined during execution or inherited from the shell's
-parent in the environment
-
-@item
-options enabled at invocation (either by default or with command-line
-arguments) or by @code{set}
-
-@item
-options enabled by @code{shopt} (@pxref{The Shopt Builtin})
-
-@item
-shell aliases defined with @code{alias} (@pxref{Aliases})
-
-@item
-various process @sc{id}s, including those of background jobs
-(@pxref{Lists}), the value of @code{$$}, and the value of
-@env{$PPID}
-
-@end itemize
-
-When a simple command other than a builtin or shell function
-is to be executed, it
-is invoked in a separate execution environment that consists of
-the following. Unless otherwise noted, the values are inherited
-from the shell.
-
-@itemize @bullet
-@item
-the shell's open files, plus any modifications and additions specified
-by redirections to the command
-
-@item
-the current working directory
-
-@item
-the file creation mode mask
-
-@item
-shell variables and functions marked for export, along with variables
-exported for the command, passed in the environment (@pxref{Environment})
-
-@item
-traps caught by the shell are reset to the values inherited from the
-shell's parent, and traps ignored by the shell are ignored
-
-@end itemize
-
-A command invoked in this separate environment cannot affect the
-shell's execution environment.
-
-Command substitution, commands grouped with parentheses,
-and asynchronous commands are invoked in a
-subshell environment that is a duplicate of the shell environment,
-except that traps caught by the shell are reset to the values
-that the shell inherited from its parent at invocation. Builtin
-commands that are invoked as part of a pipeline are also executed
-in a subshell environment. Changes made to the subshell environment
-cannot affect the shell's execution environment.
-
-Subshells spawned to execute command substitutions inherit the value of
-the @option{-e} option from the parent shell. When not in @sc{posix} mode,
-Bash clears the @option{-e} option in such subshells.
-
-If a command is followed by a @samp{&} and job control is not active, the
-default standard input for the command is the empty file @file{/dev/null}.
-Otherwise, the invoked command inherits the file descriptors of the calling
-shell as modified by redirections.
-
-@node Environment
-@subsection Environment
-@cindex environment
-
-When a program is invoked it is given an array of strings
-called the @var{environment}.
-This is a list of name-value pairs, of the form @code{name=value}.
-
-Bash provides several ways to manipulate the environment.
-On invocation, the shell scans its own environment and
-creates a parameter for each name found, automatically marking
-it for @var{export}
-to child processes. Executed commands inherit the environment.
-The @code{export} and @samp{declare -x}
-commands allow parameters and functions to be added to and
-deleted from the environment. If the value of a parameter
-in the environment is modified, the new value becomes part
-of the environment, replacing the old. The environment
-inherited by any executed command consists of the shell's
-initial environment, whose values may be modified in the shell,
-less any pairs removed by the @code{unset} and @samp{export -n}
-commands, plus any additions via the @code{export} and
-@samp{declare -x} commands.
-
-The environment for any simple command
-or function may be augmented temporarily by prefixing it with
-parameter assignments, as described in @ref{Shell Parameters}.
-These assignment statements affect only the environment seen
-by that command.
-
-If the @option{-k} option is set (@pxref{The Set Builtin}), then all
-parameter assignments are placed in the environment for a command,
-not just those that precede the command name.
-
-When Bash invokes an external command, the variable @samp{$_}
-is set to the full pathname of the command and passed to that
-command in its environment.
-
-@node Exit Status
-@subsection Exit Status
-@cindex exit status
-
-The exit status of an executed command is the value returned by the
-@var{waitpid} system call or equivalent function. Exit statuses
-fall between 0 and 255, though, as explained below, the shell may
-use values above 125 specially. Exit statuses from shell builtins and
-compound commands are also limited to this range. Under certain
-circumstances, the shell will use special values to indicate specific
-failure modes.
-
-For the shell's purposes, a command which exits with a
-zero exit status has succeeded.
-A non-zero exit status indicates failure.
-This seemingly counter-intuitive scheme is used so there
-is one well-defined way to indicate success and a variety of
-ways to indicate various failure modes.
-When a command terminates on a fatal signal whose number is @var{N},
-Bash uses the value 128+@var{N} as the exit status.
-
-If a command is not found, the child process created to
-execute it returns a status of 127. If a command is found
-but is not executable, the return status is 126.
-
-If a command fails because of an error during expansion or redirection,
-the exit status is greater than zero.
-
-The exit status is used by the Bash conditional commands
-(@pxref{Conditional Constructs}) and some of the list
-constructs (@pxref{Lists}).
-
-All of the Bash builtins return an exit status of zero if they succeed
-and a non-zero status on failure, so they may be used by the
-conditional and list constructs.
-All builtins return an exit status of 2 to indicate incorrect usage,
-generally invalid options or missing arguments.
-
-@node Signals
-@subsection Signals
-@cindex signal handling
-
-When Bash is interactive, in the absence of any traps, it ignores
-@code{SIGTERM} (so that @samp{kill 0} does not kill an interactive shell),
-and @code{SIGINT}
-is caught and handled (so that the @code{wait} builtin is interruptible).
-When Bash receives a @code{SIGINT}, it breaks out of any executing loops.
-In all cases, Bash ignores @code{SIGQUIT}.
-If job control is in effect (@pxref{Job Control}), Bash
-ignores @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
-
-Non-builtin commands started by Bash have signal handlers set to the
-values inherited by the shell from its parent.
-When job control is not in effect, asynchronous commands
-ignore @code{SIGINT} and @code{SIGQUIT} in addition to these inherited
-handlers.
-Commands run as a result of
-command substitution ignore the keyboard-generated job control signals
-@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
-
-The shell exits by default upon receipt of a @code{SIGHUP}.
-Before exiting, an interactive shell resends the @code{SIGHUP} to
-all jobs, running or stopped.
-Stopped jobs are sent @code{SIGCONT} to ensure that they receive
-the @code{SIGHUP}.
-To prevent the shell from sending the @code{SIGHUP} signal to a
-particular job, it should be removed
-from the jobs table with the @code{disown}
-builtin (@pxref{Job Control Builtins}) or marked
-to not receive @code{SIGHUP} using @code{disown -h}.
-
-If the @code{huponexit} shell option has been set with @code{shopt}
-(@pxref{The Shopt Builtin}), Bash sends a @code{SIGHUP} to all jobs when
-an interactive login shell exits.
-
-If Bash is waiting for a command to complete and receives a signal
-for which a trap has been set, the trap will not be executed until
-the command completes.
-When Bash is waiting for an asynchronous
-command via the @code{wait} builtin, the reception of a signal for
-which a trap has been set will cause the @code{wait} builtin to return
-immediately with an exit status greater than 128, immediately after
-which the trap is executed.
-
-@node Shell Scripts
-@section Shell Scripts
-@cindex shell script
-
-A shell script is a text file containing shell commands. When such
-a file is used as the first non-option argument when invoking Bash,
-and neither the @option{-c} nor @option{-s} option is supplied
-(@pxref{Invoking Bash}),
-Bash reads and executes commands from the file, then exits. This
-mode of operation creates a non-interactive shell. The shell first
-searches for the file in the current directory, and looks in the
-directories in @env{$PATH} if not found there.
-
-When Bash runs
-a shell script, it sets the special parameter @code{0} to the name
-of the file, rather than the name of the shell, and the positional
-parameters are set to the remaining arguments, if any are given.
-If no additional arguments are supplied, the positional parameters
-are unset.
-
-A shell script may be made executable by using the @code{chmod} command
-to turn on the execute bit. When Bash finds such a file while
-searching the @env{$PATH} for a command, it spawns a subshell to
-execute it. In other words, executing
-@example
-filename @var{arguments}
-@end example
-@noindent
-is equivalent to executing
-@example
-bash filename @var{arguments}
-@end example
-
-@noindent
-if @code{filename} is an executable shell script.
-This subshell reinitializes itself, so that the effect is as if a
-new shell had been invoked to interpret the script, with the
-exception that the locations of commands remembered by the parent
-(see the description of @code{hash} in @ref{Bourne Shell Builtins})
-are retained by the child.
-
-Most versions of Unix make this a part of the operating system's command
-execution mechanism. If the first line of a script begins with
-the two characters @samp{#!}, the remainder of the line specifies
-an interpreter for the program.
-Thus, you can specify Bash, @code{awk}, Perl, or some other
-interpreter and write the rest of the script file in that language.
-
-The arguments to the interpreter
-consist of a single optional argument following the interpreter
-name on the first line of the script file, followed by the name of
-the script file, followed by the rest of the arguments. Bash
-will perform this action on operating systems that do not handle it
-themselves. Note that some older versions of Unix limit the interpreter
-name and argument to a maximum of 32 characters.
-
-Bash scripts often begin with @code{#! /bin/bash} (assuming that
-Bash has been installed in @file{/bin}), since this ensures that
-Bash will be used to interpret the script, even if it is executed
-under another shell.
-
-@node Shell Builtin Commands
-@chapter Shell Builtin Commands
-
-@menu
-* Bourne Shell Builtins:: Builtin commands inherited from the Bourne
- Shell.
-* Bash Builtins:: Table of builtins specific to Bash.
-* Modifying Shell Behavior:: Builtins to modify shell attributes and
- optional behavior.
-* Special Builtins:: Builtin commands classified specially by
- POSIX.
-@end menu
-
-Builtin commands are contained within the shell itself.
-When the name of a builtin command is used as the first word of
-a simple command (@pxref{Simple Commands}), the shell executes
-the command directly, without invoking another program.
-Builtin commands are necessary to implement functionality impossible
-or inconvenient to obtain with separate utilities.
-
-This section briefly describes the builtins which Bash inherits from
-the Bourne Shell, as well as the builtin commands which are unique
-to or have been extended in Bash.
-
-Several builtin commands are described in other chapters: builtin
-commands which provide the Bash interface to the job control
-facilities (@pxref{Job Control Builtins}), the directory stack
-(@pxref{Directory Stack Builtins}), the command history
-(@pxref{Bash History Builtins}), and the programmable completion
-facilities (@pxref{Programmable Completion Builtins}).
-
-Many of the builtins have been extended by @sc{posix} or Bash.
-
-Unless otherwise noted, each builtin command documented as accepting
-options preceded by @samp{-} accepts @samp{--}
-to signify the end of the options.
-The @code{:}, @code{true}, @code{false}, and @code{test}
-builtins do not accept options and do not treat @samp{--} specially.
-The @code{exit}, @code{logout}, @code{break}, @code{continue}, @code{let},
-and @code{shift} builtins accept and process arguments beginning
-with @samp{-} without requiring @samp{--}.
-Other builtins that accept arguments but are not specified as accepting
-options interpret arguments beginning with @samp{-} as invalid options and
-require @samp{--} to prevent this interpretation.
-
-@node Bourne Shell Builtins
-@section Bourne Shell Builtins
-
-The following shell builtin commands are inherited from the Bourne Shell.
-These commands are implemented as specified by the @sc{posix} standard.
-
-@table @code
-@item : @r{(a colon)}
-@btindex :
-@example
-: [@var{arguments}]
-@end example
-
-Do nothing beyond expanding @var{arguments} and performing redirections.
-The return status is zero.
-
-@item . @r{(a period)}
-@btindex .
-@example
-. @var{filename} [@var{arguments}]
-@end example
-
-Read and execute commands from the @var{filename} argument in the
-current shell context. If @var{filename} does not contain a slash,
-the @env{PATH} variable is used to find @var{filename}.
-When Bash is not in @sc{posix} mode, the current directory is searched
-if @var{filename} is not found in @env{$PATH}.
-If any @var{arguments} are supplied, they become the positional
-parameters when @var{filename} is executed. Otherwise the positional
-parameters are unchanged.
-The return status is the exit status of the last command executed, or
-zero if no commands are executed. If @var{filename} is not found, or
-cannot be read, the return status is non-zero.
-This builtin is equivalent to @code{source}.
-
-@item break
-@btindex break
-@example
-break [@var{n}]
-@end example
-
-Exit from a @code{for}, @code{while}, @code{until}, or @code{select} loop.
-If @var{n} is supplied, the @var{n}th enclosing loop is exited.
-@var{n} must be greater than or equal to 1.
-The return status is zero unless @var{n} is not greater than or equal to 1.
-
-@item cd
-@btindex cd
-@example
-cd [-L|[-P [-e]] [-@@] [@var{directory}]
-@end example
-
-Change the current working directory to @var{directory}.
-If @var{directory} is not supplied, the value of the @env{HOME}
-shell variable is used.
-Any additional arguments following @var{directory} are ignored.
-If the shell variable
-@env{CDPATH} exists, it is used as a search path:
-each directory name in @env{CDPATH} is searched for
-@var{directory}, with alternative directory names in @env{CDPATH}
-separated by a colon (@samp{:}).
-If @var{directory} begins with a slash, @env{CDPATH} is not used.
-
-The @option{-P} option means to not follow symbolic links: symbolic links
-are resolved while @code{cd} is traversing @var{directory} and before
-processing an instance of @samp{..} in @var{directory}.
-
-By default, or when the @option{-L} option is supplied, symbolic links
-in @var{directory} are resolved after @code{cd} processes an instance
-of @samp{..} in @var{directory}.
-
-If @samp{..} appears in @var{directory}, it is processed by removing the
-immediately preceding pathname component, back to a slash or the beginning
-of @var{directory}.
-
-If the @option{-e} option is supplied with @option{-P}
-and the current working directory cannot be successfully determined
-after a successful directory change, @code{cd} will return an unsuccessful
-status.
-
-On systems that support it, the @option{-@@} option presents the extended
-attributes associated with a file as a directory.
-
-If @var{directory} is @samp{-}, it is converted to @env{$OLDPWD}
-before the directory change is attempted.
-
-If a non-empty directory name from @env{CDPATH} is used, or if
-@samp{-} is the first argument, and the directory change is
-successful, the absolute pathname of the new working directory is
-written to the standard output.
-
-The return status is zero if the directory is successfully changed,
-non-zero otherwise.
-
-@item continue
-@btindex continue
-@example
-continue [@var{n}]
-@end example
-
-Resume the next iteration of an enclosing @code{for}, @code{while},
-@code{until}, or @code{select} loop.
-If @var{n} is supplied, the execution of the @var{n}th enclosing loop
-is resumed.
-@var{n} must be greater than or equal to 1.
-The return status is zero unless @var{n} is not greater than or equal to 1.
-
-@item eval
-@btindex eval
-@example
-eval [@var{arguments}]
-@end example
-
-The arguments are concatenated together into a single command, which is
-then read and executed, and its exit status returned as the exit status
-of @code{eval}.
-If there are no arguments or only empty arguments, the return status is
-zero.
-
-@item exec
-@btindex exec
-@example
-exec [-cl] [-a @var{name}] [@var{command} [@var{arguments}]]
-@end example
-
-If @var{command}
-is supplied, it replaces the shell without creating a new process.
-If the @option{-l} option is supplied, the shell places a dash at the
-beginning of the zeroth argument passed to @var{command}.
-This is what the @code{login} program does.
-The @option{-c} option causes @var{command} to be executed with an empty
-environment.
-If @option{-a} is supplied, the shell passes @var{name} as the zeroth
-argument to @var{command}.
-If @var{command}
-cannot be executed for some reason, a non-interactive shell exits,
-unless the @code{execfail} shell option
-is enabled. In that case, it returns failure.
-An interactive shell returns failure if the file cannot be executed.
-If no @var{command} is specified, redirections may be used to affect
-the current shell environment. If there are no redirection errors, the
-return status is zero; otherwise the return status is non-zero.
-
-@item exit
-@btindex exit
-@example
-exit [@var{n}]
-@end example
-
-Exit the shell, returning a status of @var{n} to the shell's parent.
-If @var{n} is omitted, the exit status is that of the last command executed.
-Any trap on @code{EXIT} is executed before the shell terminates.
-
-@item export
-@btindex export
-@example
-export [-fn] [-p] [@var{name}[=@var{value}]]
-@end example
-
-Mark each @var{name} to be passed to child processes
-in the environment. If the @option{-f} option is supplied, the @var{name}s
-refer to shell functions; otherwise the names refer to shell variables.
-The @option{-n} option means to no longer mark each @var{name} for export.
-If no @var{names} are supplied, or if the @option{-p} option is given, a
-list of names of all exported variables is displayed.
-The @option{-p} option displays output in a form that may be reused as input.
-If a variable name is followed by =@var{value}, the value of
-the variable is set to @var{value}.
-
-The return status is zero unless an invalid option is supplied, one of
-the names is not a valid shell variable name, or @option{-f} is supplied
-with a name that is not a shell function.
-
-@item getopts
-@btindex getopts
-@example
-getopts @var{optstring} @var{name} [@var{args}]
-@end example
-
-@code{getopts} is used by shell scripts to parse positional parameters.
-@var{optstring} contains the option characters to be recognized; if a
-character is followed by a colon, the option is expected to have an
-argument, which should be separated from it by whitespace.
-The colon (@samp{:}) and question mark (@samp{?}) may not be
-used as option characters.
-Each time it is invoked, @code{getopts}
-places the next option in the shell variable @var{name}, initializing
-@var{name} if it does not exist,
-and the index of the next argument to be processed into the
-variable @env{OPTIND}.
-@env{OPTIND} is initialized to 1 each time the shell or a shell script
-is invoked.
-When an option requires an argument,
-@code{getopts} places that argument into the variable @env{OPTARG}.
-The shell does not reset @env{OPTIND} automatically; it must be manually
-reset between multiple calls to @code{getopts} within the same shell
-invocation if a new set of parameters is to be used.
-
-When the end of options is encountered, @code{getopts} exits with a
-return value greater than zero.
-@env{OPTIND} is set to the index of the first non-option argument,
-and @var{name} is set to @samp{?}.
-
-@code{getopts}
-normally parses the positional parameters, but if more arguments are
-given in @var{args}, @code{getopts} parses those instead.
-
-@code{getopts} can report errors in two ways. If the first character of
-@var{optstring} is a colon, @var{silent}
-error reporting is used. In normal operation, diagnostic messages
-are printed when invalid options or missing option arguments are
-encountered.
-If the variable @env{OPTERR}
-is set to 0, no error messages will be displayed, even if the first
-character of @code{optstring} is not a colon.
-
-If an invalid option is seen,
-@code{getopts} places @samp{?} into @var{name} and, if not silent,
-prints an error message and unsets @env{OPTARG}.
-If @code{getopts} is silent, the option character found is placed in
-@env{OPTARG} and no diagnostic message is printed.
-
-If a required argument is not found, and @code{getopts}
-is not silent, a question mark (@samp{?}) is placed in @var{name},
-@code{OPTARG} is unset, and a diagnostic message is printed.
-If @code{getopts} is silent, then a colon (@samp{:}) is placed in
-@var{name} and @env{OPTARG} is set to the option character found.
-
-@item hash
-@btindex hash
-@example
-hash [-r] [-p @var{filename}] [-dt] [@var{name}]
-@end example
-
-Each time @code{hash} is invoked, it remembers the full pathnames of the
-commands specified as @var{name} arguments,
-so they need not be searched for on subsequent invocations.
-The commands are found by searching through the directories listed in
-@env{$PATH}.
-Any previously-remembered pathname is discarded.
-The @option{-p} option inhibits the path search, and @var{filename} is
-used as the location of @var{name}.
-The @option{-r} option causes the shell to forget all remembered locations.
-The @option{-d} option causes the shell to forget the remembered location
-of each @var{name}.
-If the @option{-t} option is supplied, the full pathname to which each
-@var{name} corresponds is printed. If multiple @var{name} arguments are
-supplied with @option{-t} the @var{name} is printed before the hashed
-full pathname.
-The @option{-l} option causes output to be displayed in a format
-that may be reused as input.
-If no arguments are given, or if only @option{-l} is supplied,
-information about remembered commands is printed.
-The return status is zero unless a @var{name} is not found or an invalid
-option is supplied.
-
-@item pwd
-@btindex pwd
-@example
-pwd [-LP]
-@end example
-
-Print the absolute pathname of the current working directory.
-If the @option{-P} option is supplied, the pathname printed will not
-contain symbolic links.
-If the @option{-L} option is supplied, the pathname printed may contain
-symbolic links.
-The return status is zero unless an error is encountered while
-determining the name of the current directory or an invalid option
-is supplied.
-
-@item readonly
-@btindex readonly
-@example
-readonly [-aAf] [-p] [@var{name}[=@var{value}]] @dots{}
-@end example
-
-Mark each @var{name} as readonly.
-The values of these names may not be changed by subsequent assignment.
-If the @option{-f} option is supplied, each @var{name} refers to a shell
-function.
-The @option{-a} option means each @var{name} refers to an indexed
-array variable; the @option{-A} option means each @var{name} refers
-to an associative array variable.
-If both options are supplied, @option{-A} takes precedence.
-If no @var{name} arguments are given, or if the @option{-p}
-option is supplied, a list of all readonly names is printed.
-The other options may be used to restrict the output to a subset of
-the set of readonly names.
-The @option{-p} option causes output to be displayed in a format that
-may be reused as input.
-If a variable name is followed by =@var{value}, the value of
-the variable is set to @var{value}.
-The return status is zero unless an invalid option is supplied, one of
-the @var{name} arguments is not a valid shell variable or function name,
-or the @option{-f} option is supplied with a name that is not a shell function.
-
-@item return
-@btindex return
-@example
-return [@var{n}]
-@end example
-
-Cause a shell function to stop executing and return the value @var{n}
-to its caller.
-If @var{n} is not supplied, the return value is the exit status of the
-last command executed in the function.
-If @code{return} is executed by a trap handler, the last command used to
-determine the status is the last command executed before the trap handler.
-if @code{return} is executed during a @code{DEBUG} trap, the last command
-used to determine the status is the last command executed by the trap
-handler before @code{return} was invoked.
-@code{return} may also be used to terminate execution of a script
-being executed with the @code{.} (@code{source}) builtin,
-returning either @var{n} or
-the exit status of the last command executed within the script as the exit
-status of the script.
-If @var{n} is supplied, the return value is its least significant
-8 bits.
-Any command associated with the @code{RETURN} trap is executed
-before execution resumes after the function or script.
-The return status is non-zero if @code{return} is supplied a non-numeric
-argument or is used outside a function
-and not during the execution of a script by @code{.} or @code{source}.
-
-@item shift
-@btindex shift
-@example
-shift [@var{n}]
-@end example
-
-Shift the positional parameters to the left by @var{n}.
-The positional parameters from @var{n}+1 @dots{} @code{$#} are
-renamed to @code{$1} @dots{} @code{$#}-@var{n}.
-Parameters represented by the numbers @code{$#} to @code{$#}-@var{n}+1
-are unset.
-@var{n} must be a non-negative number less than or equal to @code{$#}.
-If @var{n} is zero or greater than @code{$#}, the positional parameters
-are not changed.
-If @var{n} is not supplied, it is assumed to be 1.
-The return status is zero unless @var{n} is greater than @code{$#} or
-less than zero, non-zero otherwise.
-
-@item test
-@itemx [
-@btindex test
-@btindex [
-@example
-test @var{expr}
-@end example
-
-Evaluate a conditional express
-ion @var{expr} and return a status of 0
-(true) or 1 (false).
-Each operator and operand must be a separate argument.
-Expressions are composed of the primaries described below in
-@ref{Bash Conditional Expressions}.
-@code{test} does not accept any options, nor does it accept and ignore
-an argument of @option{--} as signifying the end of options.
-
-When the @code{[} form is used, the last argument to the command must
-be a @code{]}.
-
-Expressions may be combined using the following operators, listed in
-decreasing order of precedence.
-The evaluation depends on the number of arguments; see below.
-Operator precedence is used when there are five or more arguments.
-
-@table @code
-@item ! @var{expr}
-True if @var{expr} is false.
-
-@item ( @var{expr} )
-Returns the value of @var{expr}.
-This may be used to override the normal precedence of operators.
-
-@item @var{expr1} -a @var{expr2}
-True if both @var{expr1} and @var{expr2} are true.
-
-@item @var{expr1} -o @var{expr2}
-True if either @var{expr1} or @var{expr2} is true.
-@end table
-
-The @code{test} and @code{[} builtins evaluate conditional
-expressions using a set of rules based on the number of arguments.
-
-@table @asis
-@item 0 arguments
-The expression is false.
-
-@item 1 argument
-The expression is true if and only if the argument is not null.
-
-@item 2 arguments
-If the first argument is @samp{!}, the expression is true if and
-only if the second argument is null.
-If the first argument is one of the unary conditional operators
-(@pxref{Bash Conditional Expressions}), the expression
-is true if the unary test is true.
-If the first argument is not a valid unary operator, the expression is
-false.
-
-@item 3 arguments
-The following conditions are applied in the order listed.
-If the second argument is one of the binary conditional
-operators (@pxref{Bash Conditional Expressions}), the
-result of the expression is the result of the binary test using the
-first and third arguments as operands.
-The @samp{-a} and @samp{-o} operators are considered binary operators
-when there are three arguments.
-If the first argument is @samp{!}, the value is the negation of
-the two-argument test using the second and third arguments.
-If the first argument is exactly @samp{(} and the third argument is
-exactly @samp{)}, the result is the one-argument test of the second
-argument.
-Otherwise, the expression is false.
-
-@item 4 arguments
-If the first argument is @samp{!}, the result is the negation of
-the three-argument expression composed of the remaining arguments.
-Otherwise, the expression is parsed and evaluated according to
-precedence using the rules listed above.
-
-@item 5 or more arguments
-The expression is parsed and evaluated according to precedence
-using the rules listed above.
-@end table
-
-When used with @code{test} or @samp{[}, the @samp{<} and @samp{>}
-operators sort lexicographically using ASCII ordering.
-
-@item times
-@btindex times
-@example
-times
-@end example
-
-Print out the user and system times used by the shell and its children.
-The return status is zero.
-
-@item trap
-@btindex trap
-@example
-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 (and
-there is a single @var{sigspec}) or
-equal to @samp{-}, each specified signal's disposition is reset
-to the value it had when the shell was started.
-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 not present and @option{-p} has been supplied,
-the shell displays the trap commands associated with each @var{sigspec}.
-If no arguments are supplied, or
-only @option{-p} is given, @code{trap} prints the list of commands
-associated with each signal number in a form that may be reused as
-shell input.
-The @option{-l} option causes the shell to print a list of signal names
-and their corresponding numbers.
-Each @var{sigspec} is either a signal name or a signal number.
-Signal names are case insensitive and the @code{SIG} prefix is optional.
-
-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
-before every simple command, @code{for} command, @code{case} command,
-@code{select} command, every arithmetic @code{for} command, and before
-the first command executes in a shell function.
-Refer to the description of the @code{extdebug} option to the
-@code{shopt} builtin (@pxref{The Shopt Builtin}) for details of its
-effect on the @code{DEBUG} trap.
-If a @var{sigspec} is @code{RETURN}, the command @var{arg} is executed
-each time a shell function or a script executed with the @code{.} or
-@code{source} builtins finishes executing.
-
-If a @var{sigspec} is @code{ERR}, the command @var{arg}
-is executed whenever
-a pipeline (which may consist of a single simple
-command), a list, or a compound command returns a
-non-zero exit status,
-subject to the following conditions.
-The @code{ERR} trap is not executed if the failed command is part of the
-command list immediately following an @code{until} or @code{while} keyword,
-part of the test following the @code{if} or @code{elif} reserved words,
-part of a command executed in a @code{&&} or @code{||} list
-except the command following the final @code{&&} or @code{||},
-any command in a pipeline but the last,
-or if the command's return
-status is being inverted using @code{!}.
-These are the same conditions obeyed by the @code{errexit} (@option{-e})
-option.
-
-Signals ignored upon entry to the shell cannot be trapped or reset.
-Trapped signals that are not being ignored are reset to their original
-values in a subshell or subshell environment when one is created.
-
-The return status is zero unless a @var{sigspec} does not specify a
-valid signal.
-
-@item umask
-@btindex umask
-@example
-umask [-p] [-S] [@var{mode}]
-@end example
-
-Set the shell process's file creation mask to @var{mode}. If
-@var{mode} begins with a digit, it is interpreted as an octal number;
-if not, it is interpreted as a symbolic mode mask similar
-to that accepted by the @code{chmod} command. If @var{mode} is
-omitted, the current value of the mask is printed. If the @option{-S}
-option is supplied without a @var{mode} argument, the mask is printed
-in a symbolic format.
-If the @option{-p} option is supplied, and @var{mode}
-is omitted, the output is in a form that may be reused as input.
-The return status is zero if the mode is successfully changed or if
-no @var{mode} argument is supplied, and non-zero otherwise.
-
-Note that when the mode is interpreted as an octal number, each number
-of the umask is subtracted from @code{7}. Thus, a umask of @code{022}
-results in permissions of @code{755}.
-
-@item unset
-@btindex unset
-@example
-unset [-fnv] [@var{name}]
-@end example
-
-Remove each variable or function @var{name}.
-If the @option{-v} option is given, each
-@var{name} refers to a shell variable and that variable is remvoved.
-If the @option{-f} option is given, the @var{name}s refer to shell
-functions, and the function definition is removed.
-If the @option{-n} option is supplied, and @var{name} is a variable with
-the @var{nameref} attribute, @var{name} will be unset rather than the
-variable it references.
-@option{-n} has no effect if the @option{-f} option is supplied.
-If no options are supplied, each @var{name} refers to a variable; if
-there is no variable by that name, any function with that name is
-unset.
-Readonly variables and functions may not be unset.
-The return status is zero unless a @var{name} is readonly.
-@end table
-
-@node Bash Builtins
-@section Bash Builtin Commands
-
-This section describes builtin commands which are unique to
-or have been extended in Bash.
-Some of these commands are specified in the @sc{posix} standard.
-
-@table @code
-
-@item alias
-@btindex alias
-@example
-alias [-p] [@var{name}[=@var{value}] @dots{}]
-@end example
-
-Without arguments or with the @option{-p} option, @code{alias} prints
-the list of aliases on the standard output in a form that allows
-them to be reused as input.
-If arguments are supplied, an alias is defined for each @var{name}
-whose @var{value} is given. If no @var{value} is given, the name
-and value of the alias is printed.
-Aliases are described in @ref{Aliases}.
-
-@item bind
-@btindex bind
-@example
-bind [-m @var{keymap}] [-lpsvPSVX]
-bind [-m @var{keymap}] [-q @var{function}] [-u @var{function}] [-r @var{keyseq}]
-bind [-m @var{keymap}] -f @var{filename}
-bind [-m @var{keymap}] -x @var{keyseq:shell-command}
-bind [-m @var{keymap}] @var{keyseq:function-name}
-bind [-m @var{keymap}] @var{keyseq:readline-command}
-@end example
-
-Display current Readline (@pxref{Command Line Editing})
-key and function bindings,
-bind a key sequence to a Readline function or macro,
-or set a Readline variable.
-Each non-option argument is a command as it would appear in a
-Readline initialization file (@pxref{Readline Init File}),
-but each binding or command must be passed as a separate argument; e.g.,
-@samp{"\C-x\C-r":re-read-init-file}.
-
-Options, if supplied, have the following meanings:
-
-@table @code
-@item -m @var{keymap}
-Use @var{keymap} as the keymap to be affected by
-the subsequent bindings. Acceptable @var{keymap}
-names are
-@code{emacs},
-@code{emacs-standard},
-@code{emacs-meta},
-@code{emacs-ctlx},
-@code{vi},
-@code{vi-move},
-@code{vi-command}, and
-@code{vi-insert}.
-@code{vi} is equivalent to @code{vi-command};
-@code{emacs} is equivalent to @code{emacs-standard}.
-
-@item -l
-List the names of all Readline functions.
-
-@item -p
-Display Readline function names and bindings in such a way that they
-can be used as input or in a Readline initialization file.
-
-@item -P
-List current Readline function names and bindings.
-
-@item -v
-Display Readline variable names and values in such a way that they
-can be used as input or in a Readline initialization file.
-
-@item -V
-List current Readline variable names and values.
-
-@item -s
-Display Readline key sequences bound to macros and the strings they output
-in such a way that they can be used as input or in a Readline
-initialization file.
-
-@item -S
-Display Readline key sequences bound to macros and the strings they output.
-
-@item -f @var{filename}
-Read key bindings from @var{filename}.
-
-@item -q @var{function}
-Query about which keys invoke the named @var{function}.
-
-@item -u @var{function}
-Unbind all keys bound to the named @var{function}.
-
-@item -r @var{keyseq}
-Remove any current binding for @var{keyseq}.
-
-@item -x @var{keyseq:shell-command}
-Cause @var{shell-command} to be executed whenever @var{keyseq} is
-entered.
-When @var{shell-command} is executed, the shell sets the
-@code{READLINE_LINE} variable to the contents of the Readline line
-buffer and the @code{READLINE_POINT} variable to the current location
-of the insertion point.
-If the executed command changes the value of @code{READLINE_LINE} or
-@code{READLINE_POINT}, those new values will be reflected in the
-editing state.
-
-@item -X
-List all key sequences bound to shell commands and the associated commands
-in a format that can be reused as input.
-@end table
-
-@noindent
-The return status is zero unless an invalid option is supplied or an
-error occurs.
-
-@item builtin
-@btindex builtin
-@example
-builtin [@var{shell-builtin} [@var{args}]]
-@end example
-
-Run a shell builtin, passing it @var{args}, and return its exit status.
-This is useful when defining a shell function with the same
-name as a shell builtin, retaining the functionality of the builtin within
-the function.
-The return status is non-zero if @var{shell-builtin} is not a shell
-builtin command.
-
-@item caller
-@btindex caller
-@example
-caller [@var{expr}]
-@end example
-
-Returns the context of any active subroutine call (a shell function or
-a script executed with the @code{.} or @code{source} builtins).
-
-Without @var{expr}, @code{caller} displays the line number and source
-filename of the current subroutine call.
-If a non-negative integer is supplied as @var{expr}, @code{caller}
-displays the line number, subroutine name, and source file corresponding
-to that position in the current execution call stack. This extra
-information may be used, for example, to print a stack trace. The
-current frame is frame 0.
-
-The return value is 0 unless the shell is not executing a subroutine
-call or @var{expr} does not correspond to a valid position in the
-call stack.
-
-@item command
-@btindex command
-@example
-command [-pVv] @var{command} [@var{arguments} @dots{}]
-@end example
-
-Runs @var{command} with @var{arguments} ignoring any shell function
-named @var{command}.
-Only shell builtin commands or commands found by searching the
-@env{PATH} are executed.
-If there is a shell function named @code{ls}, running @samp{command ls}
-within the function will execute the external command @code{ls}
-instead of calling the function recursively.
-The @option{-p} option means to use a default value for @env{PATH}
-that is guaranteed to find all of the standard utilities.
-The return status in this case is 127 if @var{command} cannot be
-found or an error occurred, and the exit status of @var{command}
-otherwise.
-
-If either the @option{-V} or @option{-v} option is supplied, a
-description of @var{command} is printed. The @option{-v} option
-causes a single word indicating the command or file name used to
-invoke @var{command} to be displayed; the @option{-V} option produces
-a more verbose description. In this case, the return status is
-zero if @var{command} is found, and non-zero if not.
-
-@item declare
-@btindex declare
-@example
-declare [-aAfFgilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
-@end example
-
-Declare variables and give them attributes. If no @var{name}s
-are given, then display the values of variables instead.
-
-The @option{-p} option will display the attributes and values of each
-@var{name}.
-When @option{-p} is used with @var{name} arguments, additional options,
-other than @option{-f} and @option{-F}, are ignored.
-
-When @option{-p} is supplied without @var{name} arguments, @code{declare}
-will display the attributes and values of all variables having the
-attributes specified by the additional options.
-If no other options are supplied with @option{-p}, @code{declare} will
-display the attributes and values of all shell variables. The @option{-f}
-option will restrict the display to shell functions.
-
-The @option{-F} option inhibits the display of function definitions;
-only the function name and attributes are printed.
-If the @code{extdebug} shell option is enabled using @code{shopt}
-(@pxref{The Shopt Builtin}), the source file name and line number where
-the function is defined are displayed as well.
-@option{-F} implies @option{-f}.
-
-The @option{-g} option forces variables to be created or modified at
-the global scope, even when @code{declare} is executed in a shell function.
-It is ignored in all other cases.
-
-The following options can be used to restrict output to variables with
-the specified attributes or to give variables attributes:
-
-@table @code
-@item -a
-Each @var{name} is an indexed array variable (@pxref{Arrays}).
-
-@item -A
-Each @var{name} is an associative array variable (@pxref{Arrays}).
-
-@item -f
-Use function names only.
-
-@item -i
-The variable is to be treated as
-an integer; arithmetic evaluation (@pxref{Shell Arithmetic}) is
-performed when the variable is assigned a value.
-
-@item -l
-When the variable is assigned a value, all upper-case characters are
-converted to lower-case.
-The upper-case attribute is disabled.
-
-@item -n
-Give each @var{name} the @var{nameref} attribute, making
-it a name reference to another variable.
-That other variable is defined by the value of @var{name}.
-All references, assignments, and attribute modifications
-to @var{name}, except for changing the
-@option{-n} attribute itself, are performed on the variable referenced by
-@var{name}'s value.
-The nameref attribute cannot be applied to array variables.
-
-@item -r
-Make @var{name}s readonly. These names cannot then be assigned values
-by subsequent assignment statements or unset.
-
-@item -t
-Give each @var{name} the @code{trace} attribute.
-Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from
-the calling shell.
-The trace attribute has no special meaning for variables.
-
-@item -u
-When the variable is assigned a value, all lower-case characters are
-converted to upper-case.
-The lower-case attribute is disabled.
-
-@item -x
-Mark each @var{name} for export to subsequent commands via
-the environment.
-@end table
-
-Using @samp{+} instead of @samp{-} turns off the attribute instead,
-with the exceptions that @samp{+a}
-may not be used to destroy an array variable and @samp{+r} will not
-remove the readonly attribute.
-When used in a function, @code{declare} makes each @var{name} local,
-as with the @code{local} command, unless the @option{-g} option is used.
-If a variable name is followed by =@var{value}, the value of the variable
-is set to @var{value}.
-
-When using @option{-a} or @option{-A} and the compound assignment syntax to
-create array variables, additional attributes do not take effect until
-subsequent assignments.
-
-The return status is zero unless an invalid option is encountered,
-an attempt is made to define a function using @samp{-f foo=bar},
-an attempt is made to assign a value to a readonly variable,
-an attempt is made to assign a value to an array variable without
-using the compound assignment syntax (@pxref{Arrays}),
-one of the @var{names} is not a valid shell variable name,
-an attempt is made to turn off readonly status for a readonly variable,
-an attempt is made to turn off array status for an array variable,
-or an attempt is made to display a non-existent function with @option{-f}.
-
-@item echo
-@btindex echo
-@example
-echo [-neE] [@var{arg} @dots{}]
-@end example
-
-Output the @var{arg}s, separated by spaces, terminated with a
-newline.
-The return status is 0 unless a write error occurs.
-If @option{-n} is specified, the trailing newline is suppressed.
-If the @option{-e} option is given, interpretation of the following
-backslash-escaped characters is enabled.
-The @option{-E} option disables the interpretation of these escape characters,
-even on systems where they are interpreted by default.
-The @code{xpg_echo} shell option may be used to
-dynamically determine whether or not @code{echo} expands these
-escape characters by default.
-@code{echo} does not interpret @option{--} to mean the end of options.
-
-@code{echo} interprets the following escape sequences:
-@table @code
-@item \a
-alert (bell)
-@item \b
-backspace
-@item \c
-suppress further output
-@item \e
-@itemx \E
-escape
-@item \f
-form feed
-@item \n
-new line
-@item \r
-carriage return
-@item \t
-horizontal tab
-@item \v
-vertical tab
-@item \\
-backslash
-@item \0@var{nnn}
-the eight-bit character whose value is the octal value @var{nnn}
-(zero to three octal digits)
-@item \x@var{HH}
-the eight-bit character whose value is the hexadecimal value @var{HH}
-(one or two hex digits)
-@item \u@var{HHHH}
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-@var{HHHH} (one to four hex digits)
-@item \U@var{HHHHHHHH}
-the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value
-@var{HHHHHHHH} (one to eight hex digits)
-@end table
-
-@item enable
-@btindex enable
-@example
-enable [-a] [-dnps] [-f @var{filename}] [@var{name} @dots{}]
-@end example
-
-Enable and disable builtin shell commands.
-Disabling a builtin allows a disk command which has the same name
-as a shell builtin to be executed without specifying a full pathname,
-even though the shell normally searches for builtins before disk commands.
-If @option{-n} is used, the @var{name}s become disabled. Otherwise
-@var{name}s are enabled. For example, to use the @code{test} binary
-found via @env{$PATH} instead of the shell builtin version, type
-@samp{enable -n test}.
-
-If the @option{-p} option is supplied, or no @var{name} arguments appear,
-a list of shell builtins is printed. With no other arguments, the list
-consists of all enabled shell builtins.
-The @option{-a} option means to list
-each builtin with an indication of whether or not it is enabled.
-
-The @option{-f} option means to load the new builtin command @var{name}
-from shared object @var{filename}, on systems that support dynamic loading.
-The @option{-d} option will delete a builtin loaded with @option{-f}.
-
-If there are no options, a list of the shell builtins is displayed.
-The @option{-s} option restricts @code{enable} to the @sc{posix} special
-builtins. If @option{-s} is used with @option{-f}, the new builtin becomes
-a special builtin (@pxref{Special Builtins}).
-
-The return status is zero unless a @var{name} is not a shell builtin
-or there is an error loading a new builtin from a shared object.
-
-@item help
-@btindex help
-@example
-help [-dms] [@var{pattern}]
-@end example
-
-Display helpful information about builtin commands.
-If @var{pattern} is specified, @code{help} gives detailed help
-on all commands matching @var{pattern}, otherwise a list of
-the builtins is printed.
-
-Options, if supplied, have the following meanings:
-
-@table @code
-@item -d
-Display a short description of each @var{pattern}
-@item -m
-Display the description of each @var{pattern} in a manpage-like format
-@item -s
-Display only a short usage synopsis for each @var{pattern}
-@end table
-
-The return status is zero unless no command matches @var{pattern}.
-
-@item let
-@btindex let
-@example
-let @var{expression} [@var{expression} @dots{}]
-@end example
-
-The @code{let} builtin allows arithmetic to be performed on shell
-variables. Each @var{expression} is evaluated according to the
-rules given below in @ref{Shell Arithmetic}. If the
-last @var{expression} evaluates to 0, @code{let} returns 1;
-otherwise 0 is returned.
-
-@item local
-@btindex local
-@example
-local [@var{option}] @var{name}[=@var{value}] @dots{}
-@end example
-
-For each argument, a local variable named @var{name} is created,
-and assigned @var{value}.
-The @var{option} can be any of the options accepted by @code{declare}.
-@code{local} can only be used within a function; it makes the variable
-@var{name} have a visible scope restricted to that function and its
-children. The return status is zero unless @code{local} is used outside
-a function, an invalid @var{name} is supplied, or @var{name} is a
-readonly variable.
-
-@item logout
-@btindex logout
-@example
-logout [@var{n}]
-@end example
-
-Exit a login shell, returning a status of @var{n} to the shell's
-parent.
-
-@item mapfile
-@btindex mapfile
-@example
-mapfile [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}]
- [-C @var{callback}] [-c @var{quantum}] [@var{array}]
-@end example
-
-Read lines from the standard input into the indexed array variable @var{array},
-or from file descriptor @var{fd}
-if the @option{-u} option is supplied.
-The variable @code{MAPFILE} is the default @var{array}.
-Options, if supplied, have the following meanings:
-
-@table @code
-
-@item -d
-The first character of @var{delim} is used to terminate each input line,
-rather than newline.
-@item -n
-Copy at most @var{count} lines. If @var{count} is 0, all lines are copied.
-@item -O
-Begin assigning to @var{array} at index @var{origin}.
-The default index is 0.
-@item -s
-Discard the first @var{count} lines read.
-@item -t
-Remove a trailing newline from each line read.
-@item -u
-Read lines from file descriptor @var{fd} instead of the standard input.
-@item -C
-Evaluate @var{callback} each time @var{quantum}P lines are read.
-The @option{-c} option specifies @var{quantum}.
-@item -c
-Specify the number of lines read between each call to @var{callback}.
-@end table
-
-If @option{-C} is specified without @option{-c},
-the default quantum is 5000.
-When @var{callback} is evaluated, it is supplied the index of the next
-array element to be assigned and the line to be assigned to that element
-as additional arguments.
-@var{callback} is evaluated after the line is read but before the
-array element is assigned.
-
-If not supplied with an explicit origin, @code{mapfile} will clear @var{array}
-before assigning to it.
-
-@code{mapfile} returns successfully unless an invalid option or option
-argument is supplied, @var{array} is invalid or unassignable, or @var{array}
-is not an indexed array.
-
-@item printf
-@btindex printf
-@example
-printf [-v @var{var}] @var{format} [@var{arguments}]
-@end example
-
-Write the formatted @var{arguments} to the standard output under the
-control of the @var{format}.
-The @option{-v} option causes the output to be assigned to the variable
-@var{var} rather than being printed to the standard output.
-
-The @var{format} is a character string which contains three types of objects:
-plain characters, which are simply copied to standard output, character
-escape sequences, which are converted and copied to the standard output, and
-format specifications, each of which causes printing of the next successive
-@var{argument}.
-In addition to the standard @code{printf(1)} formats, @code{printf}
-interprets the following extensions:
-
-@table @code
-@item %b
-Causes @code{printf} to expand backslash escape sequences in the
-corresponding @var{argument},
-except that @samp{\c} terminates output, backslashes in
-@samp{\'}, @samp{\"}, and @samp{\?} are not removed, and octal escapes
-beginning with @samp{\0} may contain up to four digits.
-@item %q
-Causes @code{printf} to output the
-corresponding @var{argument} in a format that can be reused as shell input.
-@item %(@var{datefmt})T
-Causes @code{printf} to output the date-time string resulting from using
-@var{datefmt} as a format string for @code{strftime}(3).
-The corresponding @var{argument} is an integer representing the number of
-seconds since the epoch.
-Two special argument values may be used: -1 represents the current
-time, and -2 represents the time the shell was invoked.
-If no argument is specified, conversion behaves as if -1 had been given.
-This is an exception to the usual @code{printf} behavior.
-@end table
-
-@noindent
-Arguments to non-string format specifiers are treated as C language constants,
-except that a leading plus or minus sign is allowed, and if the leading
-character is a single or double quote, the value is the ASCII value of
-the following character.
-
-The @var{format} is reused as necessary to consume all of the @var{arguments}.
-If the @var{format} requires more @var{arguments} than are supplied, the
-extra format specifications behave as if a zero value or null string, as
-appropriate, had been supplied. The return value is zero on success,
-non-zero on failure.
-
-@item read
-@btindex read
-@example
-read [-ers] [-a @var{aname}] [-d @var{delim}] [-i @var{text}] [-n @var{nchars}]
- [-N @var{nchars}] [-p @var{prompt}] [-t @var{timeout}] [-u @var{fd}] [@var{name} @dots{}]
-@end example
-
-One line is read from the standard input, or from the file descriptor
-@var{fd} supplied as an argument to the @option{-u} option, and the first word
-is assigned to the first @var{name}, the second word to the second @var{name},
-and so on, with leftover words and their intervening separators assigned
-to the last @var{name}.
-If there are fewer words read from the input stream than names,
-the remaining names are assigned empty values.
-The characters in the value of the @env{IFS} variable
-are used to split the line into words using the same rules the shell
-uses for expansion (described above in @ref{Word Splitting}).
-The backslash character @samp{\} may be used to remove any special
-meaning for the next character read and for line continuation.
-If no names are supplied, the line read is assigned to the
-variable @env{REPLY}.
-The return code is zero, unless end-of-file is encountered, @code{read}
-times out (in which case the return code is greater than 128),
-a variable assignment error (such as assigning to a readonly variable) occurs,
-or an invalid file descriptor is supplied as the argument to @option{-u}.
-
-Options, if supplied, have the following meanings:
-
-@table @code
-@item -a @var{aname}
-The words are assigned to sequential indices of the array variable
-@var{aname}, starting at 0.
-All elements are removed from @var{aname} before the assignment.
-Other @var{name} arguments are ignored.
-
-@item -d @var{delim}
-The first character of @var{delim} is used to terminate the input line,
-rather than newline.
-
-@item -e
-Readline (@pxref{Command Line Editing}) is used to obtain the line.
-Readline uses the current (or default, if line editing was not previously
-active) editing settings.
-
-@item -i @var{text}
-If Readline is being used to read the line, @var{text} is placed into
-the editing buffer before editing begins.
-
-@item -n @var{nchars}
-@code{read} returns after reading @var{nchars} characters rather than
-waiting for a complete line of input, but honor a delimiter if fewer
-than @var{nchars} characters are read before the delimiter.
-
-@item -N @var{nchars}
-@code{read} returns after reading exactly @var{nchars} characters rather
-than waiting for a complete line of input, unless EOF is encountered or
-@code{read} times out.
-Delimiter characters encountered in the input are
-not treated specially and do not cause @code{read} to return until
-@var{nchars} characters are read.
-
-@item -p @var{prompt}
-Display @var{prompt}, without a trailing newline, before attempting
-to read any input.
-The prompt is displayed only if input is coming from a terminal.
-
-@item -r
-If this option is given, backslash does not act as an escape character.
-The backslash is considered to be part of the line.
-In particular, a backslash-newline pair may not be used as a line
-continuation.
-
-@item -s
-Silent mode. If input is coming from a terminal, characters are
-not echoed.
-
-@item -t @var{timeout}
-Cause @code{read} to time out and return failure if a complete line of
-input (or a specified number of characters)
-is not read within @var{timeout} seconds.
-@var{timeout} may be a decimal number with a fractional portion following
-the decimal point.
-This option is only effective if @code{read} is reading input from a
-terminal, pipe, or other special file; it has no effect when reading
-from regular files.
-If @code{read} times out, @code{read} saves any partial input read into
-the specified variable @var{name}.
-If @var{timeout} is 0, @code{read} returns immediately, without trying to
-read and data. The exit status is 0 if input is available on
-the specified file descriptor, non-zero otherwise.
-The exit status is greater than 128 if the timeout is exceeded.
-
-@item -u @var{fd}
-Read input from file descriptor @var{fd}.
-@end table
-
-@item readarray
-@btindex readarray
-@example
-readarray [-d @var{delim}] [-n @var{count}] [-O @var{origin}] [-s @var{count}] [-t] [-u @var{fd}]
- [-C @var{callback}] [-c @var{quantum}] [@var{array}]
-@end example
-
-Read lines from the standard input into the indexed array variable @var{array},
-or from file descriptor @var{fd}
-if the @option{-u} option is supplied.
-
-A synonym for @code{mapfile}.
-
-@item source
-@btindex source
-@example
-source @var{filename}
-@end example
-
-A synonym for @code{.} (@pxref{Bourne Shell Builtins}).
-
-@item type
-@btindex type
-@example
-type [-afptP] [@var{name} @dots{}]
-@end example
-
-For each @var{name}, indicate how it would be interpreted if used as a
-command name.
-
-If the @option{-t} option is used, @code{type} prints a single word
-which is one of @samp{alias}, @samp{function}, @samp{builtin},
-@samp{file} or @samp{keyword},
-if @var{name} is an alias, shell function, shell builtin,
-disk file, or shell reserved word, respectively.
-If the @var{name} is not found, then nothing is printed, and
-@code{type} returns a failure status.
-
-If the @option{-p} option is used, @code{type} either returns the name
-of the disk file that would be executed, or nothing if @option{-t}
-would not return @samp{file}.
-
-The @option{-P} option forces a path search for each @var{name}, even if
-@option{-t} would not return @samp{file}.
-
-If a command is hashed, @option{-p} and @option{-P} print the hashed value,
-which is not necessarily the file that appears first in @code{$PATH}.
-
-If the @option{-a} option is used, @code{type} returns all of the places
-that contain an executable named @var{file}.
-This includes aliases and functions, if and only if the @option{-p} option
-is not also used.
-
-If the @option{-f} option is used, @code{type} does not attempt to find
-shell functions, as with the @code{command} builtin.
-
-The return status is zero if all of the @var{names} are found, non-zero
-if any are not found.
-
-@item typeset
-@btindex typeset
-@example
-typeset [-afFgrxilnrtux] [-p] [@var{name}[=@var{value}] @dots{}]
-@end example
-
-The @code{typeset} command is supplied for compatibility with the Korn
-shell.
-It is a synonym for the @code{declare} builtin command.
-
-@item ulimit
-@btindex ulimit
-@example
-ulimit [-HSabcdefiklmnpqrstuvxPT] [@var{limit}]
-@end example
-
-@code{ulimit} provides control over the resources available to processes
-started by the shell, on systems that allow such control. If an
-option is given, it is interpreted as follows:
-
-@table @code
-@item -S
-Change and report the soft limit associated with a resource.
-
-@item -H
-Change and report the hard limit associated with a resource.
-
-@item -a
-All current limits are reported.
-
-@item -b
-The maximum socket buffer size.
-
-@item -c
-The maximum size of core files created.
-
-@item -d
-The maximum size of a process's data segment.
-
-@item -e
-The maximum scheduling priority ("nice").
-
-@item -f
-The maximum size of files written by the shell and its children.
-
-@item -i
-The maximum number of pending signals.
-
-@item -k
-The maximum number of kqueues that may be allocated.
-
-@item -l
-The maximum size that may be locked into memory.
-
-@item -m
-The maximum resident set size (many systems do not honor this limit).
-
-@item -n
-The maximum number of open file descriptors (most systems do not
-allow this value to be set).
-
-@item -p
-The pipe buffer size.
-
-@item -q
-The maximum number of bytes in POSIX message queues.
-
-@item -r
-The maximum real-time scheduling priority.
-
-@item -s
-The maximum stack size.
-
-@item -t
-The maximum amount of cpu time in seconds.
-
-@item -u
-The maximum number of processes available to a single user.
-
-@item -v
-The maximum amount of virtual memory available to the shell, and, on
-some systems, to its children.
-
-@item -x
-The maximum number of file locks.
-
-@item -P
-The maximum number of pseudoterminals.
-
-@item -T
-The maximum number of threads.
-@end table
-
-If @var{limit} is given, and the @option{-a} option is not used,
-@var{limit} is the new value of the specified resource.
-The special @var{limit} values @code{hard}, @code{soft}, and
-@code{unlimited} stand for the current hard limit, the current soft limit,
-and no limit, respectively.
-A hard limit cannot be increased by a non-root user once it is set;
-a soft limit may be increased up to the value of the hard limit.
-Otherwise, the current value of the soft limit for the specified resource
-is printed, unless the @option{-H} option is supplied.
-When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
-both the hard and soft limits are set.
-If no option is given, then @option{-f} is assumed. Values are in 1024-byte
-increments, except for @option{-t}, which is in seconds; @option{-p},
-which is in units of 512-byte blocks; and @option{-P}, @option{-T},
-@option{-b},
-@option{-k}, @option{-n} and @option{-u}, which are unscaled values.
-
-The return status is zero unless an invalid option or argument is supplied,
-or an error occurs while setting a new limit.
-
-@item unalias
-@btindex unalias
-@example
-unalias [-a] [@var{name} @dots{} ]
-@end example
-
-Remove each @var{name} from the list of aliases. If @option{-a} is
-supplied, all aliases are removed.
-Aliases are described in @ref{Aliases}.
-@end table
-
-@node Modifying Shell Behavior
-@section Modifying Shell Behavior
-
-@menu
-* The Set Builtin:: Change the values of shell attributes and
- positional parameters.
-* The Shopt Builtin:: Modify shell optional behavior.
-@end menu
-
-@node The Set Builtin
-@subsection The Set Builtin
-
-This builtin is so complicated that it deserves its own section. @code{set}
-allows you to change the values of shell options and set the positional
-parameters, or to display the names and values of shell variables.
-
-@table @code
-@item set
-@btindex set
-@example
-set [--abefhkmnptuvxBCEHPT] [-o @var{option-name}] [@var{argument} @dots{}]
-set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [@var{argument} @dots{}]
-@end example
-
-If no options or arguments are supplied, @code{set} displays the names
-and values of all shell variables and functions, sorted according to the
-current locale, in a format that may be reused as input
-for setting or resetting the currently-set variables.
-Read-only variables cannot be reset.
-In @sc{posix} mode, only shell variables are listed.
-
-When options are supplied, they set or unset shell attributes.
-Options, if specified, have the following meanings:
-
-@table @code
-@item -a
-Mark variables and function which are modified or created for export
-to the environment of subsequent commands.
-
-@item -b
-Cause the status of terminated background jobs to be reported
-immediately, rather than before printing the next primary prompt.
-
-@item -e
-Exit immediately if
-a pipeline (@pxref{Pipelines}), which may consist of a single simple command
-(@pxref{Simple Commands}),
-a list (@pxref{Lists}),
-or a compound command (@pxref{Compound Commands})
-returns a non-zero status.
-The shell does not exit if the command that fails is part of the
-command list immediately following a @code{while} or @code{until} keyword,
-part of the test in an @code{if} statement,
-part of any command executed in a @code{&&} or @code{||} list except
-the command following the final @code{&&} or @code{||},
-any command in a pipeline but the last,
-or if the command's return status is being inverted with @code{!}.
-If a compound command other than a subshell
-returns a non-zero status because a command failed
-while @option{-e} was being ignored, the shell does not exit.
-A trap on @code{ERR}, if set, is executed before the shell exits.
-
-This option applies to the shell environment and each subshell environment
-separately (@pxref{Command Execution Environment}), and may cause
-subshells to exit before executing all the commands in the subshell.
-
-If a compound command or shell function executes in a context where
-@option{-e} is being ignored,
-none of the commands executed within the compound command or function body
-will be affected by the @option{-e} setting, even if @option{-e} is set
-and a command returns a failure status.
-If a compound command or shell function sets @option{-e} while executing in
-a context where @option{-e} is ignored, that setting will not have any
-effect until the compound command or the command containing the function
-call completes.
-
-@item -f
-Disable filename expansion (globbing).
-
-@item -h
-Locate and remember (hash) commands as they are looked up for execution.
-This option is enabled by default.
-
-@item -k
-All arguments in the form of assignment statements are placed
-in the environment for a command, not just those that precede
-the command name.
-
-@item -m
-Job control is enabled (@pxref{Job Control}).
-All processes run in a separate process group.
-When a background job completes, the shell prints a line
-containing its exit status.
-
-@item -n
-Read commands but do not execute them.
-This may be used to check a script for syntax errors.
-This option is ignored by interactive shells.
-
-@item -o @var{option-name}
-
-Set the option corresponding to @var{option-name}:
-
-@table @code
-@item allexport
-Same as @code{-a}.
-
-@item braceexpand
-Same as @code{-B}.
-
-@item emacs
-Use an @code{emacs}-style line editing interface (@pxref{Command Line Editing}).
-This also affects the editing interface used for @code{read -e}.
-
-@item errexit
-Same as @code{-e}.
-
-@item errtrace
-Same as @code{-E}.
-
-@item functrace
-Same as @code{-T}.
-
-@item hashall
-Same as @code{-h}.
-
-@item histexpand
-Same as @code{-H}.
-
-@item history
-Enable command history, as described in @ref{Bash History Facilities}.
-This option is on by default in interactive shells.
-
-@item ignoreeof
-An interactive shell will not exit upon reading EOF.
-
-@item keyword
-Same as @code{-k}.
-
-@item monitor
-Same as @code{-m}.
-
-@item noclobber
-Same as @code{-C}.
-
-@item noexec
-Same as @code{-n}.
-
-@item noglob
-Same as @code{-f}.
-
-@item nolog
-Currently ignored.
-
-@item notify
-Same as @code{-b}.
-
-@item nounset
-Same as @code{-u}.
-
-@item onecmd
-Same as @code{-t}.
-
-@item physical
-Same as @code{-P}.
-
-@item pipefail
-If set, the return value of a pipeline is the value of the last
-(rightmost) command to exit with a non-zero status, or zero if all
-commands in the pipeline exit successfully.
-This option is disabled by default.
-
-@item posix
-Change the behavior of Bash where the default operation differs
-from the @sc{posix} standard to match the standard
-(@pxref{Bash POSIX Mode}).
-This is intended to make Bash behave as a strict superset of that
-standard.
-
-@item privileged
-Same as @code{-p}.
-
-@item verbose
-Same as @code{-v}.
-
-@item vi
-Use a @code{vi}-style line editing interface.
-This also affects the editing interface used for @code{read -e}.
-
-@item xtrace
-Same as @code{-x}.
-@end table
-
-@item -p
-Turn on privileged mode.
-In this mode, the @env{$BASH_ENV} and @env{$ENV} files are not
-processed, shell functions are not inherited from the environment,
-and the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH} and @env{GLOBIGNORE}
-variables, if they appear in the environment, are ignored.
-If the shell is started with the effective user (group) id not equal to the
-real user (group) id, and the @option{-p} option is not supplied, these actions
-are taken and the effective user id is set to the real user id.
-If the @option{-p} option is supplied at startup, the effective user id is
-not reset.
-Turning this option off causes the effective user
-and group ids to be set to the real user and group ids.
-
-@item -t
-Exit after reading and executing one command.
-
-@item -u
-Treat unset variables and parameters other than the special parameters
-@samp{@@} or @samp{*} as an error when performing parameter expansion.
-An error message will be written to the standard error, and a non-interactive
-shell will exit.
-
-@item -v
-Print shell input lines as they are read.
-
-@item -x
-Print a trace of simple commands, @code{for} commands, @code{case}
-commands, @code{select} commands, and arithmetic @code{for} commands
-and their arguments or associated word lists after they are
-expanded and before they are executed. The value of the @env{PS4}
-variable is expanded and the resultant value is printed before
-the command and its expanded arguments.
-
-@item -B
-The shell will perform brace expansion (@pxref{Brace Expansion}).
-This option is on by default.
-
-@item -C
-Prevent output redirection using @samp{>}, @samp{>&}, and @samp{<>}
-from overwriting existing files.
-
-@item -E
-If set, any trap on @code{ERR} is inherited by shell functions, command
-substitutions, and commands executed in a subshell environment.
-The @code{ERR} trap is normally not inherited in such cases.
-
-@item -H
-Enable @samp{!} style history substitution (@pxref{History Interaction}).
-This option is on by default for interactive shells.
-
-@item -P
-If set, do not resolve symbolic links when performing commands such as
-@code{cd} which change the current directory. The physical directory
-is used instead. By default, Bash follows
-the logical chain of directories when performing commands
-which change the current directory.
-
-For example, if @file{/usr/sys} is a symbolic link to @file{/usr/local/sys}
-then:
-@example
-$ cd /usr/sys; echo $PWD
-/usr/sys
-$ cd ..; pwd
-/usr
-@end example
-
-@noindent
-If @code{set -P} is on, then:
-@example
-$ cd /usr/sys; echo $PWD
-/usr/local/sys
-$ cd ..; pwd
-/usr/local
-@end example
-
-@item -T
-If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by
-shell functions, command substitutions, and commands executed
-in a subshell environment.
-The @code{DEBUG} and @code{RETURN} traps are normally not inherited
-in such cases.
-
-@item --
-If no arguments follow this option, then the positional parameters are
-unset. Otherwise, the positional parameters are set to the
-@var{arguments}, even if some of them begin with a @samp{-}.
-
-@item -
-Signal the end of options, cause all remaining @var{arguments}
-to be assigned to the positional parameters. The @option{-x}
-and @option{-v} options are turned off.
-If there are no arguments, the positional parameters remain unchanged.
-@end table
-
-Using @samp{+} rather than @samp{-} causes these options to be
-turned off. The options can also be used upon invocation of the
-shell. The current set of options may be found in @code{$-}.
-
-The remaining N @var{arguments} are positional parameters and are
-assigned, in order, to @code{$1}, @code{$2}, @dots{} @code{$N}.
-The special parameter @code{#} is set to N.
-
-The return status is always zero unless an invalid option is supplied.
-@end table
-
-@node The Shopt Builtin
-@subsection The Shopt Builtin
-
-This builtin allows you to change additional shell optional behavior.
-
-@table @code
-
-@item shopt
-@btindex shopt
-@example
-shopt [-pqsu] [-o] [@var{optname} @dots{}]
-@end example
-
-Toggle the values of settings controlling optional shell behavior.
-The settings can be either those listed below, or, if the
-@option{-o} option is used, those available with the @option{-o}
-option to the @code{set} builtin command (@pxref{The Set Builtin}).
-With no options, or with the @option{-p} option, a list of all settable
-options is displayed, with an indication of whether or not each is set.
-The @option{-p} option causes output to be displayed in a form that
-may be reused as input.
-Other options have the following meanings:
-
-@table @code
-@item -s
-Enable (set) each @var{optname}.
-
-@item -u
-Disable (unset) each @var{optname}.
-
-@item -q
-Suppresses normal output; the return status
-indicates whether the @var{optname} is set or unset.
-If multiple @var{optname} arguments are given with @option{-q},
-the return status is zero if all @var{optnames} are enabled;
-non-zero otherwise.
-
-@item -o
-Restricts the values of
-@var{optname} to be those defined for the @option{-o} option to the
-@code{set} builtin (@pxref{The Set Builtin}).
-@end table
-
-If either @option{-s} or @option{-u}
-is used with no @var{optname} arguments, @code{shopt} shows only
-those options which are set or unset, respectively.
-
-Unless otherwise noted, the @code{shopt} options are disabled (off)
-by default.
-
-The return status when listing options is zero if all @var{optnames}
-are enabled, non-zero otherwise. When setting or unsetting options,
-the return status is zero unless an @var{optname} is not a valid shell
-option.
-
-The list of @code{shopt} options is:
-@table @code
-
-@item autocd
-If set, a command name that is the name of a directory is executed as if
-it were the argument to the @code{cd} command.
-This option is only used by interactive shells.
-
-@item cdable_vars
-If this is set, an argument to the @code{cd} builtin command that
-is not a directory is assumed to be the name of a variable whose
-value is the directory to change to.
-
-@item cdspell
-If set, minor errors in the spelling of a directory component in a
-@code{cd} command will be corrected.
-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 only used by interactive shells.
-
-@item checkhash
-If this is set, Bash checks that a command found in the hash
-table exists before trying to execute it. If a hashed command no
-longer exists, a normal path search is performed.
-
-@item checkjobs
-If set, Bash lists the status of any stopped and running jobs before
-exiting an interactive shell. If any jobs are running, this causes
-the exit to be deferred until a second exit is attempted without an
-intervening command (@pxref{Job Control}).
-The shell always postpones exiting if any jobs are stopped.
-
-@item checkwinsize
-If set, Bash checks the window size after each command
- and, if necessary, updates the values of
-@env{LINES} and @env{COLUMNS}.
-
-@item cmdhist
-If set, Bash
-attempts to save all lines of a multiple-line
-command in the same history entry. This allows
-easy re-editing of multi-line commands.
-
-@item compat31
-If set, Bash
-changes its behavior to that of version 3.1 with respect to quoted
-arguments to the conditional command's @samp{=~} operator
-and with respect to locale-specific
-string comparison when using the @code{[[}
-conditional command's @samp{<} and @samp{>} operators.
-Bash versions prior to bash-4.1 use ASCII collation and strcmp(3);
-bash-4.1 and later use the current locale's collation sequence and strcoll(3).
-
-@item compat32
-If set, Bash
-changes its behavior to that of version 3.2 with respect to locale-specific
-string comparison when using the @code{[[}
-conditional command's @samp{<} and @samp{>} operators (see previous item).
-
-@item compat40
-If set, Bash
-changes its behavior to that of version 4.0 with respect to locale-specific
-string comparison when using the @code{[[}
-conditional command's @samp{<} and @samp{>} operators (see description
-of @code{compat31})
-and the effect of interrupting a command list.
-Bash versions 4.0 and later interrupt the list as if the shell received the
-interrupt; previous versions continue with the next command in the list.
-
-@item compat41
-If set, Bash, when in @sc{posix} mode, treats a single quote in a double-quoted
-parameter expansion as a special character. The single quotes must match
-(an even number) and the characters between the single quotes are considered
-quoted. This is the behavior of @sc{posix} mode through version 4.1.
-The default Bash behavior remains as in previous versions.
-
-@item compat42
-If set, Bash
-does not process the replacement string in the pattern substitution word
-expansion using quote removal.
-
-@item complete_fullquote
-If set, Bash
-quotes all shell metacharacters in filenames and directory names when
-performing completion.
-If not set, Bash
-removes metacharacters such as the dollar sign from the set of
-characters that will be quoted in completed filenames
-when these metacharacters appear in shell variable references in words to be
-completed.
-This means that dollar signs in variable names that expand to directories
-will not be quoted;
-however, any dollar signs appearing in filenames will not be quoted, either.
-This is active only when bash is using backslashes to quote completed
-filenames.
-This variable is set by default, which is the default Bash behavior in
-versions through 4.2.
-
-@item direxpand
-If set, Bash
-replaces directory names with the results of word expansion when performing
-filename completion. This changes the contents of the readline editing
-buffer.
-If not set, Bash attempts to preserve what the user typed.
-
-@item dirspell
-If set, Bash
-attempts spelling correction on directory names during word completion
-if the directory name initially supplied does not exist.
-
-@item dotglob
-If set, Bash includes filenames beginning with a `.' in
-the results of filename expansion.
-
-@item execfail
-If this is set, a non-interactive shell will not exit if
-it cannot execute the file specified as an argument to the @code{exec}
-builtin command. An interactive shell does not exit if @code{exec}
-fails.
-
-@item expand_aliases
-If set, aliases are expanded as described below under Aliases,
-@ref{Aliases}.
-This option is enabled by default for interactive shells.
-
-@item extdebug
-If set, behavior intended for use by debuggers is enabled:
-
-@enumerate
-@item
-The @option{-F} option to the @code{declare} builtin (@pxref{Bash Builtins})
-displays the source file name and line number corresponding to each function
-name supplied as an argument.
-
-@item
-If the command run by the @code{DEBUG} trap returns a non-zero value, the
-next command is skipped and not executed.
-
-@item
-If the command run by the @code{DEBUG} trap returns a value of 2, and the
-shell is executing in a subroutine (a shell function or a shell script
-executed by the @code{.} or @code{source} builtins), the shell simulates
-a call to @code{return}.
-
-@item
-@code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their
-descriptions (@pxref{Bash Variables}).
-
-@item
-Function tracing is enabled: command substitution, shell functions, and
-subshells invoked with @code{( @var{command} )} inherit the
-@code{DEBUG} and @code{RETURN} traps.
-
-@item
-Error tracing is enabled: command substitution, shell functions, and
-subshells invoked with @code{( @var{command} )} inherit the
-@code{ERR} trap.
-@end enumerate
-
-@item extglob
-If set, the extended pattern matching features described above
-(@pxref{Pattern Matching}) are enabled.
-
-@item extquote
-If set, @code{$'@var{string}'} and @code{$"@var{string}"} quoting is
-performed within @code{$@{@var{parameter}@}} expansions
-enclosed in double quotes. This option is enabled by default.
-
-@item failglob
-If set, patterns which fail to match filenames during filename expansion
-result in an expansion error.
-
-@item force_fignore
-If set, the suffixes specified by the @env{FIGNORE} shell variable
-cause words to be ignored when performing word completion even if
-the ignored words are the only possible completions.
-@xref{Bash Variables}, for a description of @env{FIGNORE}.
-This option is enabled by default.
-
-@item globasciiranges
-If set, range expressions used in pattern matching bracket expressions
-(@pxref{Pattern Matching})
-behave as if in the traditional C locale when performing
-comparisons. That is, the current locale's collating sequence
-is not taken into account, so
-@samp{b} will not collate between @samp{A} and @samp{B},
-and upper-case and lower-case ASCII characters will collate together.
-
-@item globstar
-If set, the pattern @samp{**} used in a filename expansion context will
-match all files and zero or more directories and subdirectories.
-If the pattern is followed by a @samp{/}, only directories and
-subdirectories match.
-
-@item gnu_errfmt
-If set, shell error messages are written in the standard @sc{gnu} error
-message format.
-
-@item histappend
-If set, the history list is appended to the file named by the value
-of the @env{HISTFILE}
-variable when the shell exits, rather than overwriting the file.
-
-@item histreedit
-If set, and Readline
-is being used, a user is given the opportunity to re-edit a
-failed history substitution.
-
-@item histverify
-If set, and Readline
-is being used, the results of history substitution are not immediately
-passed to the shell parser. Instead, the resulting line is loaded into
-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 containing a @samp{@@} is being
-completed (@pxref{Commands For Completion}). This option is enabled
-by default.
-
-@item huponexit
-If set, Bash will send @code{SIGHUP} to all jobs when an interactive
-login shell exits (@pxref{Signals}).
-
-@item interactive_comments
-Allow a word beginning with @samp{#}
-to cause that word and all remaining characters on that
-line to be ignored in an interactive shell.
-This option is enabled by default.
-
-@item lastpipe
-If set, and job control is not active, the shell runs the last command of
-a pipeline not executed in the background in the current shell environment.
-
-@item lithist
-If enabled, and the @code{cmdhist}
-option is enabled, multi-line commands are saved to the history with
-embedded newlines rather than using semicolon separators where possible.
-
-@item login_shell
-The shell sets this option if it is started as a login shell
-(@pxref{Invoking Bash}).
-The value may not be changed.
-
-@item mailwarn
-If set, and a file that Bash is checking for mail has been
-accessed since the last time it was checked, the message
-@code{"The mail in @var{mailfile} has been read"} is displayed.
-
-@item no_empty_cmd_completion
-If set, and Readline is being used, Bash will not attempt to search
-the @env{PATH} for possible completions when completion is attempted
-on an empty line.
-
-@item nocaseglob
-If set, Bash matches filenames in a case-insensitive fashion when
-performing filename expansion.
-
-@item nocasematch
-If set, Bash matches patterns in a case-insensitive fashion when
-performing matching while executing @code{case} or @code{[[}
-conditional commands,
-when performing pattern substitution word expansions,
-or when filtering possible completions as part of programmable completion.
-
-@item nullglob
-If set, Bash allows filename patterns which match no
-files to expand to a null string, rather than themselves.
-
-@item progcomp
-If set, the programmable completion facilities
-(@pxref{Programmable Completion}) are enabled.
-This option is enabled by default.
-
-@item promptvars
-If set, prompt strings undergo
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal after being expanded
-as described below (@pxref{Controlling the Prompt}).
-This option is enabled by default.
-
-@item restricted_shell
-The shell sets this option if it is started in restricted mode
-(@pxref{The Restricted Shell}).
-The value may not be changed.
-This is not reset when the startup files are executed, allowing
-the startup files to discover whether or not a shell is restricted.
-
-@item shift_verbose
-If this is set, the @code{shift}
-builtin prints an error message when the shift count exceeds the
-number of positional parameters.
-
-@item sourcepath
-If set, the @code{source} builtin uses the value of @env{PATH}
-to find the directory containing the file supplied as an argument.
-This option is enabled by default.
-
-@item xpg_echo
-If set, the @code{echo} builtin expands backslash-escape sequences
-by default.
-
-@end table
-
-@noindent
-The return status when listing options is zero if all @var{optnames}
-are enabled, non-zero otherwise.
-When setting or unsetting options, the return status is zero unless an
-@var{optname} is not a valid shell option.
-@end table
-
-@node Special Builtins
-@section Special Builtins
-@cindex special builtin
-
-For historical reasons, the @sc{posix} standard has classified
-several builtin commands as @emph{special}.
-When Bash is executing in @sc{posix} mode, the special builtins
-differ from other builtin commands in three respects:
-
-@enumerate
-@item
-Special builtins are found before shell functions during command lookup.
-
-@item
-If a special builtin returns an error status, a non-interactive shell exits.
-
-@item
-Assignment statements preceding the command stay in effect in the shell
-environment after the command completes.
-@end enumerate
-
-When Bash is not executing in @sc{posix} mode, these builtins behave no
-differently than the rest of the Bash builtin commands.
-The Bash @sc{posix} mode is described in @ref{Bash POSIX Mode}.
-
-These are the @sc{posix} special builtins:
-@example
-@w{break : . continue eval exec exit export readonly return set}
-@w{shift trap unset}
-@end example
-
-@node Shell Variables
-@chapter Shell Variables
-
-@menu
-* Bourne Shell Variables:: Variables which Bash uses in the same way
- as the Bourne Shell.
-* Bash Variables:: List of variables that exist in Bash.
-@end menu
-
-This chapter describes the shell variables that Bash uses.
-Bash automatically assigns default values to a number of variables.
-
-@node Bourne Shell Variables
-@section Bourne Shell Variables
-
-Bash uses certain shell variables in the same way as the Bourne shell.
-In some cases, Bash assigns a default value to the variable.
-
-@vtable @code
-
-@item CDPATH
-A colon-separated list of directories used as a search path for
-the @code{cd} builtin command.
-
-@item HOME
-The current user's home directory; the default for the @code{cd} builtin
-command.
-The value of this variable is also used by tilde expansion
-(@pxref{Tilde Expansion}).
-
-@item IFS
-A list of characters that separate fields; used when the shell splits
-words as part of expansion.
-
-@item MAIL
-If this parameter is set to a filename or directory name
-and the @env{MAILPATH} variable
-is not set, Bash informs the user of the arrival of mail in
-the specified file or Maildir-format directory.
-
-@item MAILPATH
-A colon-separated list of filenames which the shell periodically checks
-for new mail.
-Each list entry can specify the message that is printed when new mail
-arrives in the mail file by separating the filename from the message with
-a @samp{?}.
-When used in the text of the message, @code{$_} expands to the name of
-the current mail file.
-
-@item OPTARG
-The value of the last option argument processed by the @code{getopts} builtin.
-
-@item OPTIND
-The index of the last option argument processed by the @code{getopts} builtin.
-
-@item PATH
-A colon-separated list of directories in which the shell looks for
-commands.
-A zero-length (null) directory name in the value of @code{PATH} indicates the
-current directory.
-A null directory name may appear as two adjacent colons, or as an initial
-or trailing colon.
-
-
-@item PS1
-The primary prompt string. The default value is @samp{\s-\v\$ }.
-@xref{Controlling the Prompt}, for the complete list of escape
-sequences that are expanded before @env{PS1} is displayed.
-
-@item PS2
-The secondary prompt string. The default value is @samp{> }.
-
-@end vtable
-
-@node Bash Variables
-@section Bash Variables
-
-These variables are set or used by Bash, but other shells
-do not normally treat them specially.
-
-A few variables used by Bash are described in different chapters:
-variables for controlling the job control facilities
-(@pxref{Job Control Variables}).
-
-@vtable @code
-
-@item BASH
-The full pathname used to execute the current instance of Bash.
-
-@item BASHOPTS
-A colon-separated list of enabled shell options. Each word in
-the list is a valid argument for the @option{-s} option to the
-@code{shopt} builtin command (@pxref{The Shopt Builtin}).
-The options appearing in @env{BASHOPTS} are those reported
-as @samp{on} by @samp{shopt}.
-If this variable is in the environment when Bash
-starts up, each shell option in the list will be enabled before
-reading any startup files. This variable is readonly.
-
-@item BASHPID
-Expands to the process ID of the current Bash process.
-This differs from @code{$$} under certain circumstances, such as subshells
-that do not require Bash to be re-initialized.
-
-@item BASH_ALIASES
-An associative array variable whose members correspond to the internal
-list of aliases as maintained by the @code{alias} builtin.
-(@pxref{Bourne Shell Builtins}).
-Elements added to this array appear in the alias list; unsetting array
-elements cause aliases to be removed from the alias list.
-
-@item BASH_ARGC
-An array variable whose values are the number of parameters in each
-frame of the current bash execution call stack. The number of
-parameters to the current subroutine (shell function or script executed
-with @code{.} or @code{source}) is at the top of the stack. When a
-subroutine is executed, the number of parameters passed is pushed onto
-@code{BASH_ARGC}.
-The shell sets @code{BASH_ARGC} only when in extended debugging mode
-(see @ref{The Shopt Builtin}
-for a description of the @code{extdebug} option to the @code{shopt}
-builtin).
-
-@item BASH_ARGV
-An array variable containing all of the parameters in the current bash
-execution call stack. The final parameter of the last subroutine call
-is at the top of the stack; the first parameter of the initial call is
-at the bottom. When a subroutine is executed, the parameters supplied
-are pushed onto @code{BASH_ARGV}.
-The shell sets @code{BASH_ARGV} only when in extended debugging mode
-(see @ref{The Shopt Builtin}
-for a description of the @code{extdebug} option to the @code{shopt}
-builtin).
-
-@item BASH_CMDS
-An associative array variable whose members correspond to the internal
-hash table of commands as maintained by the @code{hash} builtin
-(@pxref{Bourne Shell Builtins}).
-Elements added to this array appear in the hash table; unsetting array
-elements cause commands to be removed from the hash table.
-
-@item BASH_COMMAND
-The command currently being executed or about to be executed, unless the
-shell is executing a command as the result of a trap,
-in which case it is the command executing at the time of the trap.
-
-@item BASH_COMPAT
-The value is used to set the shell's compatibility level.
-@xref{The Shopt Builtin}, for a description of the various compatibility
-levels and their effects.
-The value may be a decimal number (e.g., 4.2) or an integer (e.g., 42)
-corresponding to the desired compatibility level.
-If @code{BASH_COMPAT} is unset or set to the empty string, the compatibility
-level is set to the default for the current version.
-If @code{BASH_COMPAT} is set to a value that is not one of the valid
-compatibility levels, the shell prints an error message and sets the
-compatibility level to the default for the current version.
-The valid compatibility levels correspond to the compatibility options
-accepted by the @code{shopt} builtin described above (for example,
-@var{compat42} means that 4.2 and 42 are valid values).
-The current version is also a valid value.
-
-@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 BASH_EXECUTION_STRING
-The command argument to the @option{-c} invocation option.
-
-@item BASH_LINENO
-An array variable whose members are the line numbers in source files
-where each corresponding member of @var{FUNCNAME} was invoked.
-@code{$@{BASH_LINENO[$i]@}} is the line number in the source file
-(@code{$@{BASH_SOURCE[$i+1]@}}) where
-@code{$@{FUNCNAME[$i]@}} was called (or @code{$@{BASH_LINENO[$i-1]@}} if
-referenced within another shell function).
-Use @code{LINENO} to obtain the current line number.
-
-@item BASH_REMATCH
-An array variable whose members are assigned by the @samp{=~} binary
-operator to the @code{[[} conditional command
-(@pxref{Conditional Constructs}).
-The element with index 0 is the portion of the string
-matching the entire regular expression.
-The element with index @var{n} is the portion of the
-string matching the @var{n}th parenthesized subexpression.
-This variable is read-only.
-
-@item BASH_SOURCE
-An array variable whose members are the source filenames where the
-corresponding shell function names in the @code{FUNCNAME} array
-variable are defined.
-The shell function @code{$@{FUNCNAME[$i]@}} is defined in the file
-@code{$@{BASH_SOURCE[$i]@}} and called from @code{$@{BASH_SOURCE[$i+1]@}}
-
-@item BASH_SUBSHELL
-Incremented by one within each subshell or subshell environment when
-the shell begins executing in that environment.
-The initial value is 0.
-
-@item BASH_VERSINFO
-A readonly array variable (@pxref{Arrays})
-whose members hold version information for this instance of Bash.
-The values assigned to the array members are as follows:
-
-@table @code
-
-@item BASH_VERSINFO[0]
-The major version number (the @var{release}).
-
-@item BASH_VERSINFO[1]
-The minor version number (the @var{version}).
-
-@item BASH_VERSINFO[2]
-The patch level.
-
-@item BASH_VERSINFO[3]
-The build version.
-
-@item BASH_VERSINFO[4]
-The release status (e.g., @var{beta1}).
-
-@item BASH_VERSINFO[5]
-The value of @env{MACHTYPE}.
-@end table
-
-@item BASH_VERSION
-The version number of the current instance of Bash.
-
-@item BASH_XTRACEFD
-If set to an integer corresponding to a valid file descriptor, Bash
-will write the trace output generated when @samp{set -x}
-is enabled to that file descriptor.
-This allows tracing output to be separated from diagnostic and error
-messages.
-The file descriptor is closed when @code{BASH_XTRACEFD} is unset or assigned
-a new value.
-Unsetting @code{BASH_XTRACEFD} or assigning it the empty string causes the
-trace output to be sent to the standard error.
-Note that setting @code{BASH_XTRACEFD} to 2 (the standard error file
-descriptor) and then unsetting it will result in the standard error
-being closed.
-
-@item CHILD_MAX
-Set the number of exited child status values for the shell to remember.
-Bash will not allow this value to be decreased below a @sc{posix}-mandated
-minimum, and there is a maximum value (currently 8192) that this may
-not exceed.
-The minimum value is system-dependent.
-
-@item COLUMNS
-Used by the @code{select} command to determine the terminal width
-when printing selection lists.
-Automatically set if the @code{checkwinsize} option is enabled
-(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
-@code{SIGWINCH}.
-
-@item COMP_CWORD
-An index into @env{$@{COMP_WORDS@}} of the word containing the current
-cursor position.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (@pxref{Programmable Completion}).
-
-@item COMP_LINE
-The current command line.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (@pxref{Programmable Completion}).
-
-@item COMP_POINT
-The index of the current cursor position relative to the beginning of
-the current command.
-If the current cursor position is at the end of the current command,
-the value of this variable is equal to @code{$@{#COMP_LINE@}}.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (@pxref{Programmable Completion}).
-
-@item COMP_TYPE
-Set to an integer value corresponding to the type of completion attempted
-that caused a completion function to be called:
-@var{TAB}, for normal completion,
-@samp{?}, for listing completions after successive tabs,
-@samp{!}, for listing alternatives on partial word completion,
-@samp{@@}, to list completions if the word is not unmodified,
-or
-@samp{%}, for menu completion.
-This variable is available only in shell functions and external
-commands invoked by the
-programmable completion facilities (@pxref{Programmable Completion}).
-
-@item COMP_KEY
-The key (or final key of a key sequence) used to invoke the current
-completion function.
-
-@item COMP_WORDBREAKS
-The set of characters that the Readline library treats as word
-separators when performing word completion.
-If @code{COMP_WORDBREAKS} is unset, it loses its special properties,
-even if it is subsequently reset.
-
-@item COMP_WORDS
-An array variable consisting of the individual
-words in the current command line.
-The line is split into words as Readline would split it, using
-@code{COMP_WORDBREAKS} as described above.
-This variable is available only in shell functions invoked by the
-programmable completion facilities (@pxref{Programmable Completion}).
-
-@item COMPREPLY
-An array variable from which Bash reads the possible completions
-generated by a shell function invoked by the programmable completion
-facility (@pxref{Programmable Completion}).
-Each array element contains one possible completion.
-
-@item COPROC
-An array variable created to hold the file descriptors
-for output from and input to an unnamed coprocess (@pxref{Coprocesses}).
-
-@item DIRSTACK
-An array variable containing the current contents of the directory stack.
-Directories appear in the stack in the order they are displayed by the
-@code{dirs} builtin.
-Assigning to members of this array variable may be used to modify
-directories already in the stack, but the @code{pushd} and @code{popd}
-builtins must be used to add and remove directories.
-Assignment to this variable will not change the current directory.
-If @env{DIRSTACK} is unset, it loses its special properties, even if
-it is subsequently reset.
-
-@item EMACS
-If Bash finds this variable in the environment when the shell
-starts with value @samp{t}, it assumes that the shell is running in an
-Emacs shell buffer and disables line editing.
-
-@item ENV
-Similar to @code{BASH_ENV}; used when the shell is invoked in
-@sc{posix} Mode (@pxref{Bash POSIX Mode}).
-
-@item EUID
-The numeric effective user id of the current user. This variable
-is readonly.
-
-@item FCEDIT
-The editor used as a default by the @option{-e} option to the @code{fc}
-builtin command.
-
-@item FIGNORE
-A colon-separated list of suffixes to ignore when performing
-filename completion.
-A filename whose suffix matches one of the entries in
-@env{FIGNORE}
-is excluded from the list of matched filenames. A sample
-value is @samp{.o:~}
-
-@item FUNCNAME
-An array variable containing the names of all shell functions
-currently in the execution call stack.
-The element with index 0 is the name of any currently-executing
-shell function.
-The bottom-most element (the one with the highest index)
-is @code{"main"}.
-This variable exists only when a shell function is executing.
-Assignments to @env{FUNCNAME} have no effect and return an error status.
-If @env{FUNCNAME} is unset, it loses its special properties, even if
-it is subsequently reset.
-
-This variable can be used with @code{BASH_LINENO} and @code{BASH_SOURCE}.
-Each element of @code{FUNCNAME} has corresponding elements in
-@code{BASH_LINENO} and @code{BASH_SOURCE} to describe the call stack.
-For instance, @code{$@{FUNCNAME[$i]@}} was called from the file
-@code{$@{BASH_SOURCE[$i+1]@}} at line number @code{$@{BASH_LINENO[$i]@}}.
-The @code{caller} builtin displays the current call stack using this
-information.
-
-@item FUNCNEST
-If set to a numeric value greater than 0, defines a maximum function
-nesting level. Function invocations that exceed this nesting level
-will cause the current command to abort.
-
-@item GLOBIGNORE
-A colon-separated list of patterns defining the set of filenames to
-be ignored by filename expansion.
-If a filename matched by a filename expansion pattern also matches one
-of the patterns in @env{GLOBIGNORE}, it is removed from the list
-of matches.
-
-@item GROUPS
-An array variable containing the list of groups of which the current
-user is a member.
-Assignments to @env{GROUPS} have no effect and return an error status.
-If @env{GROUPS} is unset, it loses its special properties, even if it is
-subsequently reset.
-
-@item histchars
-Up to three characters which control history expansion, quick
-substitution, and tokenization (@pxref{History Interaction}).
-The first character is the
-@var{history expansion} character, that is, the character which signifies the
-start of a history expansion, normally @samp{!}. The second character is the
-character which signifies `quick substitution' when seen as the first
-character on a line, normally @samp{^}. The optional third character is the
-character which indicates that the remainder of the line is a comment when
-found as the first character of a word, usually @samp{#}. The history
-comment character causes history substitution to be skipped for the
-remaining words on the line. It does not necessarily cause the shell
-parser to treat the rest of the line as a comment.
-
-@item HISTCMD
-The history number, or index in the history list, of the current
-command. If @env{HISTCMD} is unset, it loses its special properties,
-even if it is subsequently reset.
-
-@item HISTCONTROL
-A colon-separated list of values controlling how commands are saved on
-the history list.
-If the list of values includes @samp{ignorespace}, lines which begin
-with a space character are not saved in the history list.
-A value of @samp{ignoredups} causes lines which match the previous
-history entry to not be saved.
-A value of @samp{ignoreboth} is shorthand for
-@samp{ignorespace} and @samp{ignoredups}.
-A value of @samp{erasedups} causes all previous lines matching the
-current line to be removed from the history list before that line
-is saved.
-Any value not in the above list is ignored.
-If @env{HISTCONTROL} is unset, or does not include a valid value,
-all lines read by the shell parser are saved on the history list,
-subject to the value of @env{HISTIGNORE}.
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-@env{HISTCONTROL}.
-
-@item HISTFILE
-The name of the file to which the command history is saved. The
-default value is @file{~/.bash_history}.
-
-@item HISTFILESIZE
-The maximum number of lines contained in the history file.
-When this variable is assigned a value, the history file is truncated,
-if necessary, to contain no more than that number of lines
-by removing the oldest entries.
-The history file is also truncated to this size after
-writing it when a shell exits.
-If the value is 0, the history file is truncated to zero size.
-Non-numeric values and numeric values less than zero inhibit truncation.
-The shell sets the default value to the value of @env{HISTSIZE}
-after reading any startup files.
-
-@item HISTIGNORE
-A colon-separated list of patterns used to decide which command
-lines should be saved on the history list. Each pattern is
-anchored at the beginning of the line and must match the complete
-line (no implicit @samp{*} is appended). Each pattern is tested
-against the line after the checks specified by @env{HISTCONTROL}
-are applied. In addition to the normal shell pattern matching
-characters, @samp{&} matches the previous history line. @samp{&}
-may be escaped using a backslash; the backslash is removed
-before attempting a match.
-The second and subsequent lines of a multi-line compound command are
-not tested, and are added to the history regardless of the value of
-@env{HISTIGNORE}.
-
-@env{HISTIGNORE} subsumes the function of @env{HISTCONTROL}. A
-pattern of @samp{&} is identical to @code{ignoredups}, and a
-pattern of @samp{[ ]*} is identical to @code{ignorespace}.
-Combining these two patterns, separating them with a colon,
-provides the functionality of @code{ignoreboth}.
-
-@item HISTSIZE
-The maximum number of commands to remember on the history list.
-If the value is 0, commands are not saved in the history list.
-Numeric values less than zero result in every command being saved
-on the history list (there is no limit).
-The shell sets the default value to 500 after reading any startup files.
-
-@item HISTTIMEFORMAT
-If this variable is set and not null, its value is used as a format string
-for @var{strftime} to print the time stamp associated with each history
-entry displayed by the @code{history} builtin.
-If this variable is set, time stamps are written to the history file so
-they may be preserved across shell sessions.
-This uses the history comment character to distinguish timestamps from
-other history lines.
-
-@item HOSTFILE
-Contains the name of a file in the same format as @file{/etc/hosts} that
-should be read when the shell needs to complete a hostname.
-The list of possible hostname completions may be changed while the shell
-is running;
-the next time hostname completion is attempted after the
-value is changed, Bash adds the contents of the new file to the
-existing list.
-If @env{HOSTFILE} is set, but has no value, or does not name a readable file,
-Bash attempts to read
-@file{/etc/hosts} to obtain the list of possible hostname completions.
-When @env{HOSTFILE} is unset, the hostname list is cleared.
-
-@item HOSTNAME
-The name of the current host.
-
-@item HOSTTYPE
-A string describing the machine Bash is running on.
-
-@item IGNOREEOF
-Controls the action of the shell on receipt of an @code{EOF} character
-as the sole input. If set, the value denotes the number
-of consecutive @code{EOF} characters that can be read as the
-first character on an input line
-before the shell will exit. If the variable exists but does not
-have a numeric value (or has no value) then the default is 10.
-If the variable does not exist, then @code{EOF} signifies the end of
-input to the shell. This is only in effect for interactive shells.
-
-@item INPUTRC
-The name of the Readline initialization file, overriding the default
-of @file{~/.inputrc}.
-
-@item LANG
-Used to determine the locale category for any category not specifically
-selected with a variable starting with @code{LC_}.
-
-@item LC_ALL
-This variable overrides the value of @env{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, and
-determines the behavior of range expressions, equivalence classes,
-and collating sequences within filename expansion and pattern matching
-(@pxref{Filename Expansion}).
-
-@item LC_CTYPE
-This variable determines the interpretation of characters and the
-behavior of character classes within filename expansion and pattern
-matching (@pxref{Filename Expansion}).
-
-@item LC_MESSAGES
-This variable determines the locale used to translate double-quoted
-strings preceded by a @samp{$} (@pxref{Locale Translation}).
-
-@item LC_NUMERIC
-This variable determines the locale category used for number formatting.
-
-@item LINENO
-The line number in the script or shell function currently executing.
-
-@item LINES
-Used by the @code{select} command to determine the column length
-for printing selection lists.
-Automatically set if the @code{checkwinsize} option is enabled
-(@pxref{The Shopt Builtin}), or in an interactive shell upon receipt of a
-@code{SIGWINCH}.
-
-@item MACHTYPE
-A string that fully describes the system type on which Bash
-is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
-
-@item MAILCHECK
-How often (in seconds) that the shell should check for mail in the
-files specified in the @env{MAILPATH} or @env{MAIL} variables.
-The default is 60 seconds. When it is time to check
-for mail, the shell does so before displaying the primary prompt.
-If this variable is unset, or set to a value that is not a number
-greater than or equal to zero, the shell disables mail checking.
-
-@item MAPFILE
-An array variable created to hold the text read by the
-@code{mapfile} builtin when no variable name is supplied.
-
-@item OLDPWD
-The previous working directory as set by the @code{cd} builtin.
-
-@item OPTERR
-If set to the value 1, Bash displays error messages
-generated by the @code{getopts} builtin command.
-
-@item OSTYPE
-A string describing the operating system Bash is running on.
-
-@item PIPESTATUS
-An array variable (@pxref{Arrays})
-containing a list of exit status values from the processes
-in the most-recently-executed foreground pipeline (which may
-contain only a single command).
-
-@item POSIXLY_CORRECT
-If this variable is in the environment when Bash starts, the shell
-enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
-startup files, as if the @option{--posix} invocation option had been supplied.
-If it is set while the shell is running, Bash enables @sc{posix} mode,
-as if the command
-@example
-@code{set -o posix}
-@end example
-@noindent
-had been executed.
-
-@item PPID
-The process @sc{id} of the shell's parent process. This variable
-is readonly.
-
-@item PROMPT_COMMAND
-If set, the value is interpreted as a command to execute
-before the printing of each primary prompt (@env{$PS1}).
-
-@item PROMPT_DIRTRIM
-If set to a number greater than zero, the value is used as the number of
-trailing directory components to retain when expanding the @code{\w} and
-@code{\W} prompt string escapes (@pxref{Controlling the Prompt}).
-Characters removed are replaced with an ellipsis.
-
-@item PS3
-The value of this variable is used as the prompt for the
-@code{select} command. If this variable is not set, the
-@code{select} command prompts with @samp{#? }
-
-@item PS4
-The value is the prompt printed before the command line is echoed
-when the @option{-x} option is set (@pxref{The Set Builtin}).
-The first character of @env{PS4} is replicated multiple times, as
-necessary, to indicate multiple levels of indirection.
-The default is @samp{+ }.
-
-@item PWD
-The current working directory as set by the @code{cd} builtin.
-
-@item RANDOM
-Each time this parameter is referenced, a random integer
-between 0 and 32767 is generated. Assigning a value to this
-variable seeds the random number generator.
-
-@item READLINE_LINE
-The contents of the Readline line buffer, for use
-with @samp{bind -x} (@pxref{Bash Builtins}).
-
-@item READLINE_POINT
-The position of the insertion point in the Readline line buffer, for use
-with @samp{bind -x} (@pxref{Bash Builtins}).
-
-@item REPLY
-The default variable for the @code{read} builtin.
-
-@item SECONDS
-This variable expands to the number of seconds since the
-shell was started. Assignment to this variable resets
-the count to the value assigned, and the expanded value
-becomes the value assigned plus the number of seconds
-since the assignment.
-
-@item SHELL
-The full pathname to the shell is kept in this environment variable.
-If it is not set when the shell starts,
-Bash assigns to it the full pathname of the current user's login shell.
-
-@item SHELLOPTS
-A colon-separated list of enabled shell options. Each word in
-the list is a valid argument for the @option{-o} option to the
-@code{set} builtin command (@pxref{The Set Builtin}).
-The options appearing in @env{SHELLOPTS} are those reported
-as @samp{on} by @samp{set -o}.
-If this variable is in the environment when Bash
-starts up, each shell option in the list will be enabled before
-reading any startup files. This variable is readonly.
-
-@item SHLVL
-Incremented by one each time a new instance of Bash is started. This is
-intended to be a count of how deeply your Bash shells are nested.
-
-@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}
-reserved word should be displayed.
-The @samp{%} character introduces an
-escape sequence that is expanded to a time value or other
-information.
-The escape sequences and their meanings are as
-follows; the braces denote optional portions.
-
-@table @code
-
-@item %%
-A literal @samp{%}.
-
-@item %[@var{p}][l]R
-The elapsed time in seconds.
-
-@item %[@var{p}][l]U
-The number of CPU seconds spent in user mode.
-
-@item %[@var{p}][l]S
-The number of CPU seconds spent in system mode.
-
-@item %P
-The CPU percentage, computed as (%U + %S) / %R.
-@end table
-
-The optional @var{p} is a digit specifying the precision, the number of
-fractional digits after a decimal point.
-A value of 0 causes no decimal point or fraction to be output.
-At most three places after the decimal point may be specified; values
-of @var{p} greater than 3 are changed to 3.
-If @var{p} is not specified, the value 3 is used.
-
-The optional @code{l} specifies a longer format, including minutes, of
-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.
-
-@item TMOUT
-If set to a value greater than zero, @code{TMOUT} is treated as the
-default timeout for the @code{read} builtin (@pxref{Bash Builtins}).
-The @code{select} command (@pxref{Conditional Constructs}) terminates
-if input does not arrive after @code{TMOUT} seconds when input is coming
-from a terminal.
-
-In an interactive shell, the value is interpreted as
-the number of seconds to wait for a line of input after issuing
-the primary prompt.
-Bash
-terminates after waiting for that number of seconds if a complete
-line of input does not arrive.
-
-@item TMPDIR
-If set, Bash uses its value as the name of a directory in which
-Bash creates temporary files for the shell's use.
-
-@item UID
-The numeric real user id of the current user. This variable is readonly.
-
-@end vtable
-
-@node Bash Features
-@chapter Bash Features
-
-This chapter describes features unique to Bash.
-
-@menu
-* Invoking Bash:: Command line options that you can give
- to Bash.
-* Bash Startup Files:: When and how Bash executes scripts.
-* Interactive Shells:: What an interactive shell is.
-* Bash Conditional Expressions:: Primitives used in composing expressions for
- the @code{test} builtin.
-* Shell Arithmetic:: Arithmetic on shell variables.
-* Aliases:: Substituting one command for another.
-* Arrays:: Array Variables.
-* The Directory Stack:: History of visited directories.
-* Controlling the Prompt:: Customizing the various prompt strings.
-* The Restricted Shell:: A more controlled mode of shell execution.
-* Bash POSIX Mode:: Making Bash behave more closely to what
- the POSIX standard specifies.
-@end menu
-
-@node Invoking Bash
-@section Invoking Bash
-
-@example
-bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
-bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
-bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
-@end example
-
-All of the single-character options used with the @code{set} builtin
-(@pxref{The Set Builtin}) can be used as options when the shell is invoked.
-In addition, there are several multi-character
-options that you can use. These options must appear on the command
-line before the single-character options to be recognized.
-
-@table @code
-@item --debugger
-Arrange for the debugger profile to be executed before the shell
-starts. Turns on extended debugging mode (see @ref{The Shopt Builtin}
-for a description of the @code{extdebug} option to the @code{shopt}
-builtin).
-
-@item --dump-po-strings
-A list of all double-quoted strings preceded by @samp{$}
-is printed on the standard output
-in the @sc{gnu} @code{gettext} PO (portable object) file format.
-Equivalent to @option{-D} except for the output format.
-
-@item --dump-strings
-Equivalent to @option{-D}.
-
-@item --help
-Display a usage message on standard output and exit successfully.
-
-@item --init-file @var{filename}
-@itemx --rcfile @var{filename}
-Execute commands from @var{filename} (instead of @file{~/.bashrc})
-in an interactive shell.
-
-@item --login
-Equivalent to @option{-l}.
-
-@item --noediting
-Do not use the @sc{gnu} Readline library (@pxref{Command Line Editing})
-to read command lines when the shell is interactive.
-
-@item --noprofile
-Don't load the system-wide startup file @file{/etc/profile}
-or any of the personal initialization files
-@file{~/.bash_profile}, @file{~/.bash_login}, or @file{~/.profile}
-when Bash is invoked as a login shell.
-
-@item --norc
-Don't read the @file{~/.bashrc} initialization file in an
-interactive shell. This is on by default if the shell is
-invoked as @code{sh}.
-
-@item --posix
-Change the behavior of Bash where the default operation differs
-from the @sc{posix} standard to match the standard. This
-is intended to make Bash behave as a strict superset of that
-standard. @xref{Bash POSIX Mode}, for a description of the Bash
-@sc{posix} mode.
-
-@item --restricted
-Make the shell a restricted shell (@pxref{The Restricted Shell}).
-
-@item --verbose
-Equivalent to @option{-v}. Print shell input lines as they're read.
-
-@item --version
-Show version information for this instance of
-Bash on the standard output and exit successfully.
-@end table
-
-There are several single-character options that may be supplied at
-invocation which are not available with the @code{set} builtin.
-
-@table @code
-@item -c
-Read and execute commands from the first non-option argument
-@var{command_string}, then exit.
-If there are arguments after the @var{command_string},
-the first argument is assigned to @code{$0}
-and any remaining arguments are assigned to the positional parameters.
-The assignment to @code{$0} sets the name of the shell, which is used
-in warning and error messages.
-
-@item -i
-Force the shell to run interactively. Interactive shells are
-described in @ref{Interactive Shells}.
-
-@item -l
-Make this shell act as if it had been directly invoked by login.
-When the shell is interactive, this is equivalent to starting a
-login shell with @samp{exec -l bash}.
-When the shell is not interactive, the login shell startup files will
-be executed.
-@samp{exec bash -l} or @samp{exec bash --login}
-will replace the current shell with a Bash login shell.
-@xref{Bash Startup Files}, for a description of the special behavior
-of a login shell.
-
-@item -r
-Make the shell a restricted shell (@pxref{The Restricted Shell}).
-
-@item -s
-If this option is present, or if no arguments remain after option
-processing, then commands are read from the standard input.
-This option allows the positional parameters to be set
-when invoking an interactive shell.
-
-@item -D
-A list of all double-quoted strings preceded by @samp{$}
-is printed on the standard output.
-These are the strings that
-are subject to language translation when the current locale
-is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
-This implies the @option{-n} option; no commands will be executed.
-
-@item [-+]O [@var{shopt_option}]
-@var{shopt_option} is one of the shell options accepted by the
-@code{shopt} builtin (@pxref{The Shopt Builtin}).
-If @var{shopt_option} is present, @option{-O} sets the value of that option;
-@option{+O} unsets it.
-If @var{shopt_option} is not supplied, the names and values of the shell
-options accepted by @code{shopt} are printed on the standard output.
-If the invocation option is @option{+O}, the output is displayed in a format
-that may be reused as input.
-
-@item --
-A @code{--} signals the end of options and disables further option
-processing.
-Any arguments after the @code{--} are treated as filenames and arguments.
-@end table
-
-@cindex login shell
-A @emph{login} shell is one whose first character of argument zero is
-@samp{-}, or one invoked with the @option{--login} option.
-
-@cindex interactive shell
-An @emph{interactive} shell is one started without non-option arguments,
-unless @option{-s} is specified,
-without specifying the @option{-c} option, and whose input and output are both
-connected to terminals (as determined by @code{isatty(3)}), or one
-started with the @option{-i} option. @xref{Interactive Shells}, for more
-information.
-
-If arguments remain after option processing, and neither the
-@option{-c} nor the @option{-s}
-option has been supplied, the first argument is assumed to
-be the name of a file containing shell commands (@pxref{Shell Scripts}).
-When Bash is invoked in this fashion, @code{$0}
-is set to the name of the file, and the positional parameters
-are set to the remaining arguments.
-Bash reads and executes commands from this file, then exits.
-Bash's exit status is the exit status of the last command executed
-in the script. If no commands are executed, the exit status is 0.
-
-@node Bash Startup Files
-@section Bash Startup Files
-@cindex startup files
-
-This section describes how Bash executes its startup files.
-If any of the files exist but cannot be read, Bash reports an error.
-Tildes are expanded in filenames as described above under
-Tilde Expansion (@pxref{Tilde Expansion}).
-
-Interactive shells are described in @ref{Interactive Shells}.
-
-@subsubheading Invoked as an interactive login shell, or with @option{--login}
-
-When Bash is invoked as an interactive login shell, or as a
-non-interactive shell with the @option{--login} option, 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
-and executes commands from the first one that exists and is readable.
-The @option{--noprofile} option may be used when the shell is started to
-inhibit this behavior.
-
-When a login shell exits, Bash reads and executes commands from
-the file @file{~/.bash_logout}, if it exists.
-
-@subsubheading Invoked as an interactive non-login shell
-
-When an interactive shell that is not a login shell is started, Bash
-reads and executes commands from @file{~/.bashrc}, if that file exists.
-This may be inhibited by using the @option{--norc} option.
-The @option{--rcfile @var{file}} option will force Bash to read and
-execute commands from @var{file} instead of @file{~/.bashrc}.
-
-So, typically, your @file{~/.bash_profile} contains the line
-@example
-@code{if [ -f ~/.bashrc ]; then . ~/.bashrc; fi}
-@end example
-@noindent
-after (or before) any login-specific initializations.
-
-@subsubheading Invoked non-interactively
-
-When Bash is started non-interactively, to run a shell script,
-for example, it looks for the variable @env{BASH_ENV} in the environment,
-expands its value if it appears there, and uses the expanded value as
-the name of a file to read and execute. Bash behaves as if the
-following command were executed:
-@example
-@code{if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi}
-@end example
-@noindent
-but the value of the @env{PATH} variable is not used to search for the
-filename.
-
-As noted above, if a non-interactive shell is invoked with the
-@option{--login} option, Bash attempts to read and execute commands from the
-login shell startup files.
-
-@subsubheading Invoked with name @code{sh}
-
-If Bash is invoked with the name @code{sh}, it tries to mimic the
-startup behavior of historical versions of @code{sh} as closely as
-possible, while conforming to the @sc{posix} standard as well.
-
-When invoked as an interactive login shell, or as a non-interactive
-shell with the @option{--login} option, it first attempts to read
-and execute commands from @file{/etc/profile} and @file{~/.profile}, in
-that order.
-The @option{--noprofile} option may be used to inhibit this behavior.
-When invoked as an interactive shell with the name @code{sh}, Bash
-looks for the variable @env{ENV}, expands its value if it is defined,
-and uses the expanded value as the name of a file to read and execute.
-Since a shell invoked as @code{sh} does not attempt to read and execute
-commands from any other startup files, the @option{--rcfile} option has
-no effect.
-A non-interactive shell invoked with the name @code{sh} does not attempt
-to read any other startup files.
-
-When invoked as @code{sh}, Bash enters @sc{posix} mode after
-the startup files are read.
-
-@subsubheading Invoked in @sc{posix} mode
-
-When Bash is started in @sc{posix} mode, as with the
-@option{--posix} command line option, it follows the @sc{posix} standard
-for startup files.
-In this mode, interactive shells expand the @env{ENV} variable
-and commands are read and executed from the file whose name is the
-expanded value.
-No other startup files are read.
-
-@subsubheading Invoked by remote shell daemon
-
-Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}.
-If Bash determines it is being run in
-this fashion, it reads and executes commands from @file{~/.bashrc}, if that
-file exists and is readable.
-It will not do this if invoked as @code{sh}.
-The @option{--norc} option may be used to inhibit this behavior, and the
-@option{--rcfile} option may be used to force another file to be read, but
-neither @code{rshd} nor @code{sshd} generally invoke the shell with those
-options or allow them to be specified.
-
-@subsubheading Invoked with unequal effective and real @sc{uid/gid}s
-
-If Bash is started with the effective user (group) id not equal to the
-real user (group) id, and the @option{-p} option is not supplied, no startup
-files are read, shell functions are not inherited from the environment,
-the @env{SHELLOPTS}, @env{BASHOPTS}, @env{CDPATH}, and @env{GLOBIGNORE}
-variables, if they appear in the environment, are ignored, and the effective
-user id is set to the real user id.
-If the @option{-p} option is supplied at invocation, the startup behavior is
-the same, but the effective user id is not reset.
-
-@node Interactive Shells
-@section Interactive Shells
-@cindex interactive shell
-@cindex shell, interactive
-
-@menu
-* What is an Interactive Shell?:: What determines whether a shell is Interactive.
-* Is this Shell Interactive?:: How to tell if a shell is interactive.
-* Interactive Shell Behavior:: What changes in a interactive shell?
-@end menu
-
-@node What is an Interactive Shell?
-@subsection What is an Interactive Shell?
-
-An interactive shell
-is one started without non-option arguments, unless @option{-s} is
-specified, without specifying the @option{-c} option, and
-whose input and error output are both
-connected to terminals (as determined by @code{isatty(3)}),
-or one started with the @option{-i} option.
-
-An interactive shell generally reads from and writes to a user's
-terminal.
-
-The @option{-s} invocation option may be used to set the positional parameters
-when an interactive shell is started.
-
-@node Is this Shell Interactive?
-@subsection Is this Shell Interactive?
-
-To determine within a startup script whether or not Bash is
-running interactively,
-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
-
-Alternatively, startup scripts may examine the variable
-@env{PS1}; it is unset in non-interactive shells, and set in
-interactive shells. Thus:
-
-@example
-if [ -z "$PS1" ]; then
- echo This shell is not interactive
-else
- echo This shell is interactive
-fi
-@end example
-
-@node Interactive Shell Behavior
-@subsection Interactive Shell Behavior
-
-When the shell is running interactively, it changes its behavior in
-several ways.
-
-@enumerate
-@item
-Startup files are read and executed as described in @ref{Bash Startup Files}.
-
-@item
-Job Control (@pxref{Job Control}) is enabled by default. When job
-control is in effect, Bash ignores the keyboard-generated job control
-signals @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
-
-@item
-Bash expands and displays @env{PS1} before reading the first line
-of a command, and expands and displays @env{PS2} before reading the
-second and subsequent lines of a multi-line command.
-
-@item
-Bash executes the value of the @env{PROMPT_COMMAND} variable as a command
-before printing the primary prompt, @env{$PS1}
-(@pxref{Bash Variables}).
-
-@item
-Readline (@pxref{Command Line Editing}) is used to read commands from
-the user's terminal.
-
-@item
-Bash inspects the value of the @code{ignoreeof} option to @code{set -o}
-instead of exiting immediately when it receives an @code{EOF} on its
-standard input when reading a command (@pxref{The Set Builtin}).
-
-@item
-Command history (@pxref{Bash History Facilities})
-and history expansion (@pxref{History Interaction})
-are enabled by default.
-Bash will save the command history to the file named by @env{$HISTFILE}
-when a shell with history enabled exits.
-
-@item
-Alias expansion (@pxref{Aliases}) is performed by default.
-
-@item
-In the absence of any traps, Bash ignores @code{SIGTERM}
-(@pxref{Signals}).
-
-@item
-In the absence of any traps, @code{SIGINT} is caught and handled
-((@pxref{Signals}).
-@code{SIGINT} will interrupt some shell builtins.
-
-@item
-An interactive login shell sends a @code{SIGHUP} to all jobs on exit
-if the @code{huponexit} shell option has been enabled (@pxref{Signals}).
-
-@item
-The @option{-n} invocation option is ignored, and @samp{set -n} has
-no effect (@pxref{The Set Builtin}).
-
-@item
-Bash will check for mail periodically, depending on the values of the
-@env{MAIL}, @env{MAILPATH}, and @env{MAILCHECK} shell variables
-(@pxref{Bash Variables}).
-
-@item
-Expansion errors due to references to unbound shell variables after
-@samp{set -u} has been enabled will not cause the shell to exit
-(@pxref{The Set Builtin}).
-
-@item
-The shell will not exit on expansion errors caused by @var{var} being unset
-or null in @code{$@{@var{var}:?@var{word}@}} expansions
-(@pxref{Shell Parameter Expansion}).
-
-@item
-Redirection errors encountered by shell builtins will not cause the
-shell to exit.
-
-@item
-When running in @sc{posix} mode, a special builtin returning an error
-status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
-
-@item
-A failed @code{exec} will not cause the shell to exit
-(@pxref{Bourne Shell Builtins}).
-
-@item
-Parser syntax errors will not cause the shell to exit.
-
-@item
-Simple spelling correction for directory arguments to the @code{cd}
-builtin is enabled by default (see the description of the @code{cdspell}
-option to the @code{shopt} builtin in @ref{The Shopt Builtin}).
-
-@item
-The shell will check the value of the @env{TMOUT} variable and exit
-if a command is not read within the specified number of seconds after
-printing @env{$PS1} (@pxref{Bash Variables}).
-
-@end enumerate
-
-@node Bash Conditional Expressions
-@section Bash Conditional Expressions
-@cindex expressions, conditional
-
-Conditional expressions are used by the @code{[[} compound command
-and the @code{test} and @code{[} builtin commands.
-
-Expressions may be unary or binary.
-Unary expressions are often used to examine the status of a file.
-There are string operators and numeric comparison operators as well.
-If the @var{file} argument to one of the primaries is of the form
-@file{/dev/fd/@var{N}}, then file descriptor @var{N} is checked.
-If the @var{file} argument to one of the primaries is one of
-@file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
-descriptor 0, 1, or 2, respectively, is checked.
-
-When used with @code{[[}, the @samp{<} and @samp{>} operators sort
-lexicographically using the current locale.
-The @code{test} command uses ASCII ordering.
-
-Unless otherwise specified, primaries that operate on files follow symbolic
-links and operate on the target of the link, rather than the link itself.
-
-@table @code
-@item -a @var{file}
-True if @var{file} exists.
-
-@item -b @var{file}
-True if @var{file} exists and is a block special file.
-
-@item -c @var{file}
-True if @var{file} exists and is a character special file.
-
-@item -d @var{file}
-True if @var{file} exists and is a directory.
-
-@item -e @var{file}
-True if @var{file} exists.
-
-@item -f @var{file}
-True if @var{file} exists and is a regular file.
-
-@item -g @var{file}
-True if @var{file} exists and its set-group-id bit is set.
-
-@item -h @var{file}
-True if @var{file} exists and is a symbolic link.
-
-@item -k @var{file}
-True if @var{file} exists and its "sticky" bit is set.
-
-@item -p @var{file}
-True if @var{file} exists and is a named pipe (FIFO).
-
-@item -r @var{file}
-True if @var{file} exists and is readable.
-
-@item -s @var{file}
-True if @var{file} exists and has a size greater than zero.
-
-@item -t @var{fd}
-True if file descriptor @var{fd} is open and refers to a terminal.
-
-@item -u @var{file}
-True if @var{file} exists and its set-user-id bit is set.
-
-@item -w @var{file}
-True if @var{file} exists and is writable.
-
-@item -x @var{file}
-True if @var{file} exists and is executable.
-
-@item -G @var{file}
-True if @var{file} exists and is owned by the effective group id.
-
-@item -L @var{file}
-True if @var{file} exists and is a symbolic link.
-
-@item -N @var{file}
-True if @var{file} exists and has been modified since it was last read.
-
-@item -O @var{file}
-True if @var{file} exists and is owned by the effective user id.
-
-@item -S @var{file}
-True if @var{file} exists and is a socket.
-
-@item @var{file1} -ef @var{file2}
-True if @var{file1} and @var{file2} refer to the same device and
-inode numbers.
-
-@item @var{file1} -nt @var{file2}
-True if @var{file1} is newer (according to modification date)
-than @var{file2}, or if @var{file1} exists and @var{file2} does not.
-
-@item @var{file1} -ot @var{file2}
-True if @var{file1} is older than @var{file2},
-or if @var{file2} exists and @var{file1} does not.
-
-@item -o @var{optname}
-True if the shell option @var{optname} is enabled.
-The list of options appears in the description of the @option{-o}
-option to the @code{set} builtin (@pxref{The Set Builtin}).
-
-@item -v @var{varname}
-True if the shell variable @var{varname} is set (has been assigned a value).
-
-@item -R @var{varname}
-True if the shell variable @var{varname} is set and is a name reference.
-
-@item -z @var{string}
-True if the length of @var{string} is zero.
-
-@item -n @var{string}
-@itemx @var{string}
-True if the length of @var{string} is non-zero.
-
-@item @var{string1} == @var{string2}
-@itemx @var{string1} = @var{string2}
-True if the strings are equal.
-When used with the @code{[[} command, this performs pattern matching as
-described above (@pxref{Conditional Constructs}).
-
-@samp{=} should be used with the @code{test} command for @sc{posix} conformance.
-
-@item @var{string1} != @var{string2}
-True if the strings are not equal.
-
-@item @var{string1} < @var{string2}
-True if @var{string1} sorts before @var{string2} lexicographically.
-
-@item @var{string1} > @var{string2}
-True if @var{string1} sorts after @var{string2} lexicographically.
-
-@item @var{arg1} OP @var{arg2}
-@code{OP} is one of
-@samp{-eq}, @samp{-ne}, @samp{-lt}, @samp{-le}, @samp{-gt}, or @samp{-ge}.
-These arithmetic binary operators return true if @var{arg1}
-is equal to, not equal to, less than, less than or equal to,
-greater than, or greater than or equal to @var{arg2},
-respectively. @var{Arg1} and @var{arg2}
-may be positive or negative integers.
-@end table
-
-@node Shell Arithmetic
-@section Shell Arithmetic
-@cindex arithmetic, shell
-@cindex shell arithmetic
-@cindex expressions, arithmetic
-@cindex evaluation, arithmetic
-@cindex arithmetic evaluation
-
-The shell allows arithmetic expressions to be evaluated, as one of
-the shell expansions or by the @code{let} and the @option{-i} option
-to the @code{declare} builtins.
-
-Evaluation is done in fixed-width integers with no check for overflow,
-though division by 0 is trapped and flagged as an error.
-The operators and their precedence, associativity, and values
-are the same as in the C language.
-The following list of operators is grouped into levels of
-equal-precedence operators.
-The levels are listed in order of decreasing precedence.
-
-@table @code
-
-@item @var{id}++ @var{id}--
-variable post-increment and post-decrement
-
-@item ++@var{id} --@var{id}
-variable pre-increment and pre-decrement
-
-@item - +
-unary minus and plus
-
-@item ! ~
-logical and bitwise negation
-
-@item **
-exponentiation
-
-@item * / %
-multiplication, division, remainder
-
-@item + -
-addition, subtraction
-
-@item << >>
-left and right bitwise shifts
-
-@item <= >= < >
-comparison
-
-@item == !=
-equality and inequality
-
-@item &
-bitwise AND
-
-@item ^
-bitwise exclusive OR
-
-@item |
-bitwise OR
-
-@item &&
-logical AND
-
-@item ||
-logical OR
-
-@item expr ? expr : expr
-conditional operator
-
-@item = *= /= %= += -= <<= >>= &= ^= |=
-assignment
-
-@item expr1 , expr2
-comma
-@end table
-
-Shell variables are allowed as operands; parameter expansion is
-performed before the expression is evaluated.
-Within an expression, shell variables may also be referenced by name
-without using the parameter expansion syntax.
-A shell variable that is null or unset evaluates to 0 when referenced
-by name without using the parameter expansion syntax.
-The value of a variable is evaluated as an arithmetic expression
-when it is referenced, or when a variable which has been given the
-@var{integer} attribute using @samp{declare -i} is assigned a value.
-A null value evaluates to 0.
-A shell variable need not have its @var{integer} attribute turned on
-to be used in an expression.
-
-Constants with a leading 0 are interpreted as octal numbers.
-A leading @samp{0x} or @samp{0X} denotes hexadecimal. Otherwise,
-numbers take the form [@var{base}@code{#}]@var{n}, where the optional @var{base}
-is a decimal number between 2 and 64 representing the arithmetic
-base, and @var{n} is a number in that base.
-If @var{base}@code{#} is omitted, then base 10 is used.
-When specifying @var{n},
-he digits greater than 9 are represented by the lowercase letters,
-the uppercase letters, @samp{@@}, and @samp{_}, in that order.
-If @var{base} is less than or equal to 36, lowercase and uppercase
-letters may be used interchangeably to represent numbers between 10
-and 35.
-
-Operators are evaluated in order of precedence. Sub-expressions in
-parentheses are evaluated first and may override the precedence
-rules above.
-
-@node Aliases
-@section Aliases
-@cindex alias expansion
-
-@var{Aliases} allow a string to be substituted for a word when it is used
-as the first word of a simple command.
-The shell maintains a list of aliases that may be set and unset with
-the @code{alias} and @code{unalias} builtin commands.
-
-The first word of each simple command, if unquoted, is checked to see
-if it has an alias.
-If so, that word is replaced by the text of the alias.
-The characters @samp{/}, @samp{$}, @samp{`}, @samp{=} and any of the
-shell metacharacters or quoting characters listed above may not appear
-in an alias name.
-The replacement text may contain any valid
-shell input, including shell metacharacters.
-The first word of the replacement text is tested for
-aliases, but a word that is identical to an alias being expanded
-is not expanded a second time.
-This means that one may alias @code{ls} to @code{"ls -F"},
-for instance, and Bash does not try to recursively expand the
-replacement text.
-If the last character of the alias value is a
-@var{blank}, then the next command word following the
-alias is also checked for alias expansion.
-
-Aliases are created and listed with the @code{alias}
-command, and removed with the @code{unalias} command.
-
-There is no mechanism for using arguments in the replacement text,
-as in @code{csh}.
-If arguments are needed, a shell function should be used
-(@pxref{Shell Functions}).
-
-Aliases are not expanded when the shell is not interactive,
-unless the @code{expand_aliases} shell option is set using
-@code{shopt} (@pxref{The Shopt Builtin}).
-
-The rules concerning the definition and use of aliases are
-somewhat confusing. Bash
-always reads at least one complete line
-of input before executing any
-of the commands on that line. Aliases are expanded when a
-command is read, not when it is executed. Therefore, an
-alias definition appearing on the same line as another
-command does not take effect until the next line of input is read.
-The commands following the alias definition
-on that line are not affected by the new alias.
-This behavior is also an issue when functions are executed.
-Aliases are expanded when a function definition is read,
-not when the function is executed, because a function definition
-is itself a command. As a consequence, aliases
-defined in a function are not available until after that
-function is executed. To be safe, always put
-alias definitions on a separate line, and do not use @code{alias}
-in compound commands.
-
-For almost every purpose, shell functions are preferred over aliases.
-
-@node Arrays
-@section Arrays
-@cindex arrays
-
-Bash provides one-dimensional indexed and associative array variables.
-Any variable may be used as an indexed array;
-the @code{declare} builtin will explicitly declare an array.
-There is no maximum
-limit on the size of an array, nor any requirement that members
-be indexed or assigned contiguously.
-Indexed arrays are referenced using integers (including arithmetic
-expressions (@pxref{Shell Arithmetic})) and are zero-based;
-associative arrays use arbitrary strings.
-Unless otherwise noted, indexed array indices must be non-negative integers.
-
-An indexed array is created automatically if any variable is assigned to
-using the syntax
-@example
-@var{name}[@var{subscript}]=@var{value}
-@end example
-
-@noindent
-The @var{subscript}
-is treated as an arithmetic expression that must evaluate to a number.
-To explicitly declare an array, use
-@example
-declare -a @var{name}
-@end example
-@noindent
-The syntax
-@example
-declare -a @var{name}[@var{subscript}]
-@end example
-@noindent
-is also accepted; the @var{subscript} is ignored.
-
-@noindent
-Associative arrays are created using
-@example
-declare -A @var{name}.
-@end example
-
-Attributes may be
-specified for an array variable using the @code{declare} and
-@code{readonly} builtins. Each attribute applies to all members of
-an array.
-
-Arrays are assigned to using compound assignments of the form
-@example
-@var{name}=(@var{value1} @var{value2} @dots{} )
-@end example
-@noindent
-where each
-@var{value} is of the form @code{[@var{subscript}]=}@var{string}.
-Indexed array assignments do not require anything but @var{string}.
-When assigning to indexed arrays, if
-the optional subscript is supplied, that index is assigned to;
-otherwise the index of the element assigned is the last index assigned
-to by the statement plus one. Indexing starts at zero.
-
-When assigning to an associative array, the subscript is required.
-
-This syntax is also accepted by the @code{declare}
-builtin. Individual array elements may be assigned to using the
-@code{@var{name}[@var{subscript}]=@var{value}} syntax introduced above.
-
-When assigning to an indexed array, if @var{name}
-is subscripted by a negative number, that number is
-interpreted as relative to one greater than the maximum index of
-@var{name}, so negative indices count back from the end of the
-array, and an index of -1 references the last element.
-
-Any element of an array may be referenced using
-@code{$@{@var{name}[@var{subscript}]@}}.
-The braces are required to avoid
-conflicts with the shell's filename expansion operators. If the
-@var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
-of the array @var{name}. These subscripts differ only when the word
-appears within double quotes.
-If the word is double-quoted,
-@code{$@{@var{name}[*]@}} expands to a single word with
-the value of each array member separated by the first character of the
-@env{IFS} variable, and @code{$@{@var{name}[@@]@}} expands each element of
-@var{name} to a separate word. When there are no array members,
-@code{$@{@var{name}[@@]@}} expands to nothing.
-If the double-quoted expansion occurs within a word, the expansion of
-the first parameter is joined with the beginning part of the original
-word, and the expansion of the last parameter is joined with the last
-part of the original word.
-This is analogous to the
-expansion of the special parameters @samp{@@} and @samp{*}.
-@code{$@{#@var{name}[@var{subscript}]@}} expands to the length of
-@code{$@{@var{name}[@var{subscript}]@}}.
-If @var{subscript} is @samp{@@} or
-@samp{*}, the expansion is the number of elements in the array.
-If the @var{subscript}
-used to reference an element of an indexed array
-evaluates to a number less than zero, it is
-interpreted as relative to one greater than the maximum index of the array,
-so negative indices count back from the end of the array,
-and an index of -1 refers to the last element.
-
-Referencing an array variable without a subscript is equivalent to
-referencing with a subscript of 0.
-Any reference to a variable using a valid subscript is legal, and
-@code{bash} will create an array if necessary.
-
-An array variable is considered set if a subscript has been assigned a
-value. The null string is a valid value.
-
-It is possible to obtain the keys (indices) of an array as well as the values.
-$@{!@var{name}[@@]@} and $@{!@var{name}[*]@} expand to the indices
-assigned in array variable @var{name}.
-The treatment when in double quotes is similar to the expansion of the
-special parameters @samp{@@} and @samp{*} within double quotes.
-
-The @code{unset} builtin is used to destroy arrays.
-@code{unset @var{name}[@var{subscript}]}
-destroys the array element at index @var{subscript}.
-Negative subscripts to indexed arrays are interpreted as described above.
-Care must be taken to avoid unwanted side effects caused by filename
-expansion.
-@code{unset @var{name}}, where @var{name} is an array, removes the
-entire array. A subscript of @samp{*} or @samp{@@} also removes the
-entire array.
-
-The @code{declare}, @code{local}, and @code{readonly}
-builtins each accept a @option{-a} option to specify an indexed
-array and a @option{-A} option to specify an associative array.
-If both options are supplied, @option{-A} takes precedence.
-The @code{read} builtin accepts a @option{-a}
-option to assign a list of words read from the standard input
-to an array, and can read values from the standard input into
-individual array elements. The @code{set} and @code{declare}
-builtins display array values in a way that allows them to be
-reused as input.
-
-@node The Directory Stack
-@section The Directory Stack
-@cindex directory stack
-
-@menu
-* Directory Stack Builtins:: Bash builtin commands to manipulate
- the directory stack.
-@end menu
-
-The directory stack is a list of recently-visited directories. The
-@code{pushd} builtin adds directories to the stack as it changes
-the current directory, and the @code{popd} builtin removes specified
-directories from the stack and changes the current directory to
-the directory removed. The @code{dirs} builtin displays the contents
-of the directory stack.
-
-The contents of the directory stack are also visible
-as the value of the @env{DIRSTACK} shell variable.
-
-@node Directory Stack Builtins
-@subsection Directory Stack Builtins
-
-@table @code
-
-@item dirs
-@btindex dirs
-@example
-dirs [-clpv] [+@var{N} | -@var{N}]
-@end example
-
-Display the list of currently remembered directories. Directories
-are added to the list with the @code{pushd} command; the
-@code{popd} command removes directories from the list.
-
-@table @code
-@item -c
-Clears the directory stack by deleting all of the elements.
-@item -l
-Produces a listing using full pathnames;
-the default listing format uses a tilde to denote the home directory.
-@item -p
-Causes @code{dirs} to print the directory stack with one entry per
-line.
-@item -v
-Causes @code{dirs} to print the directory stack with one entry per
-line, prefixing each entry with its index in the stack.
-@item +@var{N}
-Displays the @var{N}th directory (counting from the left of the
-list printed by @code{dirs} when invoked without options), starting
-with zero.
-@item -@var{N}
-Displays the @var{N}th directory (counting from the right of the
-list printed by @code{dirs} when invoked without options), starting
-with zero.
-@end table
-
-@item popd
-@btindex popd
-@example
-popd [-n] [+@var{N} | -@var{N}]
-@end example
-
-Remove the top entry from the directory stack, and @code{cd}
-to the new top directory.
-When no arguments are given, @code{popd}
-removes the top directory from the stack and
-performs a @code{cd} to the new top directory. The
-elements are numbered from 0 starting at the first directory listed with
-@code{dirs}; that is, @code{popd} is equivalent to @code{popd +0}.
-
-@table @code
-@item -n
-Suppresses the normal change of directory when removing directories
-from the stack, so that only the stack is manipulated.
-@item +@var{N}
-Removes the @var{N}th directory (counting from the left of the
-list printed by @code{dirs}), starting with zero.
-@item -@var{N}
-Removes the @var{N}th directory (counting from the right of the
-list printed by @code{dirs}), starting with zero.
-@end table
-
-@btindex pushd
-@item pushd
-@example
-pushd [-n] [@var{+N} | @var{-N} | @var{dir}]
-@end example
-
-Save the current directory on the top of the directory stack
-and then @code{cd} to @var{dir}.
-With no arguments, @code{pushd} exchanges the top two directories.
-
-@table @code
-@item -n
-Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
-@item +@var{N}
-Brings the @var{N}th directory (counting from the left of the
-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}, starting with zero) to the top of
-the list by rotating the stack.
-@item @var{dir}
-Makes the current working directory be the top of the stack, making
-it the new current directory as if it had been supplied as an argument
-to the @code{cd} builtin.
-@end table
-@end table
-
-@node Controlling the Prompt
-@section Controlling the Prompt
-@cindex prompting
-
-The value of the variable @env{PROMPT_COMMAND} is examined just before
-Bash prints each primary prompt. If @env{PROMPT_COMMAND} is set and
-has a non-null value, then the
-value is executed just as if it had been typed on the command line.
-
-In addition, the following table describes the special characters which
-can appear in the prompt variables @env{PS1} to @env{PS4}:
-
-@table @code
-@item \a
-A bell character.
-@item \d
-The date, in "Weekday Month Date" format (e.g., "Tue May 26").
-@item \D@{@var{format}@}
-The @var{format} is passed to @code{strftime}(3) and the result is inserted
-into the prompt string; an empty @var{format} results in a locale-specific
-time representation. The braces are required.
-@item \e
-An escape character.
-@item \h
-The hostname, up to the first `.'.
-@item \H
-The hostname.
-@item \j
-The number of jobs currently managed by the shell.
-@item \l
-The basename of the shell's terminal device name.
-@item \n
-A newline.
-@item \r
-A carriage return.
-@item \s
-The name of the shell, the basename of @code{$0} (the portion
-following the final slash).
-@item \t
-The time, in 24-hour HH:MM:SS format.
-@item \T
-The time, in 12-hour HH:MM:SS format.
-@item \@@
-The time, in 12-hour am/pm format.
-@item \A
-The time, in 24-hour HH:MM format.
-@item \u
-The username of the current user.
-@item \v
-The version of Bash (e.g., 2.00)
-@item \V
-The release of Bash, version + patchlevel (e.g., 2.00.0)
-@item \w
-The current working directory, with @env{$HOME} abbreviated with a tilde
-(uses the @env{$PROMPT_DIRTRIM} variable).
-@item \W
-The basename of @env{$PWD}, with @env{$HOME} abbreviated with a tilde.
-@item \!
-The history number of this command.
-@item \#
-The command number of this command.
-@item \$
-If the effective uid is 0, @code{#}, otherwise @code{$}.
-@item \@var{nnn}
-The character whose ASCII code is the octal value @var{nnn}.
-@item \\
-A backslash.
-@item \[
-Begin a sequence of non-printing characters. This could be used to
-embed a terminal control sequence into the prompt.
-@item \]
-End a sequence of non-printing characters.
-@end table
-
-The command number and the history number are usually different:
-the history number of a command is its position in the history
-list, which may include commands restored from the history file
-(@pxref{Bash History Facilities}), while the command number is
-the position in the sequence of commands executed during the current
-shell session.
-
-After the string is decoded, it is expanded via
-parameter expansion, command substitution, arithmetic
-expansion, and quote removal, subject to the value of the
-@code{promptvars} shell option (@pxref{Bash Builtins}).
-
-@node The Restricted Shell
-@section The Restricted Shell
-@cindex restricted shell
-
-If Bash is started with the name @code{rbash}, or the
-@option{--restricted}
-or
-@option{-r}
-option is supplied at invocation, the shell becomes restricted.
-A restricted shell is used to
-set up an environment more controlled than the standard shell.
-A restricted shell behaves identically to @code{bash}
-with the exception that the following are disallowed or not performed:
-
-@itemize @bullet
-@item
-Changing directories with the @code{cd} builtin.
-@item
-Setting or unsetting the values of the @env{SHELL}, @env{PATH},
-@env{ENV}, or @env{BASH_ENV} variables.
-@item
-Specifying command names containing slashes.
-@item
-Specifying a filename containing a slash as an argument to the @code{.}
-builtin command.
-@item
-Specifying a filename containing a slash as an argument to the @option{-p}
-option to the @code{hash} builtin command.
-@item
-Importing function definitions from the shell environment at startup.
-@item
-Parsing the value of @env{SHELLOPTS} from the shell environment at startup.
-@item
-Redirecting output using the @samp{>}, @samp{>|}, @samp{<>}, @samp{>&},
-@samp{&>}, and @samp{>>} redirection operators.
-@item
-Using the @code{exec} builtin to replace the shell with another command.
-@item
-Adding or deleting builtin commands with the
-@option{-f} and @option{-d} options to the @code{enable} builtin.
-@item
-Using the @code{enable} builtin command to enable disabled shell builtins.
-@item
-Specifying the @option{-p} option to the @code{command} builtin.
-@item
-Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
-@end itemize
-
-These restrictions are enforced after any startup files are read.
-
-When a command that is found to be a shell script is executed
-(@pxref{Shell Scripts}), @code{rbash} turns off any restrictions in
-the shell spawned to execute the script.
-
-@node Bash POSIX Mode
-@section Bash POSIX Mode
-@cindex POSIX Mode
-
-Starting Bash with the @option{--posix} command-line option or executing
-@samp{set -o posix} while Bash is running will cause Bash to conform more
-closely to the @sc{posix} standard by changing the behavior to
-match that specified by @sc{posix} in areas where the Bash default differs.
-
-When invoked as @code{sh}, Bash enters @sc{posix} mode after reading the
-startup files.
-
-The following list is what's changed when `@sc{posix} mode' is in effect:
-
-@enumerate
-@item
-When a command in the hash table no longer exists, Bash will re-search
-@env{$PATH} to find the new location. This is also available with
-@samp{shopt -s checkhash}.
-
-@item
-The message printed by the job control code and builtins when a job
-exits with a non-zero status is `Done(status)'.
-
-@item
-The message printed by the job control code and builtins when a job
-is stopped is `Stopped(@var{signame})', where @var{signame} is, for
-example, @code{SIGTSTP}.
-
-@item
-The @code{bg} builtin uses the required format to describe each job placed
-in the background, which does not include an indication of whether the job
-is the current or previous job.
-
-@item
-Reserved words appearing in a context where reserved words are recognized
-do not undergo alias expansion.
-
-@item
-The @sc{posix} @env{PS1} and @env{PS2} expansions of @samp{!} to
-the history number and @samp{!!} to @samp{!} are enabled,
-and parameter expansion is performed on the values of @env{PS1} and
-@env{PS2} regardless of the setting of the @code{promptvars} option.
-
-@item
-The @sc{posix} startup files are executed (@env{$ENV}) rather than
-the normal Bash files.
-
-@item
-Tilde expansion is only performed on assignments preceding a command
-name, rather than on all assignment statements on the line.
-
-@item
-The @code{command} builtin does not prevent builtins that take assignment
-statements as arguments from expanding them as assignment statements;
-when not in @sc{posix} mode, assignment builtins lose their assignment
-statement expansion properties when preceded by @code{command}.
-
-@item
-The default history file is @file{~/.sh_history} (this is the
-default value of @env{$HISTFILE}).
-
-@item
-The output of @samp{kill -l} prints all the signal names on a single line,
-separated by spaces, without the @samp{SIG} prefix.
-
-@item
-The @code{kill} builtin does not accept signal names with a @samp{SIG}
-prefix.
-
-@item
-Non-interactive shells exit if @var{filename} in @code{.} @var{filename}
-is not found.
-
-@item
-Non-interactive shells exit if a syntax error in an arithmetic expansion
-results in an invalid expression.
-
-@item
-Non-interactive shells exit if there is a syntax error in a script read
-with the @code{.} or @code{source} builtins, or in a string processed by
-the @code{eval} builtin.
-
-@item
-Redirection operators do not perform filename expansion on the word
-in the redirection unless the shell is interactive.
-
-@item
-Redirection operators do not perform word splitting on the word in the
-redirection.
-
-@item
-Function names must be valid shell @code{name}s. That is, they may not
-contain characters other than letters, digits, and underscores, and
-may not start with a digit. Declaring a function with an invalid name
-causes a fatal syntax error in non-interactive shells.
-
-@item
-Function names may not be the same as one of the @sc{posix} special
-builtins.
-
-@item
-@sc{posix} special builtins are found before shell functions
-during command lookup.
-
-@item
-Literal tildes that appear as the first character in elements of
-the @env{PATH} variable are not expanded as described above
-under @ref{Tilde Expansion}.
-
-@item
-The @code{time} reserved word may be used by itself as a command. When
-used in this way, it displays timing statistics for the shell and its
-completed children. The @env{TIMEFORMAT} variable controls the format
-of the timing information.
-
-@item
-When parsing and expanding a $@{@dots{}@} expansion that appears within
-double quotes, single quotes are no longer special and cannot be used to
-quote a closing brace or other special character, unless the operator is
-one of those defined to perform pattern removal. In this case, they do
-not have to appear as matched pairs.
-
-@item
-The parser does not recognize @code{time} as a reserved word if the next
-token begins with a @samp{-}.
-
-@item
-If a @sc{posix} special builtin returns an error status, a
-non-interactive shell exits. The fatal errors are those listed in
-the @sc{posix} standard, and include things like passing incorrect options,
-redirection errors, variable assignment errors for assignments preceding
-the command name, and so on.
-
-@item
-A non-interactive shell exits with an error status if a variable
-assignment error occurs when no command name follows the assignment
-statements.
-A variable assignment error occurs, for example, when trying to assign
-a value to a readonly variable.
-
-@item
-A non-interactive shell exits with an error status if a variable
-assignment error occurs in an assignment statement preceding a special
-builtin, but not with any other simple command.
-
-@item
-A non-interactive shell exits with an error status if the iteration
-variable in a @code{for} statement or the selection variable in a
-@code{select} statement is a readonly variable.
-
-@item
-Process substitution is not available.
-
-@item
-While variable indirection is available, it may not be applied to the
-@samp{#} and @samp{?} special parameters.
-
-@item
-Assignment statements preceding @sc{posix} special builtins
-persist in the shell environment after the builtin completes.
-
-@item
-Assignment statements preceding shell function calls persist in the
-shell environment after the function returns, as if a @sc{posix}
-special builtin command had been executed.
-
-@item
-The @code{export} and @code{readonly} builtin commands display their
-output in the format required by @sc{posix}.
-
-@item
-The @code{trap} builtin displays signal names without the leading
-@code{SIG}.
-
-@item
-The @code{trap} builtin doesn't check the first argument for a possible
-signal specification and revert the signal handling to the original
-disposition if it is, unless that argument consists solely of digits and
-is a valid signal number. If users want to reset the handler for a given
-signal to the original disposition, they should use @samp{-} as the
-first argument.
-
-@item
-The @code{.} and @code{source} builtins do not search the current directory
-for the filename argument if it is not found by searching @env{PATH}.
-
-@item
-Subshells spawned to execute command substitutions inherit the value of
-the @option{-e} option from the parent shell. When not in @sc{posix} mode,
-Bash clears the @option{-e} option in such subshells.
-
-@item
-Alias expansion is always enabled, even in non-interactive shells.
-
-@item
-When the @code{alias} builtin displays alias definitions, it does not
-display them with a leading @samp{alias } unless the @option{-p} option
-is supplied.
-
-@item
-When the @code{set} builtin is invoked without options, it does not display
-shell function names and definitions.
-
-@item
-When the @code{set} builtin is invoked without options, it displays
-variable values without quotes, unless they contain shell metacharacters,
-even if the result contains nonprinting characters.
-
-@item
-When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
-constructed from @code{$PWD} and the directory name supplied as an argument
-does not refer to an existing directory, @code{cd} will fail instead of
-falling back to @var{physical} mode.
-
-@item
-The @code{pwd} builtin verifies that the value it prints is the same as the
-current directory, even if it is not asked to check the file system with the
-@option{-P} option.
-
-@item
-When listing the history, the @code{fc} builtin does not include an
-indication of whether or not a history entry has been modified.
-
-@item
-The default editor used by @code{fc} is @code{ed}.
-
-@item
-The @code{type} and @code{command} builtins will not report a non-executable
-file as having been found, though the shell will attempt to execute such a
-file if it is the only so-named file found in @code{$PATH}.
-
-@item
-The @code{vi} editing mode will invoke the @code{vi} editor directly when
-the @samp{v} command is run, instead of checking @code{$VISUAL} and
-@code{$EDITOR}.
-
-@item
-When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret
-any arguments to @code{echo} as options. Each argument is displayed, after
-escape characters are converted.
-
-@item
-The @code{ulimit} builtin uses a block size of 512 bytes for the @option{-c}
-and @option{-f} options.
-
-@item
-The arrival of @code{SIGCHLD} when a trap is set on @code{SIGCHLD} does
-not interrupt the @code{wait} builtin and cause it to return immediately.
-The trap command is run once for each child that exits.
-
-@item
-The @code{read} builtin may be interrupted by a signal for which a trap
-has been set.
-If Bash receives a trapped signal while executing @code{read}, the trap
-handler executes and @code{read} returns an exit status greater than 128.
-
-@end enumerate
-
-There is other @sc{posix} behavior that Bash does not implement by
-default even when in @sc{posix} mode.
-Specifically:
-
-@enumerate
-
-@item
-The @code{fc} builtin checks @code{$EDITOR} as a program to edit history
-entries if @code{FCEDIT} is unset, rather than defaulting directly to
-@code{ed}. @code{fc} uses @code{ed} if @code{EDITOR} is unset.
-
-@item
-As noted above, Bash requires the @code{xpg_echo} option to be enabled for
-the @code{echo} builtin to be fully conformant.
-
-@end enumerate
-
-Bash can be configured to be @sc{posix}-conformant by default, by specifying
-the @option{--enable-strict-posix-default} to @code{configure} when building
-(@pxref{Optional Features}).
-
-@node Job Control
-@chapter Job Control
-
-This chapter discusses what job control is, how it works, and how
-Bash allows you to access its facilities.
-
-@menu
-* Job Control Basics:: How job control works.
-* Job Control Builtins:: Bash builtin commands used to interact
- with job control.
-* Job Control Variables:: Variables Bash uses to customize job
- control.
-@end menu
-
-@node Job Control Basics
-@section Job Control Basics
-@cindex job control
-@cindex foreground
-@cindex background
-@cindex suspending jobs
-
-Job control
-refers to the ability to selectively stop (suspend)
-the execution of processes and continue (resume)
-their execution at a later point. A user typically employs
-this facility via an interactive interface supplied jointly
-by the operating system kernel's terminal driver and Bash.
-
-The shell associates a @var{job} with each pipeline. It keeps a
-table of currently executing jobs, which may be listed with the
-@code{jobs} command. When Bash starts a job
-asynchronously, it prints a line that looks
-like:
-@example
-[1] 25647
-@end example
-@noindent
-indicating that this job is job number 1 and that the process @sc{id}
-of the last process in the pipeline associated with this job is
-25647. All of the processes in a single pipeline are members of
-the same job. Bash uses the @var{job} abstraction as the
-basis for job control.
-
-To facilitate the implementation of the user interface to job
-control, the operating system maintains the notion of a current terminal
-process group @sc{id}. Members of this process group (processes whose
-process group @sc{id} is equal to the current terminal process group
-@sc{id}) receive keyboard-generated signals such as @code{SIGINT}.
-These processes are said to be in the foreground. Background
-processes are those whose process group @sc{id} differs from the
-terminal's; such processes are immune to keyboard-generated
-signals. Only foreground processes are allowed to read from or, if
-the user so specifies with @code{stty tostop}, write to the terminal.
-Background processes which attempt to
-read from (write to when @code{stty tostop} is in effect) the
-terminal are sent a @code{SIGTTIN} (@code{SIGTTOU})
-signal by the kernel's terminal driver,
-which, unless caught, suspends the process.
-
-If the operating system on which Bash is running supports
-job control, Bash contains facilities to use it. Typing the
-@var{suspend} character (typically @samp{^Z}, Control-Z) while a
-process is running causes that process to be stopped and returns
-control to Bash. Typing the @var{delayed suspend} character
-(typically @samp{^Y}, Control-Y) causes the process to be stopped
-when it attempts to read input from the terminal, and control to
-be returned to Bash. The user then manipulates the state of
-this job, using the @code{bg} command to continue it in the
-background, the @code{fg} command to continue it in the
-foreground, or the @code{kill} command to kill it. A @samp{^Z}
-takes effect immediately, and has the additional side effect of
-causing pending output and typeahead to be discarded.
-
-There are a number of ways to refer to a job in the shell. The
-character @samp{%} introduces a job specification (@var{jobspec}).
-
-Job number @code{n} may be referred to as @samp{%n}.
-The symbols @samp{%%} and @samp{%+} refer to the shell's notion of the
-current job, which is the last job stopped while it was in the foreground
-or started in the background.
-A single @samp{%} (with no accompanying job specification) also refers
-to the current job.
-The previous job may be referenced using @samp{%-}.
-If there is only a single job, @samp{%+} and @samp{%-} can both be used
-to refer to that job.
-In output pertaining to jobs (e.g., the output of the @code{jobs}
-command), the current job is always flagged with a @samp{+}, and the
-previous job with a @samp{-}.
-
-A job may also be referred to
-using a prefix of the name used to start it, or using a substring
-that appears in its command line. For example, @samp{%ce} refers
-to a stopped @code{ce} job. Using @samp{%?ce}, on the
-other hand, refers to any job containing the string @samp{ce} in
-its command line. If the prefix or substring matches more than one job,
-Bash reports an error.
-
-Simply naming a job can be used to bring it into the foreground:
-@samp{%1} is a synonym for @samp{fg %1}, bringing job 1 from the
-background into the foreground. Similarly, @samp{%1 &} resumes
-job 1 in the background, equivalent to @samp{bg %1}
-
-The shell learns immediately whenever a job changes state.
-Normally, Bash waits until it is about to print a prompt
-before reporting changes in a job's status so as to not interrupt
-any other output.
-If the @option{-b} option to the @code{set} builtin is enabled,
-Bash reports such changes immediately (@pxref{The Set Builtin}).
-Any trap on @code{SIGCHLD} is executed for each child process
-that exits.
-
-If an attempt to exit Bash is made while jobs are stopped, (or running, if
-the @code{checkjobs} option is enabled -- see @ref{The Shopt Builtin}), the
-shell prints a warning message, and if the @code{checkjobs} option is
-enabled, lists the jobs and their statuses.
-The @code{jobs} command may then be used to inspect their status.
-If a second attempt to exit is made without an intervening command,
-Bash does not print another warning, and any stopped jobs are terminated.
-
-@node Job Control Builtins
-@section Job Control Builtins
-
-@table @code
-
-@item bg
-@btindex bg
-@example
-bg [@var{jobspec} @dots{}]
-@end example
-
-Resume each suspended job @var{jobspec} in the background, as if it
-had been started with @samp{&}.
-If @var{jobspec} is not supplied, the current job is used.
-The return status is zero unless it is run when job control is not
-enabled, or, when run with job control enabled, any
-@var{jobspec} was not found or specifies a job
-that was started without job control.
-
-@item fg
-@btindex fg
-@example
-fg [@var{jobspec}]
-@end example
-
-Resume the job @var{jobspec} in the foreground and make it the current job.
-If @var{jobspec} is not supplied, the current job is used.
-The return status is that of the command placed into the foreground,
-or non-zero if run when job control is disabled or, when run with
-job control enabled, @var{jobspec} does not specify a valid job or
-@var{jobspec} specifies a job that was started without job control.
-
-@item jobs
-@btindex jobs
-@example
-jobs [-lnprs] [@var{jobspec}]
-jobs -x @var{command} [@var{arguments}]
-@end example
-
-The first form lists the active jobs. The options have the
-following meanings:
-
-@table @code
-@item -l
-List process @sc{id}s in addition to the normal information.
-
-@item -n
-Display information only about jobs that have changed status since
-the user was last notified of their status.
-
-@item -p
-List only the process @sc{id} of the job's process group leader.
-
-@item -r
-Display only running jobs.
-
-@item -s
-Display only stopped jobs.
-@end table
-
-If @var{jobspec} is given,
-output is restricted to information about that job.
-If @var{jobspec} is not supplied, the status of all jobs is
-listed.
-
-If the @option{-x} option is supplied, @code{jobs} replaces any
-@var{jobspec} found in @var{command} or @var{arguments} with the
-corresponding process group @sc{id}, and executes @var{command},
-passing it @var{argument}s, returning its exit status.
-
-@item kill
-@btindex kill
-@example
-kill [-s @var{sigspec}] [-n @var{signum}] [-@var{sigspec}] @var{jobspec} or @var{pid}
-kill -l [@var{exit_status}]
-@end example
-
-Send a signal specified by @var{sigspec} or @var{signum} to the process
-named by job specification @var{jobspec} or process @sc{id} @var{pid}.
-@var{sigspec} is either a case-insensitive 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 @option{-l} option lists the signal names.
-If any arguments are supplied when @option{-l} is given, the names of the
-signals corresponding to the arguments are listed, and the return status
-is zero.
-@var{exit_status} is a number specifying a signal number or the exit
-status of a process terminated by a signal.
-The return status is zero if at least one signal was successfully sent,
-or non-zero if an error occurs or an invalid option is encountered.
-
-@item wait
-@btindex wait
-@example
-wait [-n] [@var{jobspec} or @var{pid} @dots{}]
-@end example
-
-Wait until the child process specified by each process @sc{id} @var{pid}
-or job specification @var{jobspec} exits and return the exit status of the
-last command waited for.
-If a job spec is given, all processes in the job are waited for.
-If no arguments are given, all currently active child processes are
-waited for, and the return status is zero.
-If the @option{-n} option is supplied, @code{wait} waits for any job to
-terminate and returns its exit status.
-If neither @var{jobspec} nor @var{pid} specifies an active child process
-of the shell, the return status is 127.
-
-@item disown
-@btindex disown
-@example
-disown [-ar] [-h] [@var{jobspec} @dots{}]
-@end example
-
-Without options, remove each @var{jobspec} from the table of
-active jobs.
-If the @option{-h} option is given, the job is not removed from the table,
-but is marked so that @code{SIGHUP} is not sent to the job if the shell
-receives a @code{SIGHUP}.
-If @var{jobspec} is not present, and neither the @option{-a} nor the
-@option{-r} option is supplied, the current job is used.
-If no @var{jobspec} is supplied, the @option{-a} option means to remove or
-mark all jobs; the @option{-r} option without a @var{jobspec}
-argument restricts operation to running jobs.
-
-@item suspend
-@btindex suspend
-@example
-suspend [-f]
-@end example
-
-Suspend the execution of this shell until it receives a
-@code{SIGCONT} signal.
-A login shell cannot be suspended; the @option{-f}
-option can be used to override this and force the suspension.
-@end table
-
-When job control is not active, the @code{kill} and @code{wait}
-builtins do not accept @var{jobspec} arguments. They must be
-supplied process @sc{id}s.
-
-@node Job Control Variables
-@section Job Control Variables
-
-@vtable @code
-
-@item auto_resume
-This variable controls how the shell interacts with the user and
-job control. If this variable exists then single word simple
-commands without redirections are treated as candidates for resumption
-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},
-the string supplied must match the name of a stopped job exactly;
-if set to @samp{substring},
-the string supplied needs to match a substring of the name of a
-stopped job. The @samp{substring} value provides functionality
-analogous to the @samp{%?} job @sc{id} (@pxref{Job Control Basics}).
-If set to any other value, the supplied string must
-be a prefix of a stopped job's name; this provides functionality
-analogous to the @samp{%} job @sc{id}.
-
-@end vtable
-
-@set readline-appendix
-@set history-appendix
-@cindex Readline, how to use
-@include rluser.texi
-@cindex History, how to use
-@include hsuser.texi
-@clear readline-appendix
-@clear history-appendix
-
-@node Installing Bash
-@chapter Installing Bash
-
-This chapter provides basic instructions for installing Bash on
-the various supported platforms. The distribution supports the
-@sc{gnu} operating systems, nearly every version of Unix, and several
-non-Unix systems such as BeOS and Interix.
-Other independent ports exist for
-@sc{ms-dos}, @sc{os/2}, and Windows platforms.
-
-@menu
-* Basic Installation:: Installation instructions.
-* Compilers and Options:: How to set special options for various
- systems.
-* Compiling For Multiple Architectures:: How to compile Bash for more
- than one kind of system from
- the same source tree.
-* Installation Names:: How to set the various paths used by the installation.
-* Specifying the System Type:: How to configure Bash for a particular system.
-* Sharing Defaults:: How to share default configuration values among GNU
- programs.
-* Operation Controls:: Options recognized by the configuration program.
-* Optional Features:: How to enable and disable optional features when
- building Bash.
-@end menu
-
-@node Basic Installation
-@section Basic Installation
-@cindex installation
-@cindex configuration
-@cindex Bash installation
-@cindex Bash configuration
-
-These are installation instructions for Bash.
-
-The simplest way to compile Bash is:
-
-@enumerate
-@item
-@code{cd} to the directory containing the source code and type
-@samp{./configure} to configure Bash for your system. If you're
-using @code{csh} on an old version of System V, you might need to
-type @samp{sh ./configure} instead to prevent @code{csh} from trying
-to execute @code{configure} itself.
-
-Running @code{configure} takes some time.
-While running, it prints messages telling which features it is
-checking for.
-
-@item
-Type @samp{make} to compile Bash and build the @code{bashbug} bug
-reporting script.
-
-@item
-Optionally, type @samp{make tests} to run the Bash test suite.
-
-@item
-Type @samp{make install} to install @code{bash} and @code{bashbug}.
-This will also install the manual pages and Info file.
-
-@end enumerate
-
-The @code{configure} shell script attempts to guess correct
-values for various system-dependent variables used during
-compilation. It uses those values to create a @file{Makefile} in
-each directory of the package (the top directory, the
-@file{builtins}, @file{doc}, and @file{support} directories,
-each directory under @file{lib}, and several others). It also creates a
-@file{config.h} file containing system-dependent definitions.
-Finally, it creates a shell script named @code{config.status} that you
-can run in the future to recreate the current configuration, a
-file @file{config.cache} that saves the results of its tests to
-speed up reconfiguring, and a file @file{config.log} containing
-compiler output (useful mainly for debugging @code{configure}).
-If at some point
-@file{config.cache} contains results you don't want to keep, you
-may remove or edit it.
-
-To find out more about the options and arguments that the
-@code{configure} script understands, type
-
-@example
-bash-2.04$ ./configure --help
-@end example
-
-@noindent
-at the Bash prompt in your Bash source directory.
-
-If you need to do unusual things to compile Bash, please
-try to figure out how @code{configure} could check whether or not
-to do them, and mail diffs or instructions to
-@email{bash-maintainers@@gnu.org} so they can be
-considered for the next release.
-
-The file @file{configure.ac} is used to create @code{configure}
-by a program called Autoconf. You only need
-@file{configure.ac} 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.50 or
-newer.
-
-You can remove the program binaries and object files from the
-source code directory by typing @samp{make clean}. To also remove the
-files that @code{configure} created (so you can compile Bash for
-a different kind of computer), type @samp{make distclean}.
-
-@node Compilers and Options
-@section Compilers and Options
-
-Some systems require unusual options for compilation or linking
-that the @code{configure} script does not know about. You can
-give @code{configure} initial values for variables by setting
-them in the environment. Using a Bourne-compatible shell, you
-can do that on the command line like this:
-
-@example
-CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-@end example
-
-On systems that have the @code{env} program, you can do it like this:
-
-@example
-env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-@end example
-
-The configuration process uses GCC to build Bash if it
-is available.
-
-@node Compiling For Multiple Architectures
-@section Compiling For Multiple Architectures
-
-You can compile Bash for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of @code{make} that
-supports the @code{VPATH} variable, such as GNU @code{make}.
-@code{cd} to the
-directory where you want the object files and executables to go and run
-the @code{configure} script from the source directory. You may need to
-supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
-source files are. @code{configure} automatically checks for the
-source code in the directory that @code{configure} is in and in `..'.
-
-If you have to use a @code{make} that does not supports the @code{VPATH}
-variable, you can compile Bash for one architecture at a
-time in the source code directory. After you have installed
-Bash for one architecture, use @samp{make distclean} before
-reconfiguring for another architecture.
-
-Alternatively, if your system supports symbolic links, you can use the
-@file{support/mkclone} script to create a build tree which has
-symbolic links back to each file in the source directory. Here's an
-example that creates a build directory in the current directory from a
-source directory @file{/usr/gnu/src/bash-2.0}:
-
-@example
-bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .
-@end example
-
-@noindent
-The @code{mkclone} script requires Bash, so you must have already built
-Bash for at least one architecture before you can create build
-directories for other architectures.
-
-@node Installation Names
-@section Installation Names
-
-By default, @samp{make install} will install into
-@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
-specify an installation prefix other than @file{/usr/local} by
-giving @code{configure} the option @option{--prefix=@var{PATH}},
-or by specifying a value for the @code{DESTDIR} @samp{make}
-variable when running @samp{make install}.
-
-You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.
-If you give @code{configure} the option
-@option{--exec-prefix=@var{PATH}}, @samp{make install} will use
-@var{PATH} as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-@node Specifying the System Type
-@section Specifying the System Type
-
-There may be some features @code{configure} can not figure out
-automatically, but need to determine by the type of host Bash
-will run on. Usually @code{configure} can figure that
-out, but if it prints a message saying it can not guess the host
-type, give it the @option{--host=TYPE} option. @samp{TYPE} can
-either be a short name for the system type, such as @samp{sun4},
-or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
-(e.g., @samp{i386-unknown-freebsd4.2}).
-
-See the file @file{support/config.sub} for the possible
-values of each field.
-
-@node Sharing Defaults
-@section Sharing Defaults
-
-If you want to set default values for @code{configure} scripts to
-share, you can create a site shell script called
-@code{config.site} that gives default values for variables like
-@code{CC}, @code{cache_file}, and @code{prefix}. @code{configure}
-looks for @file{PREFIX/share/config.site} if it exists, then
-@file{PREFIX/etc/config.site} if it exists. Or, you can set the
-@code{CONFIG_SITE} environment variable to the location of the site
-script. A warning: the Bash @code{configure} looks for a site script,
-but not all @code{configure} scripts do.
-
-@node Operation Controls
-@section Operation Controls
-
-@code{configure} recognizes the following options to control how it
-operates.
-
-@table @code
-
-@item --cache-file=@var{file}
-Use and save the results of the tests in
-@var{file} instead of @file{./config.cache}. Set @var{file} to
-@file{/dev/null} to disable caching, for debugging
-@code{configure}.
-
-@item --help
-Print a summary of the options to @code{configure}, and exit.
-
-@item --quiet
-@itemx --silent
-@itemx -q
-Do not print messages saying which checks are being made.
-
-@item --srcdir=@var{dir}
-Look for the Bash source code in directory @var{dir}. Usually
-@code{configure} can determine that directory automatically.
-
-@item --version
-Print the version of Autoconf used to generate the @code{configure}
-script, and exit.
-@end table
-
-@code{configure} also accepts some other, not widely used, boilerplate
-options. @samp{configure --help} prints the complete list.
-
-@node Optional Features
-@section Optional Features
-
-The Bash @code{configure} has a number of @option{--enable-@var{feature}}
-options, where @var{feature} indicates an optional part of Bash.
-There are also several @option{--with-@var{package}} options,
-where @var{package} is something like @samp{bash-malloc} or @samp{purify}.
-To turn off the default use of a package, use
-@option{--without-@var{package}}. To configure Bash without a feature
-that is enabled by default, use @option{--disable-@var{feature}}.
-
-Here is a complete list of the @option{--enable-} and
-@option{--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-bash-malloc
-Use the Bash version of
-@code{malloc} in the directory @file{lib/malloc}. This is not the same
-@code{malloc} that appears in @sc{gnu} libc, but an older version
-originally derived from the 4.2 @sc{bsd} @code{malloc}. This @code{malloc}
-is very fast, but wastes some space on each allocation.
-This option is enabled by default.
-The @file{NOTES} file contains a list of systems for
-which this should be turned off, and @code{configure} disables this
-option automatically for a number of systems.
-
-@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-gnu-malloc
-A synonym for @code{--with-bash-malloc}.
-
-@item --with-installed-readline[=@var{PREFIX}]
-Define this to make Bash link with a locally-installed version of Readline
-rather than the version in @file{lib/readline}. This works only with
-Readline 5.0 and later versions. If @var{PREFIX} is @code{yes} or not
-supplied, @code{configure} uses the values of the make variables
-@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
-by default, to find the installed version of Readline if it is not in
-the standard system include and library directories.
-If @var{PREFIX} is @code{no}, Bash links with the version in
-@file{lib/readline}.
-If @var{PREFIX} is set to any other value, @code{configure} treats it as
-a directory pathname and looks for
-the installed version of Readline in subdirectories of that directory
-(include files in @var{PREFIX}/@code{include} and the library in
-@var{PREFIX}/@code{lib}).
-
-@item --with-purify
-Define this to use the Purify memory allocation checker from Rational
-Software.
-
-@item --enable-minimal-config
-This produces a shell with minimal features, close to the historical
-Bourne shell.
-@end table
-
-There are several @option{--enable-} options that alter how Bash is
-compiled and linked, rather than changing run-time features.
-
-@table @code
-@item --enable-largefile
-Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html,
-large files} if the operating system requires special compiler options
-to build programs which can access large files. This is enabled by
-default, if the operating system provides large file support.
-
-@item --enable-profiling
-This builds a Bash binary that produces profiling information to be
-processed by @code{gprof} each time it is executed.
-
-@item --enable-static-link
-This causes Bash to be linked statically, if @code{gcc} is being used.
-This could be used to build a version to use as root's shell.
-@end table
-
-The @samp{minimal-config} option can be used to disable all of
-the following options, but it is processed first, so individual
-options may be enabled using @samp{enable-@var{feature}}.
-
-All of the following options except for @samp{disabled-builtins},
-@samp{direxpand-default}, and
-@samp{xpg-echo-default} are
-enabled by default, unless the operating system does not provide the
-necessary support.
-
-@table @code
-@item --enable-alias
-Allow alias expansion and include the @code{alias} and @code{unalias}
-builtins (@pxref{Aliases}).
-
-@item --enable-arith-for-command
-Include support for the alternate form of the @code{for} command
-that behaves like the C language @code{for} statement
-(@pxref{Looping Constructs}).
-
-@item --enable-array-variables
-Include support for one-dimensional array shell variables
-(@pxref{Arrays}).
-
-@item --enable-bang-history
-Include support for @code{csh}-like history substitution
-(@pxref{History Interaction}).
-
-@item --enable-brace-expansion
-Include @code{csh}-like brace expansion
-( @code{b@{a,b@}c} @expansion{} @code{bac bbc} ).
-See @ref{Brace Expansion}, for a complete description.
-
-@item --enable-casemod-attributes
-Include support for case-modifying attributes in the @code{declare} builtin
-and assignment statements. Variables with the @var{uppercase} attribute,
-for example, will have their values converted to uppercase upon assignment.
-
-@item --enable-casemod-expansion
-Include support for case-modifying word expansions.
-
-@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}
-(@pxref{Pipelines}).
-This allows pipelines as well as shell builtins and functions to be timed.
-
-@item --enable-cond-command
-Include support for the @code{[[} conditional command.
-(@pxref{Conditional Constructs}).
-
-@item --enable-cond-regexp
-Include support for matching @sc{posix} regular expressions using the
-@samp{=~} binary operator in the @code{[[} conditional command.
-(@pxref{Conditional Constructs}).
-
-@item --enable-coprocesses
-Include support for coprocesses and the @code{coproc} reserved word
-(@pxref{Pipelines}).
-
-@item --enable-debugger
-Include support for the bash debugger (distributed separately).
-
-@item --enable-direxpand-default
-Cause the @code{direxpand} shell option (@pxref{The Shopt Builtin})
-to be enabled by default when the shell starts.
-It is normally disabled by default.
-
-@item --enable-directory-stack
-Include support for a @code{csh}-like directory stack and the
-@code{pushd}, @code{popd}, and @code{dirs} builtins
-(@pxref{The Directory Stack}).
-
-@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{((@dots{}))} command
-(@pxref{Conditional Constructs}).
-
-@item --enable-extended-glob
-Include support for the extended pattern matching features described
-above under @ref{Pattern Matching}.
-
-@item --enable-extended-glob-default
-Set the default value of the @var{extglob} shell option described
-above under @ref{The Shopt Builtin} to be enabled.
-
-@item --enable-function-import
-Include support for importing function definitions exported by another
-instance of the shell from the environment. This option is enabled by
-default.
-
-@item --enable-glob-asciirange-default
-Set the default value of the @var{globasciiranges} shell option described
-above under @ref{The Shopt Builtin} to be enabled.
-This controls the behavior of character ranges when used in pattern matching
-bracket expressions.
-
-@item --enable-help-builtin
-Include the @code{help} builtin, which displays help on shell builtins and
-variables (@pxref{Bash Builtins}).
-
-@item --enable-history
-Include command history and the @code{fc} and @code{history}
-builtin commands (@pxref{Bash History Facilities}).
-
-@item --enable-job-control
-This enables the job control features (@pxref{Job Control}),
-if the operating system supports them.
-
-@item --enable-multibyte
-This enables support for multibyte characters if the operating
-system provides the necessary support.
-
-@item --enable-net-redirections
-This enables the special handling of filenames of the form
-@code{/dev/tcp/@var{host}/@var{port}} and
-@code{/dev/udp/@var{host}/@var{port}}
-when used in redirections (@pxref{Redirections}).
-
-@item --enable-process-substitution
-This enables process substitution (@pxref{Process Substitution}) if
-the operating system provides the necessary support.
-
-@item --enable-progcomp
-Enable the programmable completion facilities
-(@pxref{Programmable Completion}).
-If Readline is not enabled, this option has no effect.
-
-@item --enable-prompt-string-decoding
-Turn on the interpretation of a number of backslash-escaped characters
-in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt
-strings. See @ref{Controlling the Prompt}, for a complete list of prompt
-string escape sequences.
-
-@item --enable-readline
-Include support for command-line editing and history with the Bash
-version of the Readline library (@pxref{Command Line Editing}).
-
-@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{select} compound command, which allows the generation of
-simple menus (@pxref{Conditional Constructs}).
-
-@item --enable-separate-helpfiles
-Use external files for the documentation displayed by the @code{help} builtin
-instead of storing the text internally.
-
-@item --enable-single-help-strings
-Store the text displayed by the @code{help} builtin as a single string for
-each help topic. This aids in translating the text to different languages.
-You may need to disable this if your compiler cannot handle very long string
-literals.
-
-@item --enable-strict-posix-default
-Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}).
-
-@item --enable-usg-echo-default
-A synonym for @code{--enable-xpg-echo-default}.
-
-@item --enable-xpg-echo-default
-Make the @code{echo} builtin expand backslash-escaped characters by default,
-without requiring the @option{-e} option.
-This sets the default value of the @code{xpg_echo} shell option to @code{on},
-which makes the Bash @code{echo} behave more like the version specified in
-the Single Unix Specification, version 3.
-@xref{Bash Builtins}, for a description of the escape sequences that
-@code{echo} recognizes.
-@end table
-
-The file @file{config-top.h} contains C Preprocessor
-@samp{#define} statements for options which are not settable from
-@code{configure}.
-Some of these are not meant to be changed; beware of the consequences if
-you do.
-Read the comments associated with each definition for more
-information about its effect.
-
-@node Reporting Bugs
-@appendix Reporting Bugs
-
-Please report all bugs you find in Bash.
-But first, you should
-make sure that it really is a bug, and that it appears in the latest
-version of Bash.
-The latest version of Bash is always available for FTP from
-@uref{ftp://ftp.gnu.org/pub/gnu/bash/}.
-
-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 encouraged to mail that as well!
-Suggestions and `philosophical' bug reports may be mailed
-to @email{bug-bash@@gnu.org} or posted to the Usenet
-newsgroup @code{gnu.bash.bug}.
-
-All bug reports should include:
-@itemize @bullet
-@item
-The version number of Bash.
-@item
-The hardware and operating system.
-@item
-The compiler used to compile Bash.
-@item
-A description of the bug behaviour.
-@item
-A short script or `recipe' which exercises the bug and may be used
-to reproduce it.
-@end itemize
-
-@noindent
-@code{bashbug} inserts the first three items automatically into
-the template it provides for filing a bug report.
-
-Please send all reports concerning this manual to
-@email{bug-bash@@gnu.org}.
-
-@node Major Differences From The Bourne Shell
-@appendix Major Differences From The Bourne Shell
-
-Bash implements essentially the same grammar, parameter and
-variable expansion, redirection, and quoting as the Bourne Shell.
-Bash uses the @sc{posix} standard as the specification of
-how these features are to be implemented. There are some
-differences between the traditional Bourne shell and Bash; this
-section quickly details the differences of significance. A
-number of these differences are explained in greater depth in
-previous sections.
-This section uses the version of @code{sh} included in SVR4.2 (the
-last version of the historical Bourne shell) as the baseline reference.
-
-@itemize @bullet
-
-@item
-Bash is @sc{posix}-conformant, even where the @sc{posix} specification
-differs from traditional @code{sh} behavior (@pxref{Bash POSIX Mode}).
-
-@item
-Bash has multi-character invocation options (@pxref{Invoking Bash}).
-
-@item
-Bash has command-line editing (@pxref{Command Line Editing}) and
-the @code{bind} builtin.
-
-@item
-Bash provides a programmable word completion mechanism
-(@pxref{Programmable Completion}), and builtin commands
-@code{complete}, @code{compgen}, and @code{compopt}, to
-manipulate it.
-
-@item
-Bash has command history (@pxref{Bash History Facilities}) and the
-@code{history} and @code{fc} builtins to manipulate it.
-The Bash history list maintains timestamp information and uses the
-value of the @code{HISTTIMEFORMAT} variable to display it.
-
-@item
-Bash implements @code{csh}-like history expansion
-(@pxref{History Interaction}).
-
-@item
-Bash has one-dimensional array variables (@pxref{Arrays}), and the
-appropriate variable expansions and assignment syntax to use them.
-Several of the Bash builtins take options to act on arrays.
-Bash provides a number of built-in array variables.
-
-@item
-The @code{$'@dots{}'} quoting syntax, which expands ANSI-C
-backslash-escaped characters in the text between the single quotes,
-is supported (@pxref{ANSI-C Quoting}).
-
-@item
-Bash supports the @code{$"@dots{}"} quoting syntax to do
-locale-specific translation of the characters between the double
-quotes. The @option{-D}, @option{--dump-strings}, and @option{--dump-po-strings}
-invocation options list the translatable strings found in a script
-(@pxref{Locale Translation}).
-
-@item
-Bash implements the @code{!} keyword to negate the return value of
-a pipeline (@pxref{Pipelines}).
-Very useful when an @code{if} statement needs to act only if a test fails.
-The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to
-return a failure status if any command fails.
-
-@item
-Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
-The display of the timing statistics may be controlled with the
-@env{TIMEFORMAT} variable.
-
-@item
-Bash implements the @code{for (( @var{expr1} ; @var{expr2} ; @var{expr3} ))}
-arithmetic for command, similar to the C language (@pxref{Looping Constructs}).
-
-@item
-Bash includes the @code{select} compound command, which allows the
-generation of simple menus (@pxref{Conditional Constructs}).
-
-@item
-Bash includes the @code{[[} compound command, which makes conditional
-testing part of the shell grammar (@pxref{Conditional Constructs}), including
-optional regular expression matching.
-
-@item
-Bash provides optional case-insensitive matching for the @code{case} and
-@code{[[} constructs.
-
-@item
-Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
-expansion (@pxref{Tilde Expansion}).
-
-@item
-Bash implements command aliases and the @code{alias} and @code{unalias}
-builtins (@pxref{Aliases}).
-
-@item
-Bash provides shell arithmetic, the @code{((} compound command
-(@pxref{Conditional Constructs}),
-and arithmetic expansion (@pxref{Shell Arithmetic}).
-
-@item
-Variables present in the shell's initial environment are automatically
-exported to child processes. The Bourne shell does not normally do
-this unless the variables are explicitly marked using the @code{export}
-command.
-
-@item
-Bash supports the @samp{+=} assignment operator, which appends to the value
-of the variable named on the left hand side.
-
-@item
-Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
-and @samp{##} expansions to remove leading or trailing substrings from
-variable values (@pxref{Shell Parameter Expansion}).
-
-@item
-The expansion @code{$@{#xx@}}, which returns the length of @code{$@{xx@}},
-is supported (@pxref{Shell Parameter Expansion}).
-
-@item
-The expansion @code{$@{var:}@var{offset}@code{[:}@var{length}@code{]@}},
-which expands to the substring of @code{var}'s value of length
-@var{length}, beginning at @var{offset}, is present
-(@pxref{Shell Parameter Expansion}).
-
-@item
-The expansion
-@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
-which matches @var{pattern} and replaces it with @var{replacement} in
-the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
-
-@item
-The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to
-the names of all shell variables whose names begin with @var{prefix},
-is available (@pxref{Shell Parameter Expansion}).
-
-@item
-Bash has @var{indirect} variable expansion using @code{$@{!word@}}
-(@pxref{Shell Parameter Expansion}).
-
-@item
-Bash can expand positional parameters beyond @code{$9} using
-@code{$@{@var{num}@}}.
-
-@item
-The @sc{posix} @code{$()} form of command substitution
-is implemented (@pxref{Command Substitution}),
-and preferred to the Bourne shell's @code{``} (which
-is also implemented for backwards compatibility).
-
-@item
-Bash has process substitution (@pxref{Process Substitution}).
-
-@item
-Bash automatically assigns variables that provide information about the
-current user (@env{UID}, @env{EUID}, and @env{GROUPS}), the current host
-(@env{HOSTTYPE}, @env{OSTYPE}, @env{MACHTYPE}, and @env{HOSTNAME}),
-and the instance of Bash that is running (@env{BASH},
-@env{BASH_VERSION}, and @env{BASH_VERSINFO}). @xref{Bash Variables},
-for details.
-
-@item
-The @env{IFS} variable is used to split only the results of expansion,
-not all words (@pxref{Word Splitting}).
-This closes a longstanding shell security hole.
-
-@item
-The filename expansion bracket expression code uses @samp{!} and @samp{^}
-to negate the set of characters between the brackets.
-The Bourne shell uses only @samp{!}.
-
-@item
-Bash implements the full set of @sc{posix} filename expansion operators,
-including @var{character classes}, @var{equivalence classes}, and
-@var{collating symbols} (@pxref{Filename Expansion}).
-
-@item
-Bash implements extended pattern matching features when the @code{extglob}
-shell option is enabled (@pxref{Pattern Matching}).
-
-@item
-It is possible to have a variable and a function with the same name;
-@code{sh} does not separate the two name spaces.
-
-@item
-Bash functions are permitted to have local variables using the
-@code{local} builtin, and thus useful recursive functions may be written
-(@pxref{Bash Builtins}).
-
-@item
-Variable assignments preceding commands affect only that command, even
-builtins and functions (@pxref{Environment}).
-In @code{sh}, all variable assignments
-preceding commands are global unless the command is executed from the
-file system.
-
-@item
-Bash performs filename expansion on filenames specified as operands
-to input and output redirection operators (@pxref{Redirections}).
-
-@item
-Bash contains the @samp{<>} redirection operator, allowing a file to be
-opened for both reading and writing, and the @samp{&>} redirection
-operator, for directing standard output and standard error to the same
-file (@pxref{Redirections}).
-
-@item
-Bash includes the @samp{<<<} redirection operator, allowing a string to
-be used as the standard input to a command.
-
-@item
-Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}}
-redirection operators, which move one file descriptor to another.
-
-@item
-Bash treats a number of filenames specially when they are
-used in redirection operators (@pxref{Redirections}).
-
-@item
-Bash can open network connections to arbitrary machines and services
-with the redirection operators (@pxref{Redirections}).
-
-@item
-The @code{noclobber} option is available to avoid overwriting existing
-files with output redirection (@pxref{The Set Builtin}).
-The @samp{>|} redirection operator may be used to override @code{noclobber}.
-
-@item
-The Bash @code{cd} and @code{pwd} builtins (@pxref{Bourne Shell Builtins})
-each take @option{-L} and @option{-P} options to switch between logical and
-physical modes.
-
-@item
-Bash allows a function to override a builtin with the same name, and provides
-access to that builtin's functionality within the function via the
-@code{builtin} and @code{command} builtins (@pxref{Bash Builtins}).
-
-@item
-The @code{command} builtin allows selective disabling of functions
-when command lookup is performed (@pxref{Bash Builtins}).
-
-@item
-Individual builtins may be enabled or disabled using the @code{enable}
-builtin (@pxref{Bash Builtins}).
-
-@item
-The Bash @code{exec} builtin takes additional options that allow users
-to control the contents of the environment passed to the executed
-command, and what the zeroth argument to the command is to be
-(@pxref{Bourne Shell Builtins}).
-
-@item
-Shell functions may be exported to children via the environment
-using @code{export -f} (@pxref{Shell Functions}).
-
-@item
-The Bash @code{export}, @code{readonly}, and @code{declare} builtins can
-take a @option{-f} option to act on shell functions, a @option{-p} option to
-display variables with various attributes set in a format that can be
-used as shell input, a @option{-n} option to remove various variable
-attributes, and @samp{name=value} arguments to set variable attributes
-and values simultaneously.
-
-@item
-The Bash @code{hash} builtin allows a name to be associated with
-an arbitrary filename, even when that filename cannot be found by
-searching the @env{$PATH}, using @samp{hash -p}
-(@pxref{Bourne Shell Builtins}).
-
-@item
-Bash includes a @code{help} builtin for quick reference to shell
-facilities (@pxref{Bash Builtins}).
-
-@item
-The @code{printf} builtin is available to display formatted output
-(@pxref{Bash Builtins}).
-
-@item
-The Bash @code{read} builtin (@pxref{Bash Builtins})
-will read a line ending in @samp{\} with
-the @option{-r} option, and will use the @env{REPLY} variable as a
-default if no non-option arguments are supplied.
-The Bash @code{read} builtin
-also accepts a prompt string with the @option{-p} option and will use
-Readline to obtain the line when given the @option{-e} option.
-The @code{read} builtin also has additional options to control input:
-the @option{-s} option will turn off echoing of input characters as
-they are read, the @option{-t} option will allow @code{read} to time out
-if input does not arrive within a specified number of seconds, the
-@option{-n} option will allow reading only a specified number of
-characters rather than a full line, and the @option{-d} option will read
-until a particular character rather than newline.
-
-@item
-The @code{return} builtin may be used to abort execution of scripts
-executed with the @code{.} or @code{source} builtins
-(@pxref{Bourne Shell Builtins}).
-
-@item
-Bash includes the @code{shopt} builtin, for finer control of shell
-optional capabilities (@pxref{The Shopt Builtin}), and allows these options
-to be set and unset at shell invocation (@pxref{Invoking Bash}).
-
-@item
-Bash has much more optional behavior controllable with the @code{set}
-builtin (@pxref{The Set Builtin}).
-
-@item
-The @samp{-x} (@option{xtrace}) option displays commands other than
-simple commands when performing an execution trace
-(@pxref{The Set Builtin}).
-
-@item
-The @code{test} builtin (@pxref{Bourne Shell Builtins})
-is slightly different, as it implements the @sc{posix} algorithm,
-which specifies the behavior based on the number of arguments.
-
-@item
-Bash includes the @code{caller} builtin, which displays the context of
-any active subroutine call (a shell function or a script executed with
-the @code{.} or @code{source} builtins). This supports the bash
-debugger.
-
-@item
-The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
-@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
-Commands specified with a @code{DEBUG} trap are executed before every
-simple command, @code{for} command, @code{case} command,
-@code{select} command, every arithmetic @code{for} command, and before
-the first command executes in a shell function.
-The @code{DEBUG} trap is not inherited by shell functions unless the
-function has been given the @code{trace} attribute or the
-@code{functrace} option has been enabled using the @code{shopt} builtin.
-The @code{extdebug} shell option has additional effects on the
-@code{DEBUG} trap.
-
-The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
-@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
-Commands specified with an @code{ERR} trap are executed after a simple
-command fails, with a few exceptions.
-The @code{ERR} trap is not inherited by shell functions unless the
-@code{-o errtrace} option to the @code{set} builtin is enabled.
-
-The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
-@code{RETURN} pseudo-signal specification, similar to
-@code{EXIT} and @code{DEBUG}.
-Commands specified with an @code{RETURN} trap are executed before
-execution resumes after a shell function or a shell script executed with
-@code{.} or @code{source} returns.
-The @code{RETURN} trap is not inherited by shell functions unless the
-function has been given the @code{trace} attribute or the
-@code{functrace} option has been enabled using the @code{shopt} builtin.
-
-@item
-The Bash @code{type} builtin is more extensive and gives more information
-about the names it finds (@pxref{Bash Builtins}).
-
-@item
-The Bash @code{umask} builtin permits a @option{-p} option to cause
-the output to be displayed in the form of a @code{umask} command
-that may be reused as input (@pxref{Bourne Shell Builtins}).
-
-@item
-Bash implements a @code{csh}-like directory stack, and provides the
-@code{pushd}, @code{popd}, and @code{dirs} builtins to manipulate it
-(@pxref{The Directory Stack}).
-Bash also makes the directory stack visible as the value of the
-@env{DIRSTACK} shell variable.
-
-@item
-Bash interprets special backslash-escaped characters in the prompt
-strings when interactive (@pxref{Controlling the Prompt}).
-
-@item
-The Bash restricted mode is more useful (@pxref{The Restricted Shell});
-the SVR4.2 shell restricted mode is too limited.
-
-@item
-The @code{disown} builtin can remove a job from the internal shell
-job table (@pxref{Job Control Builtins}) or suppress the sending
-of @code{SIGHUP} to a job when the shell exits as the result of a
-@code{SIGHUP}.
-
-@item
-Bash includes a number of features to support a separate debugger for
-shell scripts.
-
-@item
-The SVR4.2 shell has two privilege-related builtins
-(@code{mldmode} and @code{priv}) not present in Bash.
-
-@item
-Bash does not have the @code{stop} or @code{newgrp} builtins.
-
-@item
-Bash does not use the @env{SHACCT} variable or perform shell accounting.
-
-@item
-The SVR4.2 @code{sh} uses a @env{TIMEOUT} variable like Bash uses
-@env{TMOUT}.
-
-@end itemize
-
-@noindent
-More features unique to Bash may be found in @ref{Bash Features}.
-
-
-@appendixsec Implementation Differences From The SVR4.2 Shell
-
-Since Bash is a completely new implementation, it does not suffer from
-many of the limitations of the SVR4.2 shell. For instance:
-
-@itemize @bullet
-
-@item
-Bash does not fork a subshell when redirecting into or out of
-a shell control structure such as an @code{if} or @code{while}
-statement.
-
-@item
-Bash does not allow unbalanced quotes. The SVR4.2 shell will silently
-insert a needed closing quote at @code{EOF} under certain circumstances.
-This can be the cause of some hard-to-find errors.
-
-@item
-The SVR4.2 shell uses a baroque memory management scheme based on
-trapping @code{SIGSEGV}. If the shell is started from a process with
-@code{SIGSEGV} blocked (e.g., by using the @code{system()} C library
-function call), it misbehaves badly.
-
-@item
-In a questionable attempt at security, the SVR4.2 shell,
-when invoked without the @option{-p} option, will alter its real
-and effective @sc{uid} and @sc{gid} if they are less than some
-magic threshold value, commonly 100.
-This can lead to unexpected results.
-
-@item
-The SVR4.2 shell does not allow users to trap @code{SIGSEGV},
-@code{SIGALRM}, or @code{SIGCHLD}.
-
-@item
-The SVR4.2 shell does not allow the @env{IFS}, @env{MAILCHECK},
-@env{PATH}, @env{PS1}, or @env{PS2} variables to be unset.
-
-@item
-The SVR4.2 shell treats @samp{^} as the undocumented equivalent of
-@samp{|}.
-
-@item
-Bash allows multiple option arguments when it is invoked (@code{-x -v});
-the SVR4.2 shell allows only one option argument (@code{-xv}). In
-fact, some versions of the shell dump core if the second argument begins
-with a @samp{-}.
-
-@item
-The SVR4.2 shell exits a script if any builtin fails; Bash exits
-a script only if one of the @sc{posix} special builtins fails, and
-only for certain failures, as enumerated in the @sc{posix} standard.
-
-@item
-The SVR4.2 shell behaves differently when invoked as @code{jsh}
-(it turns on job control).
-@end itemize
-
-@node GNU Free Documentation License
-@appendix GNU Free Documentation License
-
-@include fdl.texi
-
-@node Indexes
-@appendix Indexes
-
-@menu
-* Builtin Index:: Index of Bash builtin commands.
-* Reserved Word Index:: Index of Bash reserved words.
-* Variable Index:: Quick reference helps you find the
- variable you want.
-* Function Index:: Index of bindable Readline functions.
-* Concept Index:: General index for concepts described in
- this manual.
-@end menu
-
-@node Builtin Index
-@appendixsec Index of Shell Builtin Commands
-@printindex bt
-
-@node Reserved Word Index
-@appendixsec Index of Shell Reserved Words
-@printindex rw
-
-@node Variable Index
-@appendixsec Parameter and Variable Index
-@printindex vr
-
-@node Function Index
-@appendixsec Function Index
-@printindex fn
-
-@node Concept Index
-@appendixsec Concept Index
-@printindex cp
-
-@bye
diff --git a/doc/version.texi~ b/doc/version.texi~
deleted file mode 100644
index 587db904..00000000
--- a/doc/version.texi~
+++ /dev/null
@@ -1,11 +0,0 @@
-@ignore
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
-@end ignore
-
-@set LASTCHANGE Fri Nov 28 18:36:44 EST 2014
-
-@set EDITION 4.3
-@set VERSION 4.3
-
-@set UPDATED 28 November 2014
-@set UPDATED-MONTH November 2014
diff --git a/examples/loadables/Makefile.in.save b/examples/loadables/Makefile.in.save
deleted file mode 100644
index f6208f5c..00000000
--- a/examples/loadables/Makefile.in.save
+++ /dev/null
@@ -1,238 +0,0 @@
-#
-# Simple makefile for the sample loadable builtins
-#
-# Copyright (C) 1996 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
-
-# Include some boilerplate Gnu makefile definitions.
-prefix = @prefix@
-
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-libdir = @libdir@
-infodir = @infodir@
-includedir = @includedir@
-
-topdir = @top_srcdir@
-BUILD_DIR = @BUILD_DIR@
-srcdir = @srcdir@
-VPATH = .:@srcdir@
-
-@SET_MAKE@
-CC = @CC@
-RM = rm -f
-
-SHELL = @MAKE_SHELL@
-
-host_os = @host_os@
-host_cpu = @host_cpu@
-host_vendor = @host_vendor@
-
-CFLAGS = @CFLAGS@
-LOCAL_CFLAGS = @LOCAL_CFLAGS@
-DEFS = @DEFS@
-LOCAL_DEFS = @LOCAL_DEFS@
-
-CPPFLAGS = @CPPFLAGS@
-
-BASHINCDIR = ${topdir}/include
-
-LIBBUILD = ${BUILD_DIR}/lib
-
-INTL_LIBSRC = ${topdir}/lib/intl
-INTL_BUILDDIR = ${LIBBUILD}/intl
-INTL_INC = @INTL_INC@
-LIBINTL_H = @LIBINTL_H@
-
-CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CFLAGS)
-
-#
-# These values are generated for configure by ${topdir}/support/shobj-conf.
-# If your system is not supported by that script, but includes facilities for
-# dynamic loading of shared objects, please update the script and send the
-# changes to bash-maintainers@gnu.org.
-#
-SHOBJ_CC = @SHOBJ_CC@
-SHOBJ_CFLAGS = @SHOBJ_CFLAGS@
-SHOBJ_LD = @SHOBJ_LD@
-SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@
-SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@
-SHOBJ_LIBS = @SHOBJ_LIBS@
-SHOBJ_STATUS = @SHOBJ_STATUS@
-
-INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins \
- -I$(BASHINCDIR) -I$(BUILD_DIR) -I$(LIBBUILD) \
- -I$(BUILD_DIR)/builtins $(INTL_INC)
-
-.c.o:
- $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) $(INC) -c -o $@ $<
-
-
-ALLPROG = print truefalse sleep pushd finfo logname basename dirname \
- tty pathchk tee head mkdir rmdir printenv id whoami \
- uname sync push ln unlink cut realpath getconf strftime
-OTHERPROG = necho hello cat
-
-all: $(SHOBJ_STATUS)
-
-supported: $(ALLPROG)
-others: $(OTHERPROG)
-
-unsupported:
- @echo "Your system (${host_os}) is not supported by the"
- @echo "${topdir}/support/shobj-conf script."
- @echo "If your operating system provides facilities for dynamic"
- @echo "loading of shared objects using the dlopen(3) interface,"
- @echo "please update the script and re-run configure.
- @echo "Please send the changes you made to bash-maintainers@gnu.org"
- @echo "for inclusion in future bash releases."
-
-everything: supported others
-
-print: print.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ print.o $(SHOBJ_LIBS)
-
-necho: necho.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ necho.o $(SHOBJ_LIBS)
-
-getconf: getconf.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ getconf.o $(SHOBJ_LIBS)
-
-hello: hello.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ hello.o $(SHOBJ_LIBS)
-
-truefalse: truefalse.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ truefalse.o $(SHOBJ_LIBS)
-
-sleep: sleep.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ sleep.o $(SHOBJ_LIBS)
-
-finfo: finfo.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ finfo.o $(SHOBJ_LIBS)
-
-cat: cat.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cat.o $(SHOBJ_LIBS)
-
-logname: logname.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ logname.o $(SHOBJ_LIBS)
-
-basename: basename.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ basename.o $(SHOBJ_LIBS)
-
-dirname: dirname.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ dirname.o $(SHOBJ_LIBS)
-
-tty: tty.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ tty.o $(SHOBJ_LIBS)
-
-pathchk: pathchk.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pathchk.o $(SHOBJ_LIBS)
-
-tee: tee.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ tee.o $(SHOBJ_LIBS)
-
-mkdir: mkdir.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ mkdir.o $(SHOBJ_LIBS)
-
-rmdir: rmdir.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ rmdir.o $(SHOBJ_LIBS)
-
-head: head.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ head.o $(SHOBJ_LIBS)
-
-printenv: printenv.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ printenv.o $(SHOBJ_LIBS)
-
-id: id.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ id.o $(SHOBJ_LIBS)
-
-whoami: whoami.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ whoami.o $(SHOBJ_LIBS)
-
-uname: uname.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ uname.o $(SHOBJ_LIBS)
-
-sync: sync.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ sync.o $(SHOBJ_LIBS)
-
-push: push.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ push.o $(SHOBJ_LIBS)
-
-ln: ln.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ ln.o $(SHOBJ_LIBS)
-
-unlink: unlink.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ unlink.o $(SHOBJ_LIBS)
-
-cut: cut.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS)
-
-realpath: realpath.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ realpath.o $(SHOBJ_LIBS)
-
-strftime: strftime.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ strftime.o $(SHOBJ_LIBS)
-
-# pushd is a special case. We use the same source that the builtin version
-# uses, with special compilation options.
-#
-pushd.c: ${topdir}/builtins/pushd.def
- $(RM) $@
- ${BUILD_DIR}/builtins/mkbuiltins -D ${topdir}/builtins ${topdir}/builtins/pushd.def
-
-pushd.o: pushd.c
- $(RM) $@
- $(SHOBJ_CC) -DHAVE_CONFIG_H -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<
-
-pushd: pushd.o
- $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pushd.o $(SHOBJ_LIBS)
-
-clean:
- $(RM) $(ALLPROG) $(OTHERPROG) *.o
- -( cd perl && ${MAKE} ${MFLAGS} $@ )
-
-mostlyclean: clean
- -( cd perl && ${MAKE} ${MFLAGS} $@ )
-
-distclean maintainer-clean: clean
- $(RM) Makefile pushd.c
- -( cd perl && ${MAKE} ${MFLAGS} $@ )
-
-print.o: print.c
-truefalse.o: truefalse.c
-sleep.o: sleep.c
-finfo.o: finfo.c
-logname.o: logname.c
-basename.o: basename.c
-dirname.o: dirname.c
-tty.o: tty.c
-pathchk.o: pathchk.c
-tee.o: tee.c
-head.o: head.c
-rmdir.o: rmdir.c
-necho.o: necho.c
-getconf.o: getconf.c
-hello.o: hello.c
-cat.o: cat.c
-printenv.o: printenv.c
-id.o: id.c
-whoami.o: whoami.c
-uname.o: uname.c
-sync.o: sync.c
-push.o: push.c
-mkdir.o: mkdir.c
-realpath.o: realpath.c
-strftime.o: strftime.c
diff --git a/lib/readline/doc/Makefile.old b/lib/readline/doc/Makefile.old
deleted file mode 100644
index 58d4dd76..00000000
--- a/lib/readline/doc/Makefile.old
+++ /dev/null
@@ -1,76 +0,0 @@
-# This makefile for Readline library documentation is in -*- text -*- mode.
-# Emacs likes it that way.
-RM = rm -f
-
-MAKEINFO = makeinfo
-TEXI2DVI = texi2dvi
-TEXI2HTML = texi2html
-QUIETPS = #set this to -q to shut up dvips
-DVIPS = dvips -D 300 $(QUIETPS) -o $@ # tricky
-
-INSTALL_DATA = cp
-infodir = /usr/local/info
-
-RLSRC = rlman.texinfo rluser.texinfo rltech.texinfo
-HISTSRC = hist.texinfo hsuser.texinfo hstech.texinfo
-
-DVIOBJ = readline.dvi history.dvi
-INFOOBJ = readline.info history.info
-PSOBJ = readline.ps history.ps
-HTMLOBJ = readline.html history.html
-
-all: info dvi html ps
-nodvi: info html
-
-readline.dvi: $(RLSRC)
- $(TEXI2DVI) rlman.texinfo
- mv rlman.dvi readline.dvi
-
-readline.info: $(RLSRC)
- $(MAKEINFO) --no-split -o $@ rlman.texinfo
-
-history.dvi: ${HISTSRC}
- $(TEXI2DVI) hist.texinfo
- mv hist.dvi history.dvi
-
-history.info: ${HISTSRC}
- $(MAKEINFO) --no-split -o $@ hist.texinfo
-
-readline.ps: readline.dvi
- $(RM) $@
- $(DVIPS) readline.dvi
-
-history.ps: history.dvi
- $(RM) $@
- $(DVIPS) history.dvi
-
-readline.html: ${RLSRC}
- $(TEXI2HTML) rlman.texinfo
- sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman.html > readline.html
- sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman_toc.html > readline_toc.html
- $(RM) rlman.html rlman_toc.html
-
-history.html: ${HISTSRC}
- $(TEXI2HTML) hist.texinfo
- sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist.html > history.html
- sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist_toc.html > history_toc.html
- $(RM) hist.html hist_toc.html
-
-info: $(INFOOBJ)
-dvi: $(DVIOBJ)
-ps: $(PSOBJ)
-html: $(HTMLOBJ)
-
-clean:
- $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
- *.fns *.kys *.tps *.vrs *.o core
-
-distclean: clean
-mostlyclean: clean
-
-maintainer-clean: clean
- $(RM) *.dvi *.info *.info-* *.ps *.html
-
-install: info
- ${INSTALL_DATA} readline.info $(infodir)/readline.info
- ${INSTALL_DATA} history.info $(infodir)/history.info
diff --git a/lib/readline/readline.c~ b/lib/readline/readline.c~
deleted file mode 100644
index 533e8542..00000000
--- a/lib/readline/readline.c~
+++ /dev/null
@@ -1,1423 +0,0 @@
-/* readline.c -- a general facility for reading lines of input
- with emacs style editing and completion. */
-
-/* Copyright (C) 1987-2013 Free Software Foundation, Inc.
-
- This file is part of the GNU Readline Library (Readline), a library
- for reading lines of text with interactive input and history editing.
-
- Readline is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Readline is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#define READLINE_LIBRARY
-
-#if defined (HAVE_CONFIG_H)
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include "posixstat.h"
-#include <fcntl.h>
-#if defined (HAVE_SYS_FILE_H)
-# include <sys/file.h>
-#endif /* HAVE_SYS_FILE_H */
-
-#if defined (HAVE_UNISTD_H)
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-
-#if defined (HAVE_STDLIB_H)
-# include <stdlib.h>
-#else
-# include "ansi_stdlib.h"
-#endif /* HAVE_STDLIB_H */
-
-#if defined (HAVE_LOCALE_H)
-# include <locale.h>
-#endif
-
-#include <stdio.h>
-#include "posixjmp.h"
-#include <errno.h>
-
-#if !defined (errno)
-extern int errno;
-#endif /* !errno */
-
-/* System-specific feature definitions and include files. */
-#include "rldefs.h"
-#include "rlmbutil.h"
-
-#if defined (__EMX__)
-# define INCL_DOSPROCESS
-# include <os2.h>
-#endif /* __EMX__ */
-
-/* Some standard library routines. */
-#include "readline.h"
-#include "history.h"
-
-#include "rlprivate.h"
-#include "rlshell.h"
-#include "xmalloc.h"
-
-#ifndef RL_LIBRARY_VERSION
-# define RL_LIBRARY_VERSION "5.1"
-#endif
-
-#ifndef RL_READLINE_VERSION
-# define RL_READLINE_VERSION 0x0501
-#endif
-
-extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
-
-#if defined (COLOR_SUPPORT)
-extern void _rl_parse_colors PARAMS((void)); /* XXX */
-#endif
-
-
-/* Forward declarations used in this file. */
-static char *readline_internal PARAMS((void));
-static void readline_initialize_everything PARAMS((void));
-
-static void bind_arrow_keys_internal PARAMS((Keymap));
-static void bind_arrow_keys PARAMS((void));
-
-static void bind_bracketed_paste_prefix PARAMS((void));
-
-static void readline_default_bindings PARAMS((void));
-static void reset_default_bindings PARAMS((void));
-
-static int _rl_subseq_result PARAMS((int, Keymap, int, int));
-static int _rl_subseq_getchar PARAMS((int));
-
-/* **************************************************************** */
-/* */
-/* Line editing input utility */
-/* */
-/* **************************************************************** */
-
-const char *rl_library_version = RL_LIBRARY_VERSION;
-
-int rl_readline_version = RL_READLINE_VERSION;
-
-/* True if this is `real' readline as opposed to some stub substitute. */
-int rl_gnu_readline_p = 1;
-
-/* A pointer to the keymap that is currently in use.
- By default, it is the standard emacs keymap. */
-Keymap _rl_keymap = emacs_standard_keymap;
-
-/* The current style of editing. */
-int rl_editing_mode = emacs_mode;
-
-/* The current insert mode: input (the default) or overwrite */
-int rl_insert_mode = RL_IM_DEFAULT;
-
-/* Non-zero if we called this function from _rl_dispatch(). It's present
- so functions can find out whether they were called from a key binding
- or directly from an application. */
-int rl_dispatching;
-
-/* Non-zero if the previous command was a kill command. */
-int _rl_last_command_was_kill = 0;
-
-/* The current value of the numeric argument specified by the user. */
-int rl_numeric_arg = 1;
-
-/* Non-zero if an argument was typed. */
-int rl_explicit_arg = 0;
-
-/* Temporary value used while generating the argument. */
-int rl_arg_sign = 1;
-
-/* Non-zero means we have been called at least once before. */
-static int rl_initialized;
-
-#if 0
-/* If non-zero, this program is running in an EMACS buffer. */
-static int running_in_emacs;
-#endif
-
-/* Flags word encapsulating the current readline state. */
-int rl_readline_state = RL_STATE_NONE;
-
-/* The current offset in the current input line. */
-int rl_point;
-
-/* Mark in the current input line. */
-int rl_mark;
-
-/* Length of the current input line. */
-int rl_end;
-
-/* Make this non-zero to return the current input_line. */
-int rl_done;
-
-/* The last function executed by readline. */
-rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
-
-/* Top level environment for readline_internal (). */
-procenv_t _rl_top_level;
-
-/* The streams we interact with. */
-FILE *_rl_in_stream, *_rl_out_stream;
-
-/* The names of the streams that we do input and output to. */
-FILE *rl_instream = (FILE *)NULL;
-FILE *rl_outstream = (FILE *)NULL;
-
-/* Non-zero means echo characters as they are read. Defaults to no echo;
- set to 1 if there is a controlling terminal, we can get its attributes,
- and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings
- for the code that sets it. */
-int _rl_echoing_p = 0;
-
-/* Current prompt. */
-char *rl_prompt = (char *)NULL;
-int rl_visible_prompt_length = 0;
-
-/* Set to non-zero by calling application if it has already printed rl_prompt
- and does not want readline to do it the first time. */
-int rl_already_prompted = 0;
-
-/* The number of characters read in order to type this complete command. */
-int rl_key_sequence_length = 0;
-
-/* If non-zero, then this is the address of a function to call just
- before readline_internal_setup () prints the first prompt. */
-rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL;
-
-/* If non-zero, this is the address of a function to call just before
- readline_internal_setup () returns and readline_internal starts
- reading input characters. */
-rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL;
-
-/* What we use internally. You should always refer to RL_LINE_BUFFER. */
-static char *the_line;
-
-/* The character that can generate an EOF. Really read from
- the terminal driver... just defaulted here. */
-int _rl_eof_char = CTRL ('D');
-
-/* Non-zero makes this the next keystroke to read. */
-int rl_pending_input = 0;
-
-/* Pointer to a useful terminal name. */
-const char *rl_terminal_name = (const char *)NULL;
-
-/* Non-zero means to always use horizontal scrolling in line display. */
-int _rl_horizontal_scroll_mode = 0;
-
-/* Non-zero means to display an asterisk at the starts of history lines
- which have been modified. */
-int _rl_mark_modified_lines = 0;
-
-/* The style of `bell' notification preferred. This can be set to NO_BELL,
- AUDIBLE_BELL, or VISIBLE_BELL. */
-int _rl_bell_preference = AUDIBLE_BELL;
-
-/* String inserted into the line by rl_insert_comment (). */
-char *_rl_comment_begin;
-
-/* Keymap holding the function currently being executed. */
-Keymap rl_executing_keymap;
-
-/* Keymap we're currently using to dispatch. */
-Keymap _rl_dispatching_keymap;
-
-/* Non-zero means to erase entire line, including prompt, on empty input lines. */
-int rl_erase_empty_line = 0;
-
-/* Non-zero means to read only this many characters rather than up to a
- character bound to accept-line. */
-int rl_num_chars_to_read;
-
-/* Line buffer and maintenance. */
-char *rl_line_buffer = (char *)NULL;
-int rl_line_buffer_len = 0;
-
-/* Key sequence `contexts' */
-_rl_keyseq_cxt *_rl_kscxt = 0;
-
-int rl_executing_key;
-char *rl_executing_keyseq = 0;
-int _rl_executing_keyseq_size = 0;
-
-/* Timeout (specified in milliseconds) when reading characters making up an
- ambiguous multiple-key sequence */
-int _rl_keyseq_timeout = 500;
-
-#define RESIZE_KEYSEQ_BUFFER() \
- do \
- { \
- if (rl_key_sequence_length + 2 >= _rl_executing_keyseq_size) \
- { \
- _rl_executing_keyseq_size += 16; \
- rl_executing_keyseq = xrealloc (rl_executing_keyseq, _rl_executing_keyseq_size); \
- } \
- } \
- while (0);
-
-/* Forward declarations used by the display, termcap, and history code. */
-
-/* **************************************************************** */
-/* */
-/* `Forward' declarations */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means do not parse any lines other than comments and
- parser directives. */
-unsigned char _rl_parsing_conditionalized_out = 0;
-
-/* Non-zero means to convert characters with the meta bit set to
- escape-prefixed characters so we can indirect through
- emacs_meta_keymap or vi_escape_keymap. */
-int _rl_convert_meta_chars_to_ascii = 1;
-
-/* Non-zero means to output characters with the meta bit set directly
- rather than as a meta-prefixed escape sequence. */
-int _rl_output_meta_chars = 0;
-
-/* Non-zero means to look at the termios special characters and bind
- them to equivalent readline functions at startup. */
-int _rl_bind_stty_chars = 1;
-
-/* Non-zero means to go through the history list at every newline (or
- whenever rl_done is set and readline returns) and revert each line to
- its initial state. */
-int _rl_revert_all_at_newline = 0;
-
-/* Non-zero means to honor the termios ECHOCTL bit and echo control
- characters corresponding to keyboard-generated signals. */
-int _rl_echo_control_chars = 1;
-
-/* Non-zero means to prefix the displayed prompt with a character indicating
- the editing mode: @ for emacs, : for vi-command, + for vi-insert. */
-int _rl_show_mode_in_prompt = 0;
-
-/* Non-zero means to attempt to put the terminal in `bracketed paste mode',
- where it will prefix pasted text with an escape sequence and send
- another to mark the end of the paste. */
-int _rl_enable_bracketed_paste = 0;
-
-/* **************************************************************** */
-/* */
-/* Top Level Functions */
-/* */
-/* **************************************************************** */
-
-/* Non-zero means treat 0200 bit in terminal input as Meta bit. */
-int _rl_meta_flag = 0; /* Forward declaration */
-
-/* Set up the prompt and expand it. Called from readline() and
- rl_callback_handler_install (). */
-int
-rl_set_prompt (prompt)
- const char *prompt;
-{
- FREE (rl_prompt);
- rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
- rl_display_prompt = rl_prompt ? rl_prompt : "";
-
- rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
- return 0;
-}
-
-/* Read a line of input. Prompt with PROMPT. An empty PROMPT means
- none. A return value of NULL means that EOF was encountered. */
-char *
-readline (prompt)
- const char *prompt;
-{
- char *value;
-#if 0
- int in_callback;
-#endif
-
- /* If we are at EOF return a NULL string. */
- if (rl_pending_input == EOF)
- {
- rl_clear_pending_input ();
- return ((char *)NULL);
- }
-
-#if 0
- /* If readline() is called after installing a callback handler, temporarily
- turn off the callback state to avoid ensuing messiness. Patch supplied
- by the gdb folks. XXX -- disabled. This can be fooled and readline
- left in a strange state by a poorly-timed longjmp. */
- if (in_callback = RL_ISSTATE (RL_STATE_CALLBACK))
- RL_UNSETSTATE (RL_STATE_CALLBACK);
-#endif
-
- rl_set_prompt (prompt);
-
- rl_initialize ();
- if (rl_prep_term_function)
- (*rl_prep_term_function) (_rl_meta_flag);
-
-#if defined (HANDLE_SIGNALS)
- rl_set_signals ();
-#endif
-
- value = readline_internal ();
- if (rl_deprep_term_function)
- (*rl_deprep_term_function) ();
-
-#if defined (HANDLE_SIGNALS)
- rl_clear_signals ();
-#endif
-
-#if 0
- if (in_callback)
- RL_SETSTATE (RL_STATE_CALLBACK);
-#endif
-
-#if HAVE_DECL_AUDIT_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT)
- if (value)
- _rl_audit_tty (value);
-#endif
-
- return (value);
-}
-
-#if defined (READLINE_CALLBACKS)
-# define STATIC_CALLBACK
-#else
-# define STATIC_CALLBACK static
-#endif
-
-STATIC_CALLBACK void
-readline_internal_setup ()
-{
- char *nprompt;
-
- _rl_in_stream = rl_instream;
- _rl_out_stream = rl_outstream;
-
- /* Enable the meta key only for the duration of readline(), if this
- terminal has one and the terminal has been initialized */
- if (_rl_enable_meta & RL_ISSTATE (RL_STATE_TERMPREPPED))
- _rl_enable_meta_key ();
-
- if (rl_startup_hook)
- (*rl_startup_hook) ();
-
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- rl_vi_insertion_mode (1, 'i'); /* don't want to reset last */
-#endif /* VI_MODE */
-
- /* If we're not echoing, we still want to at least print a prompt, because
- rl_redisplay will not do it for us. If the calling application has a
- custom redisplay function, though, let that function handle it. */
- if (_rl_echoing_p == 0 && rl_redisplay_function == rl_redisplay)
- {
- if (rl_prompt && rl_already_prompted == 0)
- {
- nprompt = _rl_strip_prompt (rl_prompt);
- fprintf (_rl_out_stream, "%s", nprompt);
- fflush (_rl_out_stream);
- xfree (nprompt);
- }
- }
- else
- {
- if (rl_prompt && rl_already_prompted)
- rl_on_new_line_with_prompt ();
- else
- rl_on_new_line ();
- (*rl_redisplay_function) ();
- }
-
- if (rl_pre_input_hook)
- (*rl_pre_input_hook) ();
-
- RL_CHECK_SIGNALS ();
-}
-
-STATIC_CALLBACK char *
-readline_internal_teardown (eof)
- int eof;
-{
- char *temp;
- HIST_ENTRY *entry;
-
- RL_CHECK_SIGNALS ();
-
- /* Restore the original of this history line, iff the line that we
- are editing was originally in the history, AND the line has changed. */
- entry = current_history ();
-
- if (entry && rl_undo_list)
- {
- temp = savestring (the_line);
- rl_revert_line (1, 0);
- entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL);
- _rl_free_history_entry (entry);
-
- strcpy (the_line, temp);
- xfree (temp);
- }
-
- if (_rl_revert_all_at_newline)
- _rl_revert_all_lines ();
-
- /* At any rate, it is highly likely that this line has an undo list. Get
- rid of it now. */
- if (rl_undo_list)
- rl_free_undo_list ();
-
- /* Disable the meta key, if this terminal has one and we were told to use it.
- The check whether or not we sent the enable string is in
- _rl_disable_meta_key(); the flag is set in _rl_enable_meta_key */
- _rl_disable_meta_key ();
-
- /* Restore normal cursor, if available. */
- _rl_set_insert_mode (RL_IM_INSERT, 0);
-
- return (eof ? (char *)NULL : savestring (the_line));
-}
-
-void
-_rl_internal_char_cleanup ()
-{
-#if defined (VI_MODE)
- /* In vi mode, when you exit insert mode, the cursor moves back
- over the previous character. We explicitly check for that here. */
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
- rl_vi_check ();
-#endif /* VI_MODE */
-
- if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
- {
- (*rl_redisplay_function) ();
- _rl_want_redisplay = 0;
- rl_newline (1, '\n');
- }
-
- if (rl_done == 0)
- {
- (*rl_redisplay_function) ();
- _rl_want_redisplay = 0;
- }
-
- /* If the application writer has told us to erase the entire line if
- the only character typed was something bound to rl_newline, do so. */
- if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
- rl_point == 0 && rl_end == 0)
- _rl_erase_entire_line ();
-}
-
-STATIC_CALLBACK int
-#if defined (READLINE_CALLBACKS)
-readline_internal_char ()
-#else
-readline_internal_charloop ()
-#endif
-{
- static int lastc, eof_found;
- int c, code, lk;
-
- lastc = EOF;
- eof_found = 0;
-
-#if !defined (READLINE_CALLBACKS)
- while (rl_done == 0)
- {
-#endif
- lk = _rl_last_command_was_kill;
-
-#if defined (HAVE_POSIX_SIGSETJMP)
- code = sigsetjmp (_rl_top_level, 0);
-#else
- code = setjmp (_rl_top_level);
-#endif
-
- if (code)
- {
- (*rl_redisplay_function) ();
- _rl_want_redisplay = 0;
- /* If we get here, we're not being called from something dispatched
- from _rl_callback_read_char(), which sets up its own value of
- _rl_top_level (saving and restoring the old, of course), so
- we can just return here. */
- if (RL_ISSTATE (RL_STATE_CALLBACK))
- return (0);
- }
-
- if (rl_pending_input == 0)
- {
- /* Then initialize the argument and number of keys read. */
- _rl_reset_argument ();
- rl_key_sequence_length = 0;
- rl_executing_keyseq[0] = 0;
- }
-
- RL_SETSTATE(RL_STATE_READCMD);
- c = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_READCMD);
-
- /* look at input.c:rl_getc() for the circumstances under which this will
- be returned; punt immediately on read error without converting it to
- a newline; assume that rl_read_key has already called the signal
- handler. */
- if (c == READERR)
- {
-#if defined (READLINE_CALLBACKS)
- RL_SETSTATE(RL_STATE_DONE);
- return (rl_done = 1);
-#else
- eof_found = 1;
- break;
-#endif
- }
-
- /* EOF typed to a non-blank line is a <NL>. If we want to change this,
- to force any existing line to be ignored when read(2) reads EOF,
- for example, this is the place to change. */
- if (c == EOF && rl_end)
- {
- if (RL_SIG_RECEIVED ())
- {
- RL_CHECK_SIGNALS ();
- if (rl_signal_event_hook)
- (*rl_signal_event_hook) (); /* XXX */
- }
-
- /* XXX - reading two consecutive EOFs returns EOF */
- if (RL_ISSTATE (RL_STATE_TERMPREPPED))
- {
- if (lastc == _rl_eof_char || lastc == EOF)
- rl_end = 0;
- else
- c = _rl_eof_char;
- }
- else
- c = NEWLINE;
- }
-
- /* The character _rl_eof_char typed to blank line, and not as the
- previous character is interpreted as EOF. */
- if (((c == _rl_eof_char && lastc != c) || c == EOF) && rl_end == 0)
- {
-#if defined (READLINE_CALLBACKS)
- RL_SETSTATE(RL_STATE_DONE);
- return (rl_done = 1);
-#else
- eof_found = 1;
- break;
-#endif
- }
-
- lastc = c;
- _rl_dispatch ((unsigned char)c, _rl_keymap);
- RL_CHECK_SIGNALS ();
-
- /* If there was no change in _rl_last_command_was_kill, then no kill
- has taken place. Note that if input is pending we are reading
- a prefix command, so nothing has changed yet. */
- if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
- _rl_last_command_was_kill = 0;
-
- _rl_internal_char_cleanup ();
-
-#if defined (READLINE_CALLBACKS)
- return 0;
-#else
- }
-
- return (eof_found);
-#endif
-}
-
-#if defined (READLINE_CALLBACKS)
-static int
-readline_internal_charloop ()
-{
- int eof = 1;
-
- while (rl_done == 0)
- eof = readline_internal_char ();
- return (eof);
-}
-#endif /* READLINE_CALLBACKS */
-
-/* Read a line of input from the global rl_instream, doing output on
- the global rl_outstream.
- If rl_prompt is non-null, then that is our prompt. */
-static char *
-readline_internal ()
-{
- int eof;
-
- readline_internal_setup ();
- eof = readline_internal_charloop ();
- return (readline_internal_teardown (eof));
-}
-
-void
-_rl_init_line_state ()
-{
- rl_point = rl_end = rl_mark = 0;
- the_line = rl_line_buffer;
- the_line[0] = 0;
-}
-
-void
-_rl_set_the_line ()
-{
- the_line = rl_line_buffer;
-}
-
-#if defined (READLINE_CALLBACKS)
-_rl_keyseq_cxt *
-_rl_keyseq_cxt_alloc ()
-{
- _rl_keyseq_cxt *cxt;
-
- cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt));
-
- cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0;
-
- cxt->okey = 0;
- cxt->ocxt = _rl_kscxt;
- cxt->childval = 42; /* sentinel value */
-
- return cxt;
-}
-
-void
-_rl_keyseq_cxt_dispose (cxt)
- _rl_keyseq_cxt *cxt;
-{
- xfree (cxt);
-}
-
-void
-_rl_keyseq_chain_dispose ()
-{
- _rl_keyseq_cxt *cxt;
-
- while (_rl_kscxt)
- {
- cxt = _rl_kscxt;
- _rl_kscxt = _rl_kscxt->ocxt;
- _rl_keyseq_cxt_dispose (cxt);
- }
-}
-#endif
-
-static int
-_rl_subseq_getchar (key)
- int key;
-{
- int k;
-
- if (key == ESC)
- RL_SETSTATE(RL_STATE_METANEXT);
- RL_SETSTATE(RL_STATE_MOREINPUT);
- k = rl_read_key ();
- RL_UNSETSTATE(RL_STATE_MOREINPUT);
- if (key == ESC)
- RL_UNSETSTATE(RL_STATE_METANEXT);
-
- return k;
-}
-
-#if defined (READLINE_CALLBACKS)
-int
-_rl_dispatch_callback (cxt)
- _rl_keyseq_cxt *cxt;
-{
- int nkey, r;
-
- /* For now */
- /* The first time this context is used, we want to read input and dispatch
- on it. When traversing the chain of contexts back `up', we want to use
- the value from the next context down. We're simulating recursion using
- a chain of contexts. */
- if ((cxt->flags & KSEQ_DISPATCHED) == 0)
- {
- nkey = _rl_subseq_getchar (cxt->okey);
- if (nkey < 0)
- {
- _rl_abort_internal ();
- return -1;
- }
- r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
- cxt->flags |= KSEQ_DISPATCHED;
- }
- else
- r = cxt->childval;
-
- /* For now */
- if (r != -3) /* don't do this if we indicate there will be other matches */
- r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
-
- RL_CHECK_SIGNALS ();
- /* We only treat values < 0 specially to simulate recursion. */
- if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
- {
- _rl_keyseq_chain_dispose ();
- RL_UNSETSTATE (RL_STATE_MULTIKEY);
- return r;
- }
-
- if (r != -3) /* magic value that says we added to the chain */
- _rl_kscxt = cxt->ocxt;
- if (_rl_kscxt)
- _rl_kscxt->childval = r;
- if (r != -3)
- _rl_keyseq_cxt_dispose (cxt);
-
- return r;
-}
-#endif /* READLINE_CALLBACKS */
-
-/* Do the command associated with KEY in MAP.
- If the associated command is really a keymap, then read
- another key, and dispatch into that map. */
-int
-_rl_dispatch (key, map)
- register int key;
- Keymap map;
-{
- _rl_dispatching_keymap = map;
- return _rl_dispatch_subseq (key, map, 0);
-}
-
-int
-_rl_dispatch_subseq (key, map, got_subseq)
- register int key;
- Keymap map;
- int got_subseq;
-{
- int r, newkey;
- char *macro;
- rl_command_func_t *func;
-#if defined (READLINE_CALLBACKS)
- _rl_keyseq_cxt *cxt;
-#endif
-
- if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
- {
- if (map[ESC].type == ISKMAP)
- {
- if (RL_ISSTATE (RL_STATE_MACRODEF))
- _rl_add_macro_char (ESC);
- RESIZE_KEYSEQ_BUFFER ();
- rl_executing_keyseq[rl_key_sequence_length++] = ESC;
- map = FUNCTION_TO_KEYMAP (map, ESC);
- key = UNMETA (key);
- return (_rl_dispatch (key, map));
- }
- else
- rl_ding ();
- return 0;
- }
-
- if (RL_ISSTATE (RL_STATE_MACRODEF))
- _rl_add_macro_char (key);
-
- r = 0;
- switch (map[key].type)
- {
- case ISFUNC:
- func = map[key].function;
- if (func)
- {
- /* Special case rl_do_lowercase_version (). */
- if (func == rl_do_lowercase_version)
- /* Should we do anything special if key == ANYOTHERKEY? */
- return (_rl_dispatch (_rl_to_lower (key), map));
-
- rl_executing_keymap = map;
- rl_executing_key = key;
-
- RESIZE_KEYSEQ_BUFFER();
- rl_executing_keyseq[rl_key_sequence_length++] = key;
- rl_executing_keyseq[rl_key_sequence_length] = '\0';
-
- rl_dispatching = 1;
- RL_SETSTATE(RL_STATE_DISPATCHING);
- r = (*func) (rl_numeric_arg * rl_arg_sign, key);
- RL_UNSETSTATE(RL_STATE_DISPATCHING);
- rl_dispatching = 0;
-
- /* If we have input pending, then the last command was a prefix
- command. Don't change the state of rl_last_func. Otherwise,
- remember the last command executed in this variable. */
- if (rl_pending_input == 0 && map[key].function != rl_digit_argument)
- rl_last_func = map[key].function;
-
- RL_CHECK_SIGNALS ();
- }
- else if (map[ANYOTHERKEY].function)
- {
- /* OK, there's no function bound in this map, but there is a
- shadow function that was overridden when the current keymap
- was created. Return -2 to note that. */
- if (RL_ISSTATE (RL_STATE_MACROINPUT))
- _rl_prev_macro_key ();
- else
- _rl_unget_char (key);
- return -2;
- }
- else if (got_subseq)
- {
- /* Return -1 to note that we're in a subsequence, but we don't
- have a matching key, nor was one overridden. This means
- we need to back up the recursion chain and find the last
- subsequence that is bound to a function. */
- if (RL_ISSTATE (RL_STATE_MACROINPUT))
- _rl_prev_macro_key ();
- else
- _rl_unget_char (key);
- return -1;
- }
- else
- {
-#if defined (READLINE_CALLBACKS)
- RL_UNSETSTATE (RL_STATE_MULTIKEY);
- _rl_keyseq_chain_dispose ();
-#endif
- _rl_abort_internal ();
- return -1;
- }
- break;
-
- case ISKMAP:
- if (map[key].function != 0)
- {
-#if defined (VI_MODE)
- /* The only way this test will be true is if a subsequence has been
- bound starting with ESC, generally the arrow keys. What we do is
- check whether there's input in the queue, which there generally
- will be if an arrow key has been pressed, and, if there's not,
- just dispatch to (what we assume is) rl_vi_movement_mode right
- away. This is essentially an input test with a zero timeout (by
- default) or a timeout determined by the value of `keyseq-timeout' */
- /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued
- takes microseconds, so multiply by 1000 */
- if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap
- && _rl_input_queued ((_rl_keyseq_timeout > 0) ? _rl_keyseq_timeout*1000 : 0) == 0)
- return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key)));
-#endif
-
- RESIZE_KEYSEQ_BUFFER ();
- rl_executing_keyseq[rl_key_sequence_length++] = key;
- _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key);
-
- /* Allocate new context here. Use linked contexts (linked through
- cxt->ocxt) to simulate recursion */
-#if defined (READLINE_CALLBACKS)
- if (RL_ISSTATE (RL_STATE_CALLBACK))
- {
- /* Return 0 only the first time, to indicate success to
- _rl_callback_read_char. The rest of the time, we're called
- from _rl_dispatch_callback, so we return -3 to indicate
- special handling is necessary. */
- r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0;
- cxt = _rl_keyseq_cxt_alloc ();
-
- if (got_subseq)
- cxt->flags |= KSEQ_SUBSEQ;
- cxt->okey = key;
- cxt->oldmap = map;
- cxt->dmap = _rl_dispatching_keymap;
- cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function;
-
- RL_SETSTATE (RL_STATE_MULTIKEY);
- _rl_kscxt = cxt;
-
- return r; /* don't indicate immediate success */
- }
-#endif
-
- /* Tentative inter-character timeout for potential multi-key
- sequences? If no input within timeout, abort sequence and
- act as if we got non-matching input. */
- /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued
- takes microseconds, so multiply by 1000 */
- if (_rl_keyseq_timeout > 0 &&
- (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) &&
- _rl_pushed_input_available () == 0 &&
- _rl_dispatching_keymap[ANYOTHERKEY].function &&
- _rl_input_queued (_rl_keyseq_timeout*1000) == 0)
- return (_rl_subseq_result (-2, map, key, got_subseq));
-
- newkey = _rl_subseq_getchar (key);
- if (newkey < 0)
- {
- _rl_abort_internal ();
- return -1;
- }
-
- r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function);
- return _rl_subseq_result (r, map, key, got_subseq);
- }
- else
- {
- _rl_abort_internal (); /* XXX */
- return -1;
- }
- break;
-
- case ISMACR:
- if (map[key].function != 0)
- {
- rl_executing_keyseq[rl_key_sequence_length] = '\0';
- macro = savestring ((char *)map[key].function);
- _rl_with_macro_input (macro);
- return 0;
- }
- break;
- }
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
- key != ANYOTHERKEY &&
- _rl_dispatching_keymap == vi_movement_keymap &&
- _rl_vi_textmod_command (key))
- _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
-#endif
-
- return (r);
-}
-
-static int
-_rl_subseq_result (r, map, key, got_subseq)
- int r;
- Keymap map;
- int key, got_subseq;
-{
- Keymap m;
- int type, nt;
- rl_command_func_t *func, *nf;
-
- if (r == -2)
- /* We didn't match anything, and the keymap we're indexed into
- shadowed a function previously bound to that prefix. Call
- the function. The recursive call to _rl_dispatch_subseq has
- already taken care of pushing any necessary input back onto
- the input queue with _rl_unget_char. */
- {
- m = _rl_dispatching_keymap;
- type = m[ANYOTHERKEY].type;
- func = m[ANYOTHERKEY].function;
- if (type == ISFUNC && func == rl_do_lowercase_version)
- r = _rl_dispatch (_rl_to_lower (key), map);
- else if (type == ISFUNC && func == rl_insert)
- {
- /* If the function that was shadowed was self-insert, we
- somehow need a keymap with map[key].func == self-insert.
- Let's use this one. */
- nt = m[key].type;
- nf = m[key].function;
-
- m[key].type = type;
- m[key].function = func;
- r = _rl_dispatch (key, m);
- m[key].type = nt;
- m[key].function = nf;
- }
- else
- r = _rl_dispatch (ANYOTHERKEY, m);
- }
- else if (r && map[ANYOTHERKEY].function)
- {
- /* We didn't match (r is probably -1), so return something to
- tell the caller that it should try ANYOTHERKEY for an
- overridden function. */
- if (RL_ISSTATE (RL_STATE_MACROINPUT))
- _rl_prev_macro_key ();
- else
- _rl_unget_char (key);
- _rl_dispatching_keymap = map;
- return -2;
- }
- else if (r && got_subseq)
- {
- /* OK, back up the chain. */
- if (RL_ISSTATE (RL_STATE_MACROINPUT))
- _rl_prev_macro_key ();
- else
- _rl_unget_char (key);
- _rl_dispatching_keymap = map;
- return -1;
- }
-
- return r;
-}
-
-/* **************************************************************** */
-/* */
-/* Initializations */
-/* */
-/* **************************************************************** */
-
-/* Initialize readline (and terminal if not already). */
-int
-rl_initialize ()
-{
- /* If we have never been called before, initialize the
- terminal and data structures. */
- if (!rl_initialized)
- {
- RL_SETSTATE(RL_STATE_INITIALIZING);
- readline_initialize_everything ();
- RL_UNSETSTATE(RL_STATE_INITIALIZING);
- rl_initialized++;
- RL_SETSTATE(RL_STATE_INITIALIZED);
- }
-
- /* Initialize the current line information. */
- _rl_init_line_state ();
-
- /* We aren't done yet. We haven't even gotten started yet! */
- rl_done = 0;
- RL_UNSETSTATE(RL_STATE_DONE);
-
- /* Tell the history routines what is going on. */
- _rl_start_using_history ();
-
- /* Make the display buffer match the state of the line. */
- rl_reset_line_state ();
-
- /* No such function typed yet. */
- rl_last_func = (rl_command_func_t *)NULL;
-
- /* Parsing of key-bindings begins in an enabled state. */
- _rl_parsing_conditionalized_out = 0;
-
-#if defined (VI_MODE)
- if (rl_editing_mode == vi_mode)
- _rl_vi_initialize_line ();
-#endif
-
- /* Each line starts in insert mode (the default). */
- _rl_set_insert_mode (RL_IM_DEFAULT, 1);
-
- return 0;
-}
-
-#if 0
-#if defined (__EMX__)
-static void
-_emx_build_environ ()
-{
- TIB *tibp;
- PIB *pibp;
- char *t, **tp;
- int c;
-
- DosGetInfoBlocks (&tibp, &pibp);
- t = pibp->pib_pchenv;
- for (c = 1; *t; c++)
- t += strlen (t) + 1;
- tp = environ = (char **)xmalloc ((c + 1) * sizeof (char *));
- t = pibp->pib_pchenv;
- while (*t)
- {
- *tp++ = t;
- t += strlen (t) + 1;
- }
- *tp = 0;
-}
-#endif /* __EMX__ */
-#endif
-
-/* Initialize the entire state of the world. */
-static void
-readline_initialize_everything ()
-{
-#if 0
-#if defined (__EMX__)
- if (environ == 0)
- _emx_build_environ ();
-#endif
-#endif
-
-#if 0
- /* Find out if we are running in Emacs -- UNUSED. */
- running_in_emacs = sh_get_env_value ("EMACS") != (char *)0;
-#endif
-
- /* Set up input and output if they are not already set up. */
- if (!rl_instream)
- rl_instream = stdin;
-
- if (!rl_outstream)
- rl_outstream = stdout;
-
- /* Bind _rl_in_stream and _rl_out_stream immediately. These values
- may change, but they may also be used before readline_internal ()
- is called. */
- _rl_in_stream = rl_instream;
- _rl_out_stream = rl_outstream;
-
- /* Allocate data structures. */
- if (rl_line_buffer == 0)
- rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
-
- /* Initialize the terminal interface. */
- if (rl_terminal_name == 0)
- rl_terminal_name = sh_get_env_value ("TERM");
- _rl_init_terminal_io (rl_terminal_name);
-
- /* Bind tty characters to readline functions. */
- readline_default_bindings ();
-
- /* Initialize the function names. */
- rl_initialize_funmap ();
-
- /* Decide whether we should automatically go into eight-bit mode. */
- _rl_init_eightbit ();
-
- /* Read in the init file. */
- rl_read_init_file ((char *)NULL);
-
- /* XXX */
- if (_rl_horizontal_scroll_mode && _rl_term_autowrap)
- {
- _rl_screenwidth--;
- _rl_screenchars -= _rl_screenheight;
- }
-
- /* Override the effect of any `set keymap' assignments in the
- inputrc file. */
- rl_set_keymap_from_edit_mode ();
-
- /* Try to bind a common arrow key prefix, if not already bound. */
- bind_arrow_keys ();
-
- /* Bind the bracketed paste prefix assuming that the user will enable
- it on terminals that support it. */
- bind_bracketed_paste_prefix ();
-
- /* If the completion parser's default word break characters haven't
- been set yet, then do so now. */
- if (rl_completer_word_break_characters == (char *)NULL)
- rl_completer_word_break_characters = (char *)rl_basic_word_break_characters;
-
-#if defined (COLOR_SUPPORT)
- if (_rl_colored_stats || _rl_colored_completion_prefix)
- _rl_parse_colors ();
-#endif
-
- rl_executing_keyseq = malloc (_rl_executing_keyseq_size = 16);
- if (rl_executing_keyseq)
- rl_executing_keyseq[0] = '\0';
-}
-
-/* If this system allows us to look at the values of the regular
- input editing characters, then bind them to their readline
- equivalents, iff the characters are not bound to keymaps. */
-static void
-readline_default_bindings ()
-{
- if (_rl_bind_stty_chars)
- rl_tty_set_default_bindings (_rl_keymap);
-}
-
-/* Reset the default bindings for the terminal special characters we're
- interested in back to rl_insert and read the new ones. */
-static void
-reset_default_bindings ()
-{
- if (_rl_bind_stty_chars)
- {
- rl_tty_unset_default_bindings (_rl_keymap);
- rl_tty_set_default_bindings (_rl_keymap);
- }
-}
-
-/* Bind some common arrow key sequences in MAP. */
-static void
-bind_arrow_keys_internal (map)
- Keymap map;
-{
- Keymap xkeymap;
-
- xkeymap = _rl_keymap;
- _rl_keymap = map;
-
-#if defined (__MSDOS__)
- rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history);
- rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char);
- rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char);
- rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history);
-#endif
-
- rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history);
- rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history);
- rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char);
- rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char);
- rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line);
- rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line);
-
- rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history);
- rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history);
- rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char);
- rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char);
- rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line);
- rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line);
-
-#if defined (__MINGW32__)
- rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history);
- rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history);
- rl_bind_keyseq_if_unbound ("\340M", rl_forward_char);
- rl_bind_keyseq_if_unbound ("\340K", rl_backward_char);
- rl_bind_keyseq_if_unbound ("\340G", rl_beg_of_line);
- rl_bind_keyseq_if_unbound ("\340O", rl_end_of_line);
- rl_bind_keyseq_if_unbound ("\340S", rl_delete);
- rl_bind_keyseq_if_unbound ("\340R", rl_overwrite_mode);
-
- /* These may or may not work because of the embedded NUL. */
- rl_bind_keyseq_if_unbound ("\\000H", rl_get_previous_history);
- rl_bind_keyseq_if_unbound ("\\000P", rl_get_next_history);
- rl_bind_keyseq_if_unbound ("\\000M", rl_forward_char);
- rl_bind_keyseq_if_unbound ("\\000K", rl_backward_char);
- rl_bind_keyseq_if_unbound ("\\000G", rl_beg_of_line);
- rl_bind_keyseq_if_unbound ("\\000O", rl_end_of_line);
- rl_bind_keyseq_if_unbound ("\\000S", rl_delete);
- rl_bind_keyseq_if_unbound ("\\000R", rl_overwrite_mode);
-#endif
-
- _rl_keymap = xkeymap;
-}
-
-/* Try and bind the common arrow key prefixes after giving termcap and
- the inputrc file a chance to bind them and create `real' keymaps
- for the arrow key prefix. */
-static void
-bind_arrow_keys ()
-{
- bind_arrow_keys_internal (emacs_standard_keymap);
-
-#if defined (VI_MODE)
- bind_arrow_keys_internal (vi_movement_keymap);
- /* Unbind vi_movement_keymap[ESC] to allow users to repeatedly hit ESC
- in vi command mode while still allowing the arrow keys to work. */
- if (vi_movement_keymap[ESC].type == ISKMAP)
- rl_bind_keyseq_in_map ("\033", (rl_command_func_t *)NULL, vi_movement_keymap);
- bind_arrow_keys_internal (vi_insertion_keymap);
-#endif
-}
-
-static void
-bind_bracketed_paste_prefix ()
-{
- Keymap xkeymap;
-
- xkeymap = _rl_keymap;
-
- _rl_keymap = emacs_standard_keymap;
- rl_bind_keyseq_if_unbound (BRACK_PASTE_PREF, rl_bracketed_paste_begin);
-
- _rl_keymap = vi_insertion_keymap;
- rl_bind_keyseq_if_unbound (BRACK_PASTE_PREF, rl_bracketed_paste_begin);
-
- _rl_keymap = xkeymap;
-}
-
-/* **************************************************************** */
-/* */
-/* Saving and Restoring Readline's state */
-/* */
-/* **************************************************************** */
-
-int
-rl_save_state (sp)
- struct readline_state *sp;
-{
- if (sp == 0)
- return -1;
-
- sp->point = rl_point;
- sp->end = rl_end;
- sp->mark = rl_mark;
- sp->buffer = rl_line_buffer;
- sp->buflen = rl_line_buffer_len;
- sp->ul = rl_undo_list;
- sp->prompt = rl_prompt;
-
- sp->rlstate = rl_readline_state;
- sp->done = rl_done;
- sp->kmap = _rl_keymap;
-
- sp->lastfunc = rl_last_func;
- sp->insmode = rl_insert_mode;
- sp->edmode = rl_editing_mode;
- sp->kseq = rl_executing_keyseq;
- sp->kseqlen = rl_key_sequence_length;
- sp->inf = rl_instream;
- sp->outf = rl_outstream;
- sp->pendingin = rl_pending_input;
- sp->macro = rl_executing_macro;
-
- sp->catchsigs = rl_catch_signals;
- sp->catchsigwinch = rl_catch_sigwinch;
-
- sp->entryfunc = rl_completion_entry_function;
- sp->menuentryfunc = rl_menu_completion_entry_function;
- sp->ignorefunc = rl_ignore_some_completions_function;
- sp->attemptfunc = rl_attempted_completion_function;
- sp->wordbreakchars = rl_completer_word_break_characters;
-
- return (0);
-}
-
-int
-rl_restore_state (sp)
- struct readline_state *sp;
-{
- if (sp == 0)
- return -1;
-
- rl_point = sp->point;
- rl_end = sp->end;
- rl_mark = sp->mark;
- the_line = rl_line_buffer = sp->buffer;
- rl_line_buffer_len = sp->buflen;
- rl_undo_list = sp->ul;
- rl_prompt = sp->prompt;
-
- rl_readline_state = sp->rlstate;
- rl_done = sp->done;
- _rl_keymap = sp->kmap;
-
- rl_last_func = sp->lastfunc;
- rl_insert_mode = sp->insmode;
- rl_editing_mode = sp->edmode;
- rl_executing_keyseq = sp->kseq;
- rl_key_sequence_length = sp->kseqlen;
- rl_instream = sp->inf;
- rl_outstream = sp->outf;
- rl_pending_input = sp->pendingin;
- rl_executing_macro = sp->macro;
-
- rl_catch_signals = sp->catchsigs;
- rl_catch_sigwinch = sp->catchsigwinch;
-
- rl_completion_entry_function = sp->entryfunc;
- rl_menu_completion_entry_function = sp->menuentryfunc;
- rl_ignore_some_completions_function = sp->ignorefunc;
- rl_attempted_completion_function = sp->attemptfunc;
- rl_completer_word_break_characters = sp->wordbreakchars;
-
- return (0);
-}
diff --git a/lib/readline/rlconf.h~ b/lib/readline/rlconf.h~
deleted file mode 100644
index 043bba6b..00000000
--- a/lib/readline/rlconf.h~
+++ /dev/null
@@ -1,81 +0,0 @@
-/* rlconf.h -- readline configuration definitions */
-
-/* Copyright (C) 1992-2012 Free Software Foundation, Inc.
-
- This file is part of the GNU Readline Library (Readline), a library
- for reading lines of text with interactive input and history editing.
-
- Readline is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Readline is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Readline. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#if !defined (_RLCONF_H_)
-#define _RLCONF_H_
-
-/* Define this if you want the vi-mode editing available. */
-#define VI_MODE
-
-/* Define this to get an indication of file type when listing completions. */
-#define VISIBLE_STATS
-
-/* Define this to get support for colors when listing completions and in
- other places. */
-#define COLOR_SUPPORT
-
-/* This definition is needed by readline.c, rltty.c, and signals.c. */
-/* If on, then readline handles signals in a way that doesn't suck. */
-#define HANDLE_SIGNALS
-
-/* Ugly but working hack for binding prefix meta. */
-#define PREFIX_META_HACK
-
-/* The next-to-last-ditch effort file name for a user-specific init file. */
-#define DEFAULT_INPUTRC "~/.inputrc"
-
-/* The ultimate last-ditch filenname for an init file -- system-wide. */
-#define SYS_INPUTRC "/etc/inputrc"
-
-/* If defined, expand tabs to spaces. */
-#define DISPLAY_TABS
-
-/* If defined, use the terminal escape sequence to move the cursor forward
- over a character when updating the line rather than rewriting it. */
-/* #define HACK_TERMCAP_MOTION */
-
-/* The string inserted by the `insert comment' command. */
-#define RL_COMMENT_BEGIN_DEFAULT "#"
-
-/* Define this if you want code that allows readline to be used in an
- X `callback' style. */
-#ifndef SHELL
-#define READLINE_CALLBACKS
-#endif
-
-/* Define this if you want the cursor to indicate insert or overwrite mode. */
-/* #define CURSOR_MODE */
-
-/* Define this if you want to enable code that talks to the Linux kernel
- tty auditing system. */
-#define ENABLE_TTY_AUDIT_SUPPORT
-
-/* Defaults for the various editing mode indicators, inserted at the beginning
- of the last (maybe only) line of the prompt if show-mode-in-prompt is on */
-#define RL_EMACS_MODESTR_DEFAULT "@"
-#define RL_EMACS_MODESTR_DEFLEN 1
-
-#define RL_VI_INS_MODESTR_DEFAULT "(ins)"
-#define RL_VI_INS_MODESTR_DEFLEN 5
-#define RL_VI_CMD_MODESTR_DEFAULT "(cmd)"
-#define RL_VI_CMD_MODESTR_DEFLEN 5
-
-#endif /* _RLCONF_H_ */
diff --git a/tests/misc/regress/log.orig b/tests/misc/regress/log.orig
deleted file mode 100644
index c1f1e199..00000000
--- a/tests/misc/regress/log.orig
+++ /dev/null
@@ -1,50 +0,0 @@
-:; ./shx
-
-sh:
-<&$fd ok
-nlbq Mon Aug 3 02:45:00 EDT 1992
-bang geoff
-quote 712824302
-setbq defmsgid=<1992Aug3.024502.6176@host>
-bgwait sleep done... wait 6187
-
-
-bash:
-<&$fd ok
-nlbq Mon Aug 3 02:45:09 EDT 1992
-bang geoff
-quote 712824311
-setbq defmsgid=<1992Aug3.024512.6212@host>
-bgwait sleep done... wait 6223
-
-
-ash:
-<&$fd shx1: 4: Syntax error: Bad fd number
-nlbq Mon Aug 3 02:45:19 EDT 1992
-bang geoff
-quote getdate: `"now"' not a valid date
-
-setbq defmsgid=<1992Aug3.` echo 024521
-bgwait sleep done... wait 6241
-
-
-ksh:
-<&$fd ok
-nlbq ./shx: 6248 Memory fault - core dumped
-bang geoff
-quote getdate: `"now"' not a valid date
-
-setbq defmsgid=<1992Aug3.024530.6257@host>
-bgwait no such job: 6265
-wait 6265
-sleep done...
-
-zsh:
-<&$fd ok
-nlbq Mon Aug 3 02:45:36 EDT 1992
-bang shx3: event not found: /s/ [4]
-quote 712824337
-setbq defmsgid=<..6290@host>
-bgwait shx7: unmatched " [9]
-sleep done...
-:;
diff --git a/tests/misc/regress/shx.orig b/tests/misc/regress/shx.orig
deleted file mode 100644
index 4b3bf2b8..00000000
--- a/tests/misc/regress/shx.orig
+++ /dev/null
@@ -1,10 +0,0 @@
-#! /bin/sh
-for cmd in sh bash ash ksh zsh
-do
- echo
- echo $cmd:
- for demo in shx?
- do
- $cmd $demo
- done
-done