]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20061214 snapshot
authorChet Ramey <chet.ramey@case.edu>
Wed, 7 Dec 2011 14:01:35 +0000 (09:01 -0500)
committerChet Ramey <chet.ramey@case.edu>
Wed, 7 Dec 2011 14:01:35 +0000 (09:01 -0500)
109 files changed:
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
builtins/bind.def
builtins/bind.def~
builtins/break.def
builtins/break.def~ [new file with mode: 0644]
builtins/common.c
builtins/common.c~ [new file with mode: 0644]
builtins/complete.def
builtins/complete.def~ [new file with mode: 0644]
builtins/declare.def
builtins/declare.def~
builtins/enable.def
builtins/enable.def~
builtins/evalfile.c
builtins/evalfile.c~ [new file with mode: 0644]
builtins/exit.def
builtins/exit.def~ [new file with mode: 0644]
builtins/fc.def
builtins/fc.def~
builtins/fg_bg.def
builtins/fg_bg.def~ [new file with mode: 0644]
builtins/hash.def
builtins/hash.def~
builtins/history.def
builtins/history.def~
builtins/jobs.def
builtins/jobs.def~ [new file with mode: 0644]
builtins/read.def
builtins/read.def~ [new file with mode: 0644]
builtins/set.def
builtins/set.def~
builtins/setattr.def
builtins/setattr.def~ [new file with mode: 0644]
builtins/shopt.def
builtins/shopt.def~ [new file with mode: 0644]
builtins/trap.def
builtins/trap.def~ [new file with mode: 0644]
builtins/type.def
builtins/type.def~ [new file with mode: 0644]
builtins/ulimit.def
builtins/ulimit.def~
builtins/wait.def
builtins/wait.def~ [new file with mode: 0644]
doc/FAQ
doc/bash.0
doc/bash.1
doc/bash.1~
doc/bash.html
doc/bash.ps
doc/bashref.aux
doc/bashref.cp
doc/bashref.cps
doc/bashref.dvi
doc/bashref.html
doc/bashref.info
doc/bashref.log
doc/bashref.ps
doc/bashref.texi
doc/bashref.texi~
doc/bashref.toc
doc/builtins.0
doc/builtins.ps
doc/faq.headers.mail
doc/faq.headers.news
doc/faq.headers.news2
doc/faq.mail
doc/faq.news
doc/faq.news2
doc/faq.version
doc/rbash.ps
error.c
error.c~ [new file with mode: 0644]
execute_cmd.c
execute_cmd.c~ [new file with mode: 0644]
expr.c
expr.c~ [new file with mode: 0644]
jobs.c
jobs.c~
lib/readline/bind.c
lib/readline/callback.c
lib/readline/complete.c
lib/readline/display.c
lib/readline/doc/hsuser.texi
lib/readline/doc/hsuser.texi~ [new file with mode: 0644]
lib/readline/doc/rluser.texi
lib/readline/doc/rluser.texi~ [new file with mode: 0644]
lib/readline/rlprivate.h
lib/readline/rltty.c
lib/readline/util.c
lib/sh/tmpfile.c
mksyntax.c.gettext [new file with mode: 0644]
mksyntax.c~ [new file with mode: 0644]
nojobs.c
nojobs.c~
patchlevel.h
patchlevel.h~ [new file with mode: 0644]
shell.c
shell.c~
siglist.c
siglist.c~ [new file with mode: 0644]
subst.c
subst.c~
tests/RUN-ONE-TEST
tests/errors.right
tests/history.right
tests/shopt.right
version.c
version.c~ [new file with mode: 0644]

index 6382012e96a8332156fef321a0477869ec00e602..f337054e3ffb9e3d66548b12b3031bdc811a2b66 100644 (file)
@@ -14010,3 +14010,41 @@ lib/sh/snprintf.c
        - make sure number() sets the FL_UNSIGNED flag for %x and %X, so
          fmtulong treats them as unsigned numbers.  Fixes bug reported by
          James Botte <James.M.Botte@lowes.com>
+
+                                  12/13
+                                  -----
+lib/readline/util.c
+       - new function, _rl_ttymsg, for internal warning messages -- does
+         redisplay after printing message
+       - new function, _rl_errmsg, for internal warning/error messages --
+         does not do redisplay after printing message
+
+lib/readline/rlprivate.h
+       - new extern declaration for _rl_ttymsg, _rl_errmsg
+
+lib/readline/{bind,callback,complete,display,rltty}.c
+       - use _rl_ttymsg/_rl_errmsg instead of direct writes to stderr
+
+lib/sh/tmpfile.c
+       - in get_tmpdir(), make sure that $TMPDIR names a writable directory;
+         otherwise skip it.  This catches names longer than PATH_MAX, but in
+         case it doesn't test that the length does not exceed PATH_MAX.  Fixes
+         heap overrun bug reported by Eric Blake <ebb9@byu.net>
+
+                                  12/16
+                                  -----
+builtin/{set,declare,shopt,trap,wait,bind,complete,enable,fc,history,read,setattr}.def
+doc/{bash.1,bashref.texi}
+       - improvements and clarifications to the help text associated with
+         several builtins, in some cases bringing them into line with the
+         man page text.  From Benno Schulenberg <bensberg@justemail.net>
+
+doc/{bash.1,bashref.texi}
+       - add `E' and `T' to the synopsis of the set builtin.
+         From Benno Schulenberg <bensberg@justemail.net>
+
+builtins/{break,exit,fg_bg,hash,jobs,type,ulimit}.def
+builtins/{common,evalfile}.c
+{error,expr,jobs,mksyntax,nojobs,shell,subst,version,siglist}.c
+       - add gettextizing marks to untranslated strings
+         From Benno Schulenberg <bensberg@justemail.net>
index 6ec5722ba8241a2add2868a6de9c37cfc7021c01..8c3b8c01cbb8fa5bc49572f2db062f08df4e59dd 100644 (file)
@@ -13774,7 +13774,7 @@ shell.c
          <mike.stroyan@hp.com>
 
 doc/bashref.texi
-       - fix typos and misspellings sent in by Brian Gough
+       - fixes for typos and misspellings sent in by Brian Gough
 
                                   10/24
                                   -----
@@ -13829,7 +13829,7 @@ execute_cmd.c
                                   11/7
                                   ----
 lib/tilde/tilde.c
-lib/readline/{util,undo,callback,input,isearch,kill
+lib/readline/{util,undo,callback,input,isearch,kill}.c
        - make sure that memory allocated with xmalloc is freed with xfree
 
                                   11/9
@@ -14008,4 +14008,43 @@ builtins/evalfile.c
                                   ----
 lib/sh/snprintf.c
        - make sure number() sets the FL_UNSIGNED flag for %x and %X, so
-         fmtulong treats them as unsigned numbers
+         fmtulong treats them as unsigned numbers.  Fixes bug reported by
+         James Botte <James.M.Botte@lowes.com>
+
+                                  12/13
+                                  -----
+lib/readline/util.c
+       - new function, _rl_ttymsg, for internal warning messages -- does
+         redisplay after printing message
+       - new function, _rl_errmsg, for internal warning/error messages --
+         does not do redisplay after printing message
+
+lib/readline/rlprivate.h
+       - new extern declaration for _rl_ttymsg, _rl_errmsg
+
+lib/readline/{bind,callback,complete,display,rltty}.c
+       - use _rl_ttymsg/_rl_errmsg instead of direct writes to stderr
+
+lib/sh/tmpfile.c
+       - in get_tmpdir(), make sure that $TMPDIR names a writable directory;
+         otherwise skip it.  This catches names longer than PATH_MAX, but in
+         case it doesn't test that the length does not exceed PATH_MAX.  Fixes
+         heap overrun bug reported by Eric Blake <ebb9@byu.net>
+
+                                  12/16
+                                  -----
+builtin/{set,declare,shopt,trap,wait,bind,complete,enable,fc,history,read,setattr}.def
+doc/{bash.1,bashref.texi}
+       - improvements and clarifications to the help text associated with
+         several builtins, in some cases bringing them into line with the
+         man page text.  From Benno Schulenberg <bensberg@justemail.net>
+
+doc/{bash.1,bashref.texi}
+       - add `E' and `T' to the synopsis of the set builtin.
+         From Benno Schulenberg <bensberg@justemail.net>
+
+builtins/{break,exit,fg_bg,hash,jobs,type,ulimit}.def
+builtins/{common,evalfile}.c
+{error,expr,jobs,mksyntax,nojobs,shell,subst,version}.c
+       - add gettextizing marks to untranslated strings
+         From Benno Schulenberg <bensberg@justemail.net>
index 2a0bac3a7d0e4cf624a02043c5c7fc97af733e64..ce246dde56fb3df75a5a0a4a7a530c65a021b024 100644 (file)
@@ -29,7 +29,7 @@ $FUNCTION bind_builtin
 $SHORT_DOC bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]
 Bind a key sequence to a Readline function or a macro, or set
 a Readline variable.  The non-option argument syntax is equivalent
-to that found in ~/.inputrc, but must be passed as a single argument:
+to that found in ~/.inputrc, but must be passed as a single argument:  e.g.,
 bind '"\C-x\C-r": re-read-init-file'.
 bind accepts the following options:
   -m  keymap         Use KEYMAP as the keymap for the duration of this
@@ -40,18 +40,18 @@ bind accepts the following options:
   -P                 List function names and bindings.
   -p                 List functions and bindings in a form that can be
                      reused as input.
-  -r  keyseq         Remove the binding for KEYSEQ.
-  -x  keyseq:shell-command     Cause SHELL-COMMAND to be executed when
-                               KEYSEQ is entered.
-  -f  filename       Read key bindings from FILENAME.
-  -q  function-name  Query about which keys invoke the named function.
-  -u  function-name  Unbind all keys which are bound to the named function.
-  -V                 List variable names and values
-  -v                 List variable names and values in a form that can
-                     be reused as input.
   -S                 List key sequences that invoke macros and their values
   -s                 List key sequences that invoke macros and their values
                      in a form that can be reused as input.
+  -V                 List variable names and values
+  -v                 List variable names and values in a form that can
+                     be reused as input.
+  -q  function-name  Query about which keys invoke the named function.
+  -u  function-name  Unbind all keys which are bound to the named function.
+  -r  keyseq         Remove the binding for KEYSEQ.
+  -f  filename       Read key bindings from FILENAME.
+  -x  keyseq:shell-command     Cause SHELL-COMMAND to be executed when
+                               KEYSEQ is entered.
 $END
 
 #if defined (READLINE)
index f4caa4dfee304528821ac265f29256cc34288a6e..c66ef47d0ab6d2d7ceb4a53539f649a3b03e449a 100644 (file)
@@ -1,7 +1,7 @@
 This file is bind.def, from which is created bind.c.
 It implements the builtin "bind" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -40,18 +40,18 @@ bind accepts the following options:
   -P                 List function names and bindings.
   -p                 List functions and bindings in a form that can be
                      reused as input.
-  -r  keyseq         Remove the binding for KEYSEQ.
-  -x  keyseq:shell-command     Cause SHELL-COMMAND to be executed when
-                               KEYSEQ is entered.
-  -f  filename       Read key bindings from FILENAME.
-  -q  function-name  Query about which keys invoke the named function.
-  -u  function-name  Unbind all keys which are bound to the named function.
-  -V                 List variable names and values
-  -v                 List variable names and values in a form that can
-                     be reused as input.
   -S                 List key sequences that invoke macros and their values
   -s                 List key sequences that invoke macros and their values
                      in a form that can be reused as input.
+  -V                 List variable names and values
+  -v                 List variable names and values in a form that can
+                     be reused as input.
+  -q  function-name  Query about which keys invoke the named function.
+  -u  function-name  Unbind all keys which are bound to the named function.
+  -r  keyseq         Remove the binding for KEYSEQ.
+  -f  filename       Read key bindings from FILENAME.
+  -x  keyseq:shell-command     Cause SHELL-COMMAND to be executed when
+                               KEYSEQ is entered.
 $END
 
 #if defined (READLINE)
index e61d5027ec71f38f457b07816003c7b4e04f9556..7d7ebe95b1e1522e05907822fad5b1f58e3d552e 100644 (file)
@@ -1,7 +1,7 @@
 This file is break.def, from which is created break.c.
 It implements the builtins "break" and "continue" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -70,7 +70,7 @@ break_builtin (list)
 
   if (newbreak <= 0)
     {
-      sh_erange (list->word->word, "loop count");
+      sh_erange (list->word->word, _("loop count"));
       breaking = loop_level;
       return (EXECUTION_FAILURE);
     }
@@ -105,7 +105,7 @@ continue_builtin (list)
 
   if (newcont <= 0)
     {
-      sh_erange (list->word->word, "loop count");
+      sh_erange (list->word->word, _("loop count"));
       breaking = loop_level;
       return (EXECUTION_FAILURE);
     }
diff --git a/builtins/break.def~ b/builtins/break.def~
new file mode 100644 (file)
index 0000000..7d7ebe9
--- /dev/null
@@ -0,0 +1,132 @@
+This file is break.def, from which is created break.c.
+It implements the builtins "break" and "continue" in Bash.
+
+Copyright (C) 1987-2006 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES break.c
+
+$BUILTIN break
+$FUNCTION break_builtin
+$SHORT_DOC break [n]
+Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,
+break N levels.
+$END
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+
+extern char *this_command_name;
+extern int posixly_correct;
+
+static int check_loop_level __P((void));
+
+/* The depth of while's and until's. */
+int loop_level = 0;
+
+/* Non-zero when a "break" instruction is encountered. */
+int breaking = 0;
+
+/* Non-zero when we have encountered a continue instruction. */
+int continuing = 0;
+
+/* Set up to break x levels, where x defaults to 1, but can be specified
+   as the first argument. */
+int
+break_builtin (list)
+     WORD_LIST *list;
+{
+  intmax_t newbreak;
+
+  if (check_loop_level () == 0)
+    return (EXECUTION_SUCCESS);
+
+  newbreak = get_numeric_arg (list, 1);
+
+  if (newbreak <= 0)
+    {
+      sh_erange (list->word->word, _("loop count"));
+      breaking = loop_level;
+      return (EXECUTION_FAILURE);
+    }
+
+  if (newbreak > loop_level)
+    newbreak = loop_level;
+
+  breaking = newbreak;
+
+  return (EXECUTION_SUCCESS);
+}
+
+$BUILTIN continue
+$FUNCTION continue_builtin
+$SHORT_DOC continue [n]
+Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.
+If N is specified, resume at the N-th enclosing loop.
+$END
+
+/* Set up to continue x levels, where x defaults to 1, but can be specified
+   as the first argument. */
+int
+continue_builtin (list)
+     WORD_LIST *list;
+{
+  intmax_t newcont;
+
+  if (check_loop_level () == 0)
+    return (EXECUTION_SUCCESS);
+
+  newcont = get_numeric_arg (list, 1);
+
+  if (newcont <= 0)
+    {
+      sh_erange (list->word->word, _("loop count"));
+      breaking = loop_level;
+      return (EXECUTION_FAILURE);
+    }
+
+  if (newcont > loop_level)
+    newcont = loop_level;
+
+  continuing = newcont;
+
+  return (EXECUTION_SUCCESS);
+}
+
+/* Return non-zero if a break or continue command would be okay.
+   Print an error message if break or continue is meaningless here. */
+static int
+check_loop_level ()
+{
+#if defined (BREAK_COMPLAINS)
+  if (loop_level == 0 && posixly_correct == 0)
+    builtin_error (_("only meaningful in a `for', `while', or `until' loop"));
+#endif /* BREAK_COMPLAINS */
+
+  return (loop_level);
+}
index 7b9613e1fae749943ef1b733ffc584d508e270b1..7b29b326c1cfcf52cea5ca9cc463106df153ae17 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -100,7 +100,7 @@ builtin_error (format, va_alist)
   fprintf (stderr, "%s: ", name);
 
   if (interactive_shell == 0)
-    fprintf (stderr, "line %d: ", executing_line_number ());
+    fprintf (stderr, _("line %d: "), executing_line_number ());
 
   if (this_command_name && *this_command_name)
     fprintf (stderr, "%s: ", this_command_name);
@@ -117,7 +117,7 @@ void
 builtin_usage ()
 {
   if (this_command_name && *this_command_name)
-    fprintf (stderr, "%s: usage: ", this_command_name);
+    fprintf (stderr, _("%s: usage: "), this_command_name);
   fprintf (stderr, "%s\n", current_builtin->short_doc);
   fflush (stderr);
 }
diff --git a/builtins/common.c~ b/builtins/common.c~
new file mode 100644 (file)
index 0000000..e19ccb2
--- /dev/null
@@ -0,0 +1,808 @@
+/* Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <chartypes.h>
+#include "../bashtypes.h"
+#include "posixstat.h"
+#include <signal.h>
+
+#include <errno.h>
+
+#if defined (PREFER_STDARG)
+#  include <stdarg.h>
+#else
+#  include <varargs.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "maxpath.h"
+#include "../flags.h"
+#include "../jobs.h"
+#include "../builtins.h"
+#include "../input.h"
+#include "../execute_cmd.h"
+#include "../trap.h"
+#include "bashgetopt.h"
+#include "common.h"
+#include "builtext.h"
+#include <tilde/tilde.h>
+
+#if defined (HISTORY)
+#  include "../bashhist.h"
+#endif
+
+#if !defined (errno)
+extern int errno;   
+#endif /* !errno */
+
+extern int indirection_level, subshell_environment;
+extern int line_number;
+extern int last_command_exit_value;
+extern int running_trap;
+extern int posixly_correct;
+extern char *this_command_name, *shell_name;
+extern char *bash_getcwd_errstr;
+
+/* Used by some builtins and the mainline code. */
+sh_builtin_func_t *last_shell_builtin = (sh_builtin_func_t *)NULL;
+sh_builtin_func_t *this_shell_builtin = (sh_builtin_func_t *)NULL;
+
+/* **************************************************************** */
+/*                                                                 */
+/*          Error reporting, usage, and option processing          */
+/*                                                                 */
+/* **************************************************************** */
+
+/* This is a lot like report_error (), but it is for shell builtins
+   instead of shell control structures, and it won't ever exit the
+   shell. */
+void
+#if defined (PREFER_STDARG)
+builtin_error (const char *format, ...)
+#else
+builtin_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  char *name;
+
+  name = get_name_for_error ();
+  fprintf (stderr, "%s: ", name);
+
+  if (interactive_shell == 0)
+    fprintf (stderr, _("line %d: "), executing_line_number ());
+
+  if (this_command_name && *this_command_name)
+    fprintf (stderr, "%s: ", this_command_name);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  va_end (args);
+  fprintf (stderr, "\n");
+}
+
+/* Print a usage summary for the currently-executing builtin command. */
+void
+builtin_usage ()
+{
+  if (this_command_name && *this_command_name)
+    fprintf (stderr, _("%s: usage: "), this_command_name);
+  fprintf (stderr, "%s\n", current_builtin->short_doc);
+  fflush (stderr);
+}
+
+/* Return if LIST is NULL else barf and jump to top_level.  Used by some
+   builtins that do not accept arguments. */
+void
+no_args (list)
+     WORD_LIST *list;
+{
+  if (list)
+    {
+      builtin_error (_("too many arguments"));
+      jump_to_top_level (DISCARD);
+    }
+}
+
+/* Check that no options were given to the currently-executing builtin,
+   and return 0 if there were options. */
+int
+no_options (list)
+     WORD_LIST *list;
+{
+  reset_internal_getopt ();
+  if (internal_getopt (list, "") != -1)
+    {
+      builtin_usage ();
+      return (1);
+    }
+  return (0);
+}
+
+void
+sh_needarg (s)
+     char *s;
+{
+  builtin_error (_("%s: option requires an argument"), s);
+}
+
+void
+sh_neednumarg (s)
+     char *s;
+{
+  builtin_error (_("%s: numeric argument required"), s);
+}
+
+void
+sh_notfound (s)
+     char *s;
+{
+  builtin_error (_("%s: not found"), s);
+}
+
+/* Function called when one of the builtin commands detects an invalid
+   option. */
+void
+sh_invalidopt (s)
+     char *s;
+{
+  builtin_error (_("%s: invalid option"), s);
+}
+
+void
+sh_invalidoptname (s)
+     char *s;
+{
+  builtin_error (_("%s: invalid option name"), s);
+}
+
+void
+sh_invalidid (s)
+     char *s;
+{
+  builtin_error (_("`%s': not a valid identifier"), s);
+}
+
+void
+sh_invalidnum (s)
+     char *s;
+{
+  builtin_error (_("%s: invalid number"), s);
+}
+
+void
+sh_invalidsig (s)
+     char *s;
+{
+  builtin_error (_("%s: invalid signal specification"), s);
+}
+
+void
+sh_badpid (s)
+     char *s;
+{
+  builtin_error (_("`%s': not a pid or valid job spec"), s);
+}
+
+void
+sh_readonly (s)
+     const char *s;
+{
+  builtin_error (_("%s: readonly variable"), s);
+}
+
+void
+sh_erange (s, desc)
+     char *s, *desc;
+{
+  if (s)
+    builtin_error (_("%s: %s out of range"), s, desc ? desc : _("argument"));
+  else
+    builtin_error (_("%s out of range"), desc ? desc : _("argument"));
+}
+
+#if defined (JOB_CONTROL)
+void
+sh_badjob (s)
+     char *s;
+{
+  builtin_error (_("%s: no such job"), s);
+}
+
+void
+sh_nojobs (s)
+     char *s;
+{
+  if (s)
+    builtin_error (_("%s: no job control"), s);
+  else
+    builtin_error (_("no job control"));
+}
+#endif
+
+#if defined (RESTRICTED_SHELL)
+void
+sh_restricted (s)
+     char *s;
+{
+  if (s)
+    builtin_error (_("%s: restricted"), s);
+  else
+    builtin_error (_("restricted"));
+}
+#endif
+
+void
+sh_notbuiltin (s)
+     char *s;
+{
+  builtin_error (_("%s: not a shell builtin"), s);
+}
+
+void
+sh_wrerror ()
+{
+  builtin_error (_("write error: %s"), strerror (errno));
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*          Shell positional parameter manipulation                */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Convert a WORD_LIST into a C-style argv.  Return the number of elements
+   in the list in *IP, if IP is non-null.  A convenience function for
+   loadable builtins; also used by `test'. */
+char **
+make_builtin_argv (list, ip)
+     WORD_LIST *list;
+     int *ip;
+{
+  char **argv;
+
+  argv = strvec_from_word_list (list, 0, 1, ip);
+  argv[0] = this_command_name;
+  return argv;
+}
+
+/* Remember LIST in $0 ... $9, and REST_OF_ARGS.  If DESTRUCTIVE is
+   non-zero, then discard whatever the existing arguments are, else
+   only discard the ones that are to be replaced. */
+void
+remember_args (list, destructive)
+     WORD_LIST *list;
+     int destructive;
+{
+  register int i;
+
+  for (i = 1; i < 10; i++)
+    {
+      if ((destructive || list) && dollar_vars[i])
+       {
+         free (dollar_vars[i]);
+         dollar_vars[i] = (char *)NULL;
+       }
+
+      if (list)
+       {
+         dollar_vars[i] = savestring (list->word->word);
+         list = list->next;
+       }
+    }
+
+  /* If arguments remain, assign them to REST_OF_ARGS.
+     Note that copy_word_list (NULL) returns NULL, and
+     that dispose_words (NULL) does nothing. */
+  if (destructive || list)
+    {
+      dispose_words (rest_of_args);
+      rest_of_args = copy_word_list (list);
+    }
+
+  if (destructive)
+    set_dollar_vars_changed ();
+}
+
+static int changed_dollar_vars;
+
+/* Have the dollar variables been reset to new values since we last
+   checked? */
+int
+dollar_vars_changed ()
+{
+  return (changed_dollar_vars);
+}
+
+void
+set_dollar_vars_unchanged ()
+{
+  changed_dollar_vars = 0;
+}
+
+void
+set_dollar_vars_changed ()
+{
+  if (variable_context)
+    changed_dollar_vars |= ARGS_FUNC;
+  else if (this_shell_builtin == set_builtin)
+    changed_dollar_vars |= ARGS_SETBLTIN;
+  else
+    changed_dollar_vars |= ARGS_INVOC;
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*             Validating numeric input and arguments              */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Read a numeric arg for this_command_name, the name of the shell builtin
+   that wants it.  LIST is the word list that the arg is to come from.
+   Accept only the numeric argument; report an error if other arguments
+   follow.  If FATAL is true, call throw_to_top_level, which exits the
+   shell; if not, call jump_to_top_level (DISCARD), which aborts the
+   current command. */
+intmax_t
+get_numeric_arg (list, fatal)
+     WORD_LIST *list;
+     int fatal;
+{
+  intmax_t count = 1;
+
+  if (list && list->word && ISOPTION (list->word->word, '-'))
+    list = list->next;
+
+  if (list)
+    {
+      register char *arg;
+
+      arg = list->word->word;
+      if (arg == 0 || (legal_number (arg, &count) == 0))
+       {
+         sh_neednumarg (list->word->word);
+         if (fatal)
+           throw_to_top_level ();
+         else
+           jump_to_top_level (DISCARD);
+       }
+      no_args (list->next);
+    }
+
+  return (count);
+}
+
+/* Get an eight-bit status value from LIST */
+int
+get_exitstat (list)
+     WORD_LIST *list;
+{
+  int status;
+  intmax_t sval;
+  char *arg;
+
+  if (list && list->word && ISOPTION (list->word->word, '-'))
+    list = list->next;
+
+  if (list == 0)
+    return (last_command_exit_value);      
+
+  arg = list->word->word;
+  if (arg == 0 || legal_number (arg, &sval) == 0)
+    {
+      sh_neednumarg (list->word->word ? list->word->word : "`'");
+      return 255;
+    }
+  no_args (list->next);
+
+  status = sval & 255;
+  return status;
+}
+
+/* Return the octal number parsed from STRING, or -1 to indicate
+   that the string contained a bad number. */
+int
+read_octal (string)
+     char *string;
+{
+  int result, digits;
+
+  result = digits = 0;
+  while (*string && ISOCTAL (*string))
+    {
+      digits++;
+      result = (result * 8) + (*string++ - '0');
+      if (result > 0777)
+       return -1;
+    }
+
+  if (digits == 0 || *string)
+    result = -1;
+
+  return (result);
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*          Manipulating the current working directory             */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Return a consed string which is the current working directory.
+   FOR_WHOM is the name of the caller for error printing.  */
+char *the_current_working_directory = (char *)NULL;
+
+char *
+get_working_directory (for_whom)
+     char *for_whom;
+{
+  if (no_symbolic_links)
+    {
+      FREE (the_current_working_directory);
+      the_current_working_directory = (char *)NULL;
+    }
+
+  if (the_current_working_directory == 0)
+    {
+      the_current_working_directory = getcwd (0, 0);
+      if (the_current_working_directory == 0)
+       {
+         fprintf (stderr, _("%s: error retrieving current directory: %s: %s\n"),
+                  (for_whom && *for_whom) ? for_whom : get_name_for_error (),
+                  _(bash_getcwd_errstr), strerror (errno));
+         return (char *)NULL;
+       }
+    }
+
+  return (savestring (the_current_working_directory));
+}
+
+/* Make NAME our internal idea of the current working directory. */
+void
+set_working_directory (name)
+     char *name;
+{
+  FREE (the_current_working_directory);
+  the_current_working_directory = savestring (name);
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*             Job control support functions                       */
+/*                                                                 */
+/* **************************************************************** */
+
+#if defined (JOB_CONTROL)
+int
+get_job_by_name (name, flags)
+     const char *name;
+     int flags;
+{
+  register int i, wl, cl, match, job;
+  register PROCESS *p;
+  register JOB *j;
+
+  job = NO_JOB;
+  wl = strlen (name);
+  for (i = js.j_jobslots - 1; i >= 0; i--)
+    {
+      j = get_job_by_jid (i);
+      if (j == 0 || ((flags & JM_STOPPED) && J_JOBSTATE(j) != JSTOPPED))
+        continue;
+
+      p = j->pipe;
+      do
+        {
+         if (flags & JM_EXACT)
+           {
+             cl = strlen (p->command);
+             match = STREQN (p->command, name, cl);
+           }
+         else if (flags & JM_SUBSTRING)
+           match = strindex (p->command, name) != (char *)0;
+         else
+           match = STREQN (p->command, name, wl);
+
+         if (match == 0)
+           {
+             p = p->next;
+             continue;
+           }
+         else if (flags & JM_FIRSTMATCH)
+           return i;           /* return first match */
+         else if (job != NO_JOB)
+           {
+             if (this_shell_builtin)
+               builtin_error (_("%s: ambiguous job spec"), name);
+             else
+               report_error (_("%s: ambiguous job spec"), name);
+             return (DUP_JOB);
+           }
+         else
+           job = i;
+        }
+      while (p != j->pipe);
+    }
+
+  return (job);
+}
+
+/* Return the job spec found in LIST. */
+int
+get_job_spec (list)
+     WORD_LIST *list;
+{
+  register char *word;
+  int job, jflags;
+
+  if (list == 0)
+    return (js.j_current);
+
+  word = list->word->word;
+
+  if (*word == '\0')
+    return (NO_JOB);
+
+  if (*word == '%')
+    word++;
+
+  if (DIGIT (*word) && all_digits (word))
+    {
+      job = atoi (word);
+      return (job > js.j_jobslots ? NO_JOB : job - 1);
+    }
+
+  jflags = 0;
+  switch (*word)
+    {
+    case 0:
+    case '%':
+    case '+':
+      return (js.j_current);
+
+    case '-':
+      return (js.j_previous);
+
+    case '?':                  /* Substring search requested. */
+      jflags |= JM_SUBSTRING;
+      word++;
+      /* FALLTHROUGH */
+
+    default:
+      return get_job_by_name (word, jflags);
+    }
+}
+#endif /* JOB_CONTROL */
+
+/*
+ * NOTE:  `kill' calls this function with forcecols == 0
+ */
+int
+display_signal_list (list, forcecols)
+     WORD_LIST *list;
+     int forcecols;
+{
+  register int i, column;
+  char *name;
+  int result, signum, dflags;
+  intmax_t lsignum;
+
+  result = EXECUTION_SUCCESS;
+  if (!list)
+    {
+      for (i = 1, column = 0; i < NSIG; i++)
+       {
+         name = signal_name (i);
+         if (STREQN (name, "SIGJUNK", 7) || STREQN (name, "Unknown", 7))
+           continue;
+
+         if (posixly_correct && !forcecols)
+           {
+             /* This is for the kill builtin.  POSIX.2 says the signal names
+                are displayed without the `SIG' prefix. */
+             if (STREQN (name, "SIG", 3))
+               name += 3;
+             printf ("%s%s", name, (i == NSIG - 1) ? "" : " ");
+           }
+         else
+           {
+             printf ("%2d) %s", i, name);
+
+             if (++column < 4)
+               printf ("\t");
+             else
+               {
+                 printf ("\n");
+                 column = 0;
+               }
+           }
+       }
+
+      if ((posixly_correct && !forcecols) || column != 0)
+       printf ("\n");
+      return result;
+    }
+
+  /* List individual signal names or numbers. */
+  while (list)
+    {
+      if (legal_number (list->word->word, &lsignum))
+       {
+         /* This is specified by Posix.2 so that exit statuses can be
+            mapped into signal numbers. */
+         if (lsignum > 128)
+           lsignum -= 128;
+         if (lsignum < 0 || lsignum >= NSIG)
+           {
+             sh_invalidsig (list->word->word);
+             result = EXECUTION_FAILURE;
+             list = list->next;
+             continue;
+           }
+
+         signum = lsignum;
+         name = signal_name (signum);
+         if (STREQN (name, "SIGJUNK", 7) || STREQN (name, "Unknown", 7))
+           {
+             list = list->next;
+             continue;
+           }
+#if defined (JOB_CONTROL)
+         /* POSIX.2 says that `kill -l signum' prints the signal name without
+            the `SIG' prefix. */
+         printf ("%s\n", (this_shell_builtin == kill_builtin) ? name + 3 : name);
+#else
+         printf ("%s\n", name);
+#endif
+       }
+      else
+       {
+         dflags = DSIG_NOCASE;
+         if (posixly_correct == 0 || this_shell_builtin != kill_builtin)
+           dflags |= DSIG_SIGPREFIX;
+         signum = decode_signal (list->word->word, dflags);
+         if (signum == NO_SIG)
+           {
+             sh_invalidsig (list->word->word);
+             result = EXECUTION_FAILURE;
+             list = list->next;
+             continue;
+           }
+         printf ("%d\n", signum);
+       }
+      list = list->next;
+    }
+  return (result);
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*         Finding builtin commands and their functions            */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Perform a binary search and return the address of the builtin function
+   whose name is NAME.  If the function couldn't be found, or the builtin
+   is disabled or has no function associated with it, return NULL.
+   Return the address of the builtin.
+   DISABLED_OKAY means find it even if the builtin is disabled. */
+struct builtin *
+builtin_address_internal (name, disabled_okay)
+     char *name;
+     int disabled_okay;
+{
+  int hi, lo, mid, j;
+
+  hi = num_shell_builtins - 1;
+  lo = 0;
+
+  while (lo <= hi)
+    {
+      mid = (lo + hi) / 2;
+
+      j = shell_builtins[mid].name[0] - name[0];
+
+      if (j == 0)
+       j = strcmp (shell_builtins[mid].name, name);
+
+      if (j == 0)
+       {
+         /* It must have a function pointer.  It must be enabled, or we
+            must have explicitly allowed disabled functions to be found,
+            and it must not have been deleted. */
+         if (shell_builtins[mid].function &&
+             ((shell_builtins[mid].flags & BUILTIN_DELETED) == 0) &&
+             ((shell_builtins[mid].flags & BUILTIN_ENABLED) || disabled_okay))
+           return (&shell_builtins[mid]);
+         else
+           return ((struct builtin *)NULL);
+       }
+      if (j > 0)
+       hi = mid - 1;
+      else
+       lo = mid + 1;
+    }
+  return ((struct builtin *)NULL);
+}
+
+/* Return the pointer to the function implementing builtin command NAME. */
+sh_builtin_func_t *
+find_shell_builtin (name)
+     char *name;
+{
+  current_builtin = builtin_address_internal (name, 0);
+  return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL);
+}
+
+/* Return the address of builtin with NAME, whether it is enabled or not. */
+sh_builtin_func_t *
+builtin_address (name)
+     char *name;
+{
+  current_builtin = builtin_address_internal (name, 1);
+  return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL);
+}
+
+/* Return the function implementing the builtin NAME, but only if it is a
+   POSIX.2 special builtin. */
+sh_builtin_func_t *
+find_special_builtin (name)
+     char *name;
+{
+  current_builtin = builtin_address_internal (name, 0);
+  return ((current_builtin && (current_builtin->flags & SPECIAL_BUILTIN)) ?
+                       current_builtin->function :
+                       (sh_builtin_func_t *)NULL);
+}
+  
+static int
+shell_builtin_compare (sbp1, sbp2)
+     struct builtin *sbp1, *sbp2;
+{
+  int result;
+
+  if ((result = sbp1->name[0] - sbp2->name[0]) == 0)
+    result = strcmp (sbp1->name, sbp2->name);
+
+  return (result);
+}
+
+/* Sort the table of shell builtins so that the binary search will work
+   in find_shell_builtin. */
+void
+initialize_shell_builtins ()
+{
+  qsort (shell_builtins, num_shell_builtins, sizeof (struct builtin),
+    (QSFUNC *)shell_builtin_compare);
+}
index a859b88f0eb29e205059c078c4522d7d56da74b8..2aca007dc841180d9a78fff0f3fd12761b531d9b 100644 (file)
@@ -1,7 +1,7 @@
 This file is complete.def, from which is created complete.c.
 It implements the builtins "complete" and "compgen" in Bash.
 
-Copyright (C) 1999-2003 Free Software Foundation, Inc.
+Copyright (C) 1999-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,12 +24,14 @@ $PRODUCES complete.c
 $BUILTIN complete
 $DEPENDS_ON PROGRAMMABLE_COMPLETION
 $FUNCTION complete_builtin
-$SHORT_DOC complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
+$SHORT_DOC complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
 For each NAME, specify how arguments are to be completed.
 If the -p 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 -r option removes a completion specification for
 each NAME, or, if no NAMEs are supplied, all completion specifications.
+When completion is attempted, the actions are applied in the order the
+uppercase-letter options are listed above.
 $END
 
 #include <config.h>
@@ -531,7 +533,7 @@ print_cmd_completions (list)
 $BUILTIN compgen
 $DEPENDS_ON PROGRAMMABLE_COMPLETION
 $FUNCTION compgen_builtin
-$SHORT_DOC compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [word]
+$SHORT_DOC compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
 Display the possible completions depending on the options.  Intended
 to be used from within a shell function generating possible completions.
 If the optional WORD argument is supplied, matches against WORD are
diff --git a/builtins/complete.def~ b/builtins/complete.def~
new file mode 100644 (file)
index 0000000..66c27d2
--- /dev/null
@@ -0,0 +1,624 @@
+This file is complete.def, from which is created complete.c.
+It implements the builtins "complete" and "compgen" in Bash.
+
+Copyright (C) 1999-2006 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES complete.c
+
+$BUILTIN complete
+$DEPENDS_ON PROGRAMMABLE_COMPLETION
+$FUNCTION complete_builtin
+$SHORT_DOC complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
+For each NAME, specify how arguments are to be completed.
+If the -p 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 -r option removes a completion specification for
+each NAME, or, if no NAMEs are supplied, all completion specifications.
+When completion is attempted, the actions are applied in the order the
+uppercase-letter options are listed above.
+$END
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "../bashtypes.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../builtins.h"
+#include "../pcomplete.h"
+#include "../bashline.h"
+
+#include "common.h"
+#include "bashgetopt.h"
+
+#include <readline/readline.h>
+
+#define STRDUP(x)       ((x) ? savestring (x) : (char *)NULL)
+
+static int find_compact __P((char *));
+static int find_compopt __P((char *));
+
+static int build_actions __P((WORD_LIST *, int *, int *, unsigned long *, unsigned long *));
+
+static int remove_cmd_completions __P((WORD_LIST *));
+
+static int print_one_completion __P((char *, COMPSPEC *));
+static int print_compitem __P((BUCKET_CONTENTS *));
+static void print_all_completions __P((void));
+static int print_cmd_completions __P((WORD_LIST *));
+
+static char *Garg, *Warg, *Parg, *Sarg, *Xarg, *Farg, *Carg;
+
+static struct _compacts {
+  char *actname;
+  int actflag;
+  int actopt;
+} compacts[] = {
+  { "alias",     CA_ALIAS,     'a' },
+  { "arrayvar",  CA_ARRAYVAR,   0 },
+  { "binding",   CA_BINDING,    0 },
+  { "builtin",   CA_BUILTIN,   'b' },
+  { "command",   CA_COMMAND,   'c' },
+  { "directory", CA_DIRECTORY, 'd' },
+  { "disabled",  CA_DISABLED,   0 },
+  { "enabled",   CA_ENABLED,    0 },
+  { "export",    CA_EXPORT,    'e' },
+  { "file",      CA_FILE,      'f' },
+  { "function",  CA_FUNCTION,   0 },
+  { "helptopic", CA_BUILTIN,  0 },     /* for now */
+  { "hostname",  CA_HOSTNAME,   0 },
+  { "group",     CA_GROUP,     'g' },
+  { "job",       CA_JOB,       'j' },
+  { "keyword",   CA_KEYWORD,   'k' },
+  { "running",   CA_RUNNING,    0 },
+  { "service",   CA_SERVICE,   's' },
+  { "setopt",    CA_SETOPT,     0 },
+  { "shopt",     CA_SHOPT,      0 },
+  { "signal",    CA_SIGNAL,     0 },
+  { "stopped",   CA_STOPPED,    0 },
+  { "user",      CA_USER,      'u' },
+  { "variable",  CA_VARIABLE,  'v' },
+  { (char *)NULL, 0, 0 },
+};
+
+/* This should be a STRING_INT_ALIST */
+static struct _compopt {
+  char *optname;
+  int optflag;
+} compopts[] = {
+  { "bashdefault", COPT_BASHDEFAULT },
+  { "default", COPT_DEFAULT },
+  { "dirnames", COPT_DIRNAMES },
+  { "filenames",COPT_FILENAMES},
+  { "nospace", COPT_NOSPACE },
+  { "plusdirs", COPT_PLUSDIRS },
+  { (char *)NULL, 0 },
+};
+
+static int
+find_compact (name)
+     char *name;
+{
+  register int i;
+
+  for (i = 0; compacts[i].actname; i++)
+    if (STREQ (name, compacts[i].actname))
+      return i;
+  return -1;
+}
+
+static int
+find_compopt (name)
+     char *name;
+{
+  register int i;
+
+  for (i = 0; compopts[i].optname; i++)
+    if (STREQ (name, compopts[i].optname))
+      return i;
+  return -1;
+}
+
+/* Build the actions and compspec options from the options specified in LIST.
+   ACTP is a pointer to an unsigned long in which to place the bitmap of
+   actions.  OPTP is a pointer to an unsigned long in which to place the
+   btmap of compspec options (arguments to `-o').  PP, if non-null, gets 1
+   if -p is supplied; RP, if non-null, gets 1 if -r is supplied.
+   If either is null, the corresponding option generates an error.
+   This also sets variables corresponding to options that take arguments as
+   a side effect; the caller should ensure that those variables are set to
+   NULL before calling build_actions.  Return value:
+       EX_USAGE = bad option
+       EXECUTION_SUCCESS = some options supplied
+       EXECUTION_FAILURE = no options supplied
+*/
+
+static int
+build_actions (list, pp, rp, actp, optp)
+     WORD_LIST *list;
+     int *pp, *rp;
+     unsigned long *actp, *optp;
+{
+  int opt, ind, opt_given;
+  unsigned long acts, copts;
+
+  acts = copts = (unsigned long)0L;
+  opt_given = 0;
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "abcdefgjko:prsuvA:G:W:P:S:X:F:C:")) != -1)
+    {
+      opt_given = 1;
+      switch (opt)
+       {
+       case 'r':
+         if (rp)
+           {
+             *rp = 1;
+             break;
+           }
+         else
+           {
+             sh_invalidopt ("-r");
+             builtin_usage ();
+             return (EX_USAGE);
+           }
+
+       case 'p':
+         if (pp)
+           {
+             *pp = 1;
+             break;
+           }
+         else
+           {
+             sh_invalidopt ("-p");
+             builtin_usage ();
+             return (EX_USAGE);
+           }
+
+       case 'a':
+         acts |= CA_ALIAS;
+         break;
+       case 'b':
+         acts |= CA_BUILTIN;
+         break;
+       case 'c':
+         acts |= CA_COMMAND;
+         break;
+       case 'd':
+         acts |= CA_DIRECTORY;
+         break;
+       case 'e':
+         acts |= CA_EXPORT;
+         break;
+       case 'f':
+         acts |= CA_FILE;
+         break;
+       case 'g':
+         acts |= CA_GROUP;
+         break;
+       case 'j':
+         acts |= CA_JOB;
+         break;
+       case 'k':
+         acts |= CA_KEYWORD;
+         break;
+       case 's':
+         acts |= CA_SERVICE;
+         break;
+       case 'u':
+         acts |= CA_USER;
+         break;
+       case 'v':
+         acts |= CA_VARIABLE;
+         break;
+       case 'o':
+         ind = find_compopt (list_optarg);
+         if (ind < 0)
+           {
+             sh_invalidoptname (list_optarg);
+             return (EX_USAGE);
+           }
+         copts |= compopts[ind].optflag;
+         break;
+       case 'A':
+         ind = find_compact (list_optarg);
+         if (ind < 0)
+           {
+             builtin_error (_("%s: invalid action name"), list_optarg);
+             return (EX_USAGE);
+           }
+         acts |= compacts[ind].actflag;
+         break;
+       case 'C':
+         Carg = list_optarg;
+         break;
+       case 'F':
+         Farg = list_optarg;
+         break;
+       case 'G':
+         Garg = list_optarg;
+         break;
+       case 'P':
+         Parg = list_optarg;
+         break;
+       case 'S':
+         Sarg = list_optarg;
+         break;
+       case 'W':
+         Warg = list_optarg;
+         break;
+       case 'X':
+         Xarg = list_optarg;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  *actp = acts;
+  *optp = copts;
+
+  return (opt_given ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+}
+
+/* Add, remove, and display completion specifiers. */
+int
+complete_builtin (list)
+     WORD_LIST *list;
+{
+  int opt_given, pflag, rflag, rval;
+  unsigned long acts, copts;
+  COMPSPEC *cs;
+
+  if (list == 0)
+    {
+      print_all_completions ();
+      return (EXECUTION_SUCCESS);
+    }
+
+  opt_given = pflag = rflag = 0;
+  acts = copts = (unsigned long)0L;
+  Garg = Warg = Parg = Sarg = Xarg = Farg = Carg = (char *)NULL;
+  cs = (COMPSPEC *)NULL;
+
+  /* Build the actions from the arguments.  Also sets the [A-Z]arg variables
+     as a side effect if they are supplied as options. */
+  rval = build_actions (list, &pflag, &rflag, &acts, &copts);
+  if (rval == EX_USAGE)
+    return (rval);
+  opt_given = rval != EXECUTION_FAILURE;
+
+  list = loptend;
+
+  /* -p overrides everything else */
+  if (pflag || (list == 0 && opt_given == 0))
+    {
+      if (list == 0)
+       {
+         print_all_completions ();
+         return (EXECUTION_SUCCESS);
+       }
+      return (print_cmd_completions (list));
+    }
+
+  /* next, -r overrides everything else. */
+  if (rflag)
+    {
+      if (list == 0)
+       {
+         progcomp_flush ();
+         return (EXECUTION_SUCCESS);
+       }
+      return (remove_cmd_completions (list));
+    }
+
+  if (list == 0 && opt_given)
+    {
+      builtin_usage ();
+      return (EX_USAGE);
+    }
+
+  /* If we get here, we need to build a compspec and add it for each
+     remaining argument. */
+  cs = compspec_create ();
+  cs->actions = acts;
+  cs->options = copts;
+
+  cs->globpat = STRDUP (Garg);
+  cs->words = STRDUP (Warg);
+  cs->prefix = STRDUP (Parg);
+  cs->suffix = STRDUP (Sarg);
+  cs->funcname = STRDUP (Farg);
+  cs->command = STRDUP (Carg);
+  cs->filterpat = STRDUP (Xarg);
+
+  for (rval = EXECUTION_SUCCESS ; list; list = list->next)
+    {
+      /* Add CS as the compspec for the specified commands. */
+      if (progcomp_insert (list->word->word, cs) == 0)
+       rval = EXECUTION_FAILURE;
+    }
+
+  return (rval);
+}
+
+static int
+remove_cmd_completions (list)
+     WORD_LIST *list;
+{
+  WORD_LIST *l;
+  int ret;
+
+  for (ret = EXECUTION_SUCCESS, l = list; l; l = l->next)
+    {
+      if (progcomp_remove (l->word->word) == 0)
+       {
+         builtin_error (_("%s: no completion specification"), l->word->word);
+         ret = EXECUTION_FAILURE;
+       }
+    }
+  return ret;
+}
+
+#define SQPRINTARG(a, f) \
+  do { \
+    if (a) \
+      { \
+       x = sh_single_quote (a); \
+       printf ("%s %s ", f, x); \
+       free (x); \
+      } \
+  } while (0)
+
+#define PRINTARG(a, f) \
+  do { \
+    if (a) \
+      printf ("%s %s ", f, a); \
+  } while (0)
+
+#define PRINTOPT(a, f) \
+  do { \
+    if (acts & a) \
+      printf ("%s ", f); \
+  } while (0)
+
+#define PRINTACT(a, f) \
+  do { \
+    if (acts & a) \
+      printf ("-A %s ", f); \
+  } while (0)
+
+#define PRINTCOMPOPT(a, f) \
+  do { \
+    if (copts & a) \
+      printf ("-o %s ", f); \
+  } while (0)
+
+static int
+print_one_completion (cmd, cs)
+     char *cmd;
+     COMPSPEC *cs;
+{
+  unsigned long acts, copts;
+  char *x;
+
+  printf ("complete ");
+
+  copts = cs->options;
+
+  /* First, print the -o options. */
+  PRINTCOMPOPT (COPT_BASHDEFAULT, "bashdefault");
+  PRINTCOMPOPT (COPT_DEFAULT, "default");
+  PRINTCOMPOPT (COPT_DIRNAMES, "dirnames");
+  PRINTCOMPOPT (COPT_FILENAMES, "filenames");
+  PRINTCOMPOPT (COPT_NOSPACE, "nospace");
+  PRINTCOMPOPT (COPT_PLUSDIRS, "plusdirs");
+
+  acts = cs->actions;
+
+  /* simple flags next */
+  PRINTOPT (CA_ALIAS, "-a");
+  PRINTOPT (CA_BUILTIN, "-b");
+  PRINTOPT (CA_COMMAND, "-c");
+  PRINTOPT (CA_DIRECTORY, "-d");
+  PRINTOPT (CA_EXPORT, "-e");
+  PRINTOPT (CA_FILE, "-f");
+  PRINTOPT (CA_GROUP, "-g");
+  PRINTOPT (CA_JOB, "-j");
+  PRINTOPT (CA_KEYWORD, "-k");
+  PRINTOPT (CA_SERVICE, "-s");
+  PRINTOPT (CA_USER, "-u");
+  PRINTOPT (CA_VARIABLE, "-v");
+
+  /* now the rest of the actions */
+  PRINTACT (CA_ARRAYVAR, "arrayvar");
+  PRINTACT (CA_BINDING, "binding");
+  PRINTACT (CA_DISABLED, "disabled");
+  PRINTACT (CA_ENABLED, "enabled");
+  PRINTACT (CA_FUNCTION, "function");
+  PRINTACT (CA_HELPTOPIC, "helptopic");
+  PRINTACT (CA_HOSTNAME, "hostname");
+  PRINTACT (CA_RUNNING, "running");
+  PRINTACT (CA_SETOPT, "setopt");
+  PRINTACT (CA_SHOPT, "shopt");
+  PRINTACT (CA_SIGNAL, "signal");
+  PRINTACT (CA_STOPPED, "stopped");
+
+  /* now the rest of the arguments */
+
+  /* arguments that require quoting */
+  SQPRINTARG (cs->globpat, "-G");
+  SQPRINTARG (cs->words, "-W");
+  SQPRINTARG (cs->prefix, "-P");
+  SQPRINTARG (cs->suffix, "-S");
+  SQPRINTARG (cs->filterpat, "-X");
+
+  /* simple arguments that don't require quoting */
+  PRINTARG (cs->funcname, "-F");
+  PRINTARG (cs->command, "-C");
+
+  printf ("%s\n", cmd);
+
+  return (0);
+}
+
+static int
+print_compitem (item)
+     BUCKET_CONTENTS *item;
+{
+  COMPSPEC *cs;
+  char *cmd;
+
+  cmd = item->key;
+  cs = (COMPSPEC *)item->data;
+
+  return (print_one_completion (cmd, cs));
+}
+
+static void
+print_all_completions ()
+{
+  progcomp_walk (print_compitem);
+}
+
+static int
+print_cmd_completions (list)
+     WORD_LIST *list;
+{
+  WORD_LIST *l;
+  COMPSPEC *cs;
+  int ret;
+
+  for (ret = EXECUTION_SUCCESS, l = list; l; l = l->next)
+    {
+      cs = progcomp_search (l->word->word);
+      if (cs)
+       print_one_completion (l->word->word, cs);
+      else
+       {
+         builtin_error (_("%s: no completion specification"), l->word->word);
+         ret = EXECUTION_FAILURE;
+       }
+    }
+  return (ret);
+}
+
+$BUILTIN compgen
+$DEPENDS_ON PROGRAMMABLE_COMPLETION
+$FUNCTION compgen_builtin
+$SHORT_DOC compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [word]
+Display the possible completions depending on the options.  Intended
+to be used from within a shell function generating possible completions.
+If the optional WORD argument is supplied, matches against WORD are
+generated.
+$END
+
+int
+compgen_builtin (list)
+     WORD_LIST *list;
+{
+  int rval;
+  unsigned long acts, copts;
+  COMPSPEC *cs;
+  STRINGLIST *sl;
+  char *word, **matches;
+
+  if (list == 0)
+    return (EXECUTION_SUCCESS);
+
+  acts = copts = (unsigned long)0L;
+  Garg = Warg = Parg = Sarg = Xarg = Farg = Carg = (char *)NULL;
+  cs = (COMPSPEC *)NULL;
+
+  /* Build the actions from the arguments.  Also sets the [A-Z]arg variables
+     as a side effect if they are supplied as options. */
+  rval = build_actions (list, (int *)NULL, (int *)NULL, &acts, &copts);
+  if (rval == EX_USAGE)
+    return (rval);
+  if (rval == EXECUTION_FAILURE)
+    return (EXECUTION_SUCCESS);
+
+  list = loptend;
+
+  word = (list && list->word) ? list->word->word : "";
+
+  if (Farg)
+    builtin_error (_("warning: -F option may not work as you expect"));
+  if (Carg)
+    builtin_error (_("warning: -C option may not work as you expect"));
+
+  /* If we get here, we need to build a compspec and evaluate it. */
+  cs = compspec_create ();
+  cs->actions = acts;
+  cs->options = copts;
+  cs->refcount = 1;
+
+  cs->globpat = STRDUP (Garg);
+  cs->words = STRDUP (Warg);
+  cs->prefix = STRDUP (Parg);
+  cs->suffix = STRDUP (Sarg);
+  cs->funcname = STRDUP (Farg);
+  cs->command = STRDUP (Carg);
+  cs->filterpat = STRDUP (Xarg);
+
+  rval = EXECUTION_FAILURE;
+  sl = gen_compspec_completions (cs, "compgen", word, 0, 0);
+
+  /* If the compspec wants the bash default completions, temporarily
+     turn off programmable completion and call the bash completion code. */
+  if ((sl == 0 || sl->list_len == 0) && (copts & COPT_BASHDEFAULT))
+    {
+      matches = bash_default_completion (word, 0, 0, 0, 0);
+      sl = completions_to_stringlist (matches);
+      strvec_dispose (matches);
+    }
+
+  /* This isn't perfect, but it's the best we can do, given what readline
+     exports from its set of completion utility functions. */
+  if ((sl == 0 || sl->list_len == 0) && (copts & COPT_DEFAULT))
+    {
+      matches = rl_completion_matches (word, rl_filename_completion_function);
+      sl = completions_to_stringlist (matches);
+      strvec_dispose (matches);
+    }
+
+  if (sl)
+    {
+      if (sl->list && sl->list_len)
+       {
+         rval = EXECUTION_SUCCESS;
+         strlist_print (sl, (char *)NULL);
+       }
+      strlist_dispose (sl);
+    }
+
+  compspec_dispose (cs);
+  return (rval);
+}
index c472a86c48283e25c32442c38700613fbaf9c2e5..a806f10a5bde9e4af9a86c45ab77be67b41e2b9d 100644 (file)
@@ -1,7 +1,7 @@
 This file is declare.def, from which is created declare.c.
 It implements the builtins "declare" and "local" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -89,10 +89,11 @@ declare_builtin (list)
 
 $BUILTIN local
 $FUNCTION local_builtin
-$SHORT_DOC local name[=value] ...
+$SHORT_DOC local [option] name[=value] ...
 Create a local variable called NAME, and give it VALUE.  LOCAL
 can only be used within a function; it makes the variable NAME
 have a visible scope restricted to that function and its children.
+OPTION can be any of the options accepted by `declare'.
 $END
 int
 local_builtin (list)
index 4d94face666ef5147f9b940c361a72154cec82b6..c472a86c48283e25c32442c38700613fbaf9c2e5 100644 (file)
@@ -24,30 +24,29 @@ $PRODUCES declare.c
 $BUILTIN declare
 $FUNCTION declare_builtin
 $SHORT_DOC declare [-afFirtx] [-p] [name[=value] ...]
-Declare variables and/or give them attributes.  If no NAMEs are
-given, then display the values of variables instead.  The -p option
-will display the attributes and values of each NAME.
+Declare variables and give them attributes.  If no NAMEs are
+given, then display the values of variables instead.  When
+displaying variable values, the -f option restricts the display
+to function names and definitions; the -F option restricts the
+display to function names only (plus line number and source file
+when debugging).  The -p option will display the attributes and
+values of each NAME. 
 
-The flags are:
+The options which set attributes are:
 
   -a   to make NAMEs arrays (if supported)
-  -f   to select from among function names only
-  -F   to display function names (and line number and source file name if
-       debugging) without definitions 
   -i   to make NAMEs have the `integer' attribute
   -r   to make NAMEs readonly
   -t   to make NAMEs have the `trace' attribute
   -x   to make NAMEs export
 
-Variables with the integer attribute have arithmetic evaluation (see
-`let') done when the variable is assigned to.
+Using `+' instead of `-' turns off the given attribute.
 
-When displaying values of variables, -f displays a function's name
-and definition.  The -F option restricts the display to function
-name only.
+Variables with the integer attribute have arithmetic evaluation (see
+the `let' command) done when the variable is assigned a value.
 
-Using `+' instead of `-' turns off the given attribute instead.  When
-used in a function, makes NAMEs local, as with the `local' command.
+When used in a function, `declare' makes NAMEs local, as with the `local'
+command.
 $END
 
 $BUILTIN typeset
index 5307e394675a578a0335f2b0949b612a13e59fee..3570be5ef96f103e5e5ab076aa6245fe1e6c5e9e 100644 (file)
@@ -1,7 +1,7 @@
 This file is enable.def, from which is created enable.c.
 It implements the builtin "enable" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,7 +23,7 @@ $PRODUCES enable.c
 
 $BUILTIN enable
 $FUNCTION enable_builtin
-$SHORT_DOC enable [-pnds] [-a] [-f filename] [name ...]
+$SHORT_DOC enable [-a] [-dnps] [-f filename] [name ...]
 Enable and disable builtin shell commands.  This allows
 you to use a disk command which has the same name as a shell
 builtin without specifying a full pathname.  If -n is used, the
index 823c38f9bf222178fdd1285cec3d5d584b9d43a1..5307e394675a578a0335f2b0949b612a13e59fee 100644 (file)
@@ -32,7 +32,7 @@ to use the `test' found in $PATH instead of the shell builtin
 version, type `enable -n test'.  On systems supporting dynamic
 loading, the -f option may be used to load new builtins from the
 shared object FILENAME.  The -d option will delete a builtin
-previously loaded with -f.  If no non-option names are given, or
+previously loaded with -f.  If no non-option NAMEs are given, or
 the -p option is supplied, a list of builtins is printed.  The
 -a option means to print every builtin with an indication of whether
 or not it is enabled.  The -s option restricts the output to the POSIX.2
index 89d39e0423e2b760970dd4876a26e5546e978b81..b8e9640c9d9cb7050f5f4b6ac872060779864337 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -176,7 +176,7 @@ file_error_and_exit:
       check_binary_file (string, (result > 80) ? 80 : result))
     {
       free (string);
-      (*errfunc) ("%s: cannot execute binary file", filename);
+      (*errfunc) (_("%s: cannot execute binary file"), filename);
       return ((flags & FEVAL_BUILTIN) ? EX_BINARY_FILE : -1);
     }
 
diff --git a/builtins/evalfile.c~ b/builtins/evalfile.c~
new file mode 100644 (file)
index 0000000..5faf9f7
--- /dev/null
@@ -0,0 +1,325 @@
+/* Copyright (C) 1996-2003 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashtypes.h"
+#include "posixstat.h"
+#include "filecntl.h"
+
+#include <stdio.h>
+#include <signal.h>
+#include <errno.h>
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../jobs.h"
+#include "../builtins.h"
+#include "../flags.h"
+#include "../input.h"
+#include "../execute_cmd.h"
+#include "../trap.h"
+
+#if defined (HISTORY)
+#  include "../bashhist.h"
+#endif
+
+#include "common.h"
+
+#if !defined (errno)
+extern int errno;
+#endif
+
+/* Flags for _evalfile() */
+#define FEVAL_ENOENTOK         0x001
+#define FEVAL_BUILTIN          0x002
+#define FEVAL_UNWINDPROT       0x004
+#define FEVAL_NONINT           0x008
+#define FEVAL_LONGJMP          0x010
+#define FEVAL_HISTORY          0x020
+#define FEVAL_CHECKBINARY      0x040
+#define FEVAL_REGFILE          0x080
+#define FEVAL_NOPUSHARGS       0x100
+
+extern int posixly_correct;
+extern int indirection_level, subshell_environment;
+extern int return_catch_flag, return_catch_value;
+extern int last_command_exit_value;
+
+/* How many `levels' of sourced files we have. */
+int sourcelevel = 0;
+
+static int
+_evalfile (filename, flags)
+     const char *filename;
+     int flags;
+{
+  volatile int old_interactive;
+  procenv_t old_return_catch;
+  int return_val, fd, result, pflags;
+  char *string;
+  struct stat finfo;
+  size_t file_size;
+  sh_vmsg_func_t *errfunc;
+#if defined (ARRAY_VARS)
+  SHELL_VAR *funcname_v, *nfv, *bash_source_v, *bash_lineno_v;
+  ARRAY *funcname_a, *bash_source_a, *bash_lineno_a;
+#  if defined (DEBUGGER)
+  SHELL_VAR *bash_argv_v, *bash_argc_v;
+  ARRAY *bash_argv_a, *bash_argc_a;
+#  endif
+  char *t, tt[2];
+#endif
+
+  USE_VAR(pflags);
+
+#if defined (ARRAY_VARS)
+  GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a);
+  GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a);
+  GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a);
+#  if defined (DEBUGGER)
+  GET_ARRAY_FROM_VAR ("BASH_ARGV", bash_argv_v, bash_argv_a);
+  GET_ARRAY_FROM_VAR ("BASH_ARGC", bash_argc_v, bash_argc_a);
+#  endif
+#endif
+  
+  fd = open (filename, O_RDONLY);
+
+  if (fd < 0 || (fstat (fd, &finfo) == -1))
+    {
+file_error_and_exit:
+      if (((flags & FEVAL_ENOENTOK) == 0) || errno != ENOENT)
+       file_error (filename);
+
+      if (flags & FEVAL_LONGJMP)
+       {
+         last_command_exit_value = 1;
+         jump_to_top_level (EXITPROG);
+       }
+
+      return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE
+                                     : ((errno == ENOENT) ? 0 : -1));
+    }
+
+  errfunc = ((flags & FEVAL_BUILTIN) ? builtin_error : internal_error);
+
+  if (S_ISDIR (finfo.st_mode))
+    {
+      (*errfunc) (_("%s: is a directory"), filename);
+      return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
+    }
+  else if ((flags & FEVAL_REGFILE) && S_ISREG (finfo.st_mode) == 0)
+    {
+      (*errfunc) (_("%s: not a regular file"), filename);
+      return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
+    }
+
+  file_size = (size_t)finfo.st_size;
+  /* Check for overflow with large files. */
+  if (file_size != finfo.st_size || file_size + 1 < file_size)
+    {
+      (*errfunc) (_("%s: file is too large"), filename);
+      return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
+    }      
+
+#if defined (__CYGWIN__) && defined (O_TEXT)
+  setmode (fd, O_TEXT);
+#endif
+
+  if (S_ISREG (finfo.st_mode))
+    {
+      string = (char *)xmalloc (1 + file_size);
+      result = read (fd, string, file_size);
+      string[result] = '\0';
+    }
+  else
+    result = zmapfd (fd, &string, 0);
+
+  return_val = errno;
+  close (fd);
+  errno = return_val;
+
+  if (result < 0)              /* XXX was != file_size, not < 0 */
+    {
+      free (string);
+      goto file_error_and_exit;
+    }
+
+  if (result == 0)
+    {
+      free (string);
+      return ((flags & FEVAL_BUILTIN) ? EXECUTION_SUCCESS : 1);
+    }
+      
+  if ((flags & FEVAL_CHECKBINARY) && 
+      check_binary_file (string, (result > 80) ? 80 : result))
+    {
+      free (string);
+      (*errfunc) (_("%s: cannot execute binary file"), filename);
+      return ((flags & FEVAL_BUILTIN) ? EX_BINARY_FILE : -1);
+    }
+
+  if (flags & FEVAL_UNWINDPROT)
+    {
+      begin_unwind_frame ("_evalfile");
+
+      unwind_protect_int (return_catch_flag);
+      unwind_protect_jmp_buf (return_catch);
+      if (flags & FEVAL_NONINT)
+       unwind_protect_int (interactive);
+      unwind_protect_int (sourcelevel);
+    }
+  else
+    {
+      COPY_PROCENV (return_catch, old_return_catch);
+      if (flags & FEVAL_NONINT)
+       old_interactive = interactive;
+    }
+
+  if (flags & FEVAL_NONINT)
+    interactive = 0;
+
+  return_catch_flag++;
+  sourcelevel++;
+
+#if defined (ARRAY_VARS)
+  array_push (bash_source_a, (char *)filename);
+  t = itos (executing_line_number ());
+  array_push (bash_lineno_a, t);
+  free (t);
+  array_push (funcname_a, "source");   /* not exactly right */
+#  if defined (DEBUGGER)
+  /* Have to figure out a better way to do this when `source' is supplied
+     arguments */
+  if ((flags & FEVAL_NOPUSHARGS) == 0)
+    {
+      array_push (bash_argv_a, (char *)filename);
+      tt[0] = '1'; tt[1] = '\0';
+      array_push (bash_argc_a, tt);
+    }
+#  endif
+#endif
+
+  /* set the flags to be passed to parse_and_execute */
+  pflags = SEVAL_RESETLINE;
+  pflags |= (flags & FEVAL_HISTORY) ? 0 : SEVAL_NOHIST;
+
+  if (flags & FEVAL_BUILTIN)
+    result = EXECUTION_SUCCESS;
+
+  return_val = setjmp (return_catch);
+
+  /* If `return' was seen outside of a function, but in the script, then
+     force parse_and_execute () to clean up. */
+  if (return_val)
+    {
+      parse_and_execute_cleanup ();
+      result = return_catch_value;
+    }
+  else
+    result = parse_and_execute (string, filename, pflags);
+
+  if (flags & FEVAL_UNWINDPROT)
+    run_unwind_frame ("_evalfile");
+  else
+    {
+      if (flags & FEVAL_NONINT)
+       interactive = old_interactive;
+      return_catch_flag--;
+      sourcelevel--;
+      COPY_PROCENV (old_return_catch, return_catch);
+    }
+
+#if defined (ARRAY_VARS)
+  /* These two variables cannot be unset, and cannot be affected by the
+     sourced file. */
+  array_pop (bash_source_a);
+  array_pop (bash_lineno_a);
+
+  /* FUNCNAME can be unset, and so can potentially be changed by the
+     sourced file. */
+  GET_ARRAY_FROM_VAR ("FUNCNAME", nfv, funcname_a);
+  if (nfv == funcname_v)
+    array_pop (funcname_a);
+#  if defined (DEBUGGER)
+  if ((flags & FEVAL_NOPUSHARGS) == 0)
+    {
+      array_pop (bash_argc_a);
+      array_pop (bash_argv_a);
+    }
+#  endif
+#endif
+
+  return ((flags & FEVAL_BUILTIN) ? result : 1);
+}
+
+int
+maybe_execute_file (fname, force_noninteractive)
+     const char *fname;
+     int force_noninteractive;
+{
+  char *filename;
+  int result, flags;
+
+  filename = bash_tilde_expand (fname, 0);
+  flags = FEVAL_ENOENTOK;
+  if (force_noninteractive)
+    flags |= FEVAL_NONINT;
+  result = _evalfile (filename, flags);
+  free (filename);
+  return result;
+}
+
+#if defined (HISTORY)
+int
+fc_execute_file (filename)
+     const char *filename;
+{
+  int flags;
+
+  /* We want these commands to show up in the history list if
+     remember_on_history is set. */
+  flags = FEVAL_ENOENTOK|FEVAL_HISTORY|FEVAL_REGFILE;
+  return (_evalfile (filename, flags));
+}
+#endif /* HISTORY */
+
+int
+source_file (filename, sflags)
+     const char *filename;
+     int sflags;
+{
+  int flags, rval;
+
+  flags = FEVAL_BUILTIN|FEVAL_UNWINDPROT|FEVAL_NONINT;
+  if (sflags)
+    flags |= FEVAL_NOPUSHARGS;
+  /* POSIX shells exit if non-interactive and file error. */
+  if (posixly_correct && !interactive_shell)
+    flags |= FEVAL_LONGJMP;
+  rval = _evalfile (filename, flags);
+
+  run_return_trap ();
+  return rval;
+}
index ddaa5d315cd44f215a0b7e928f7f369ec9106a1a..2ab8852192d12ab1c7774063924d1f09b13e3e21 100644 (file)
@@ -1,7 +1,7 @@
 This file is exit.def, from which is created exit.c.
 It implements the builtins "exit", and "logout" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -60,7 +60,7 @@ exit_builtin (list)
 {
   if (interactive)
     {
-      fprintf (stderr, login_shell ? "logout\n" : "exit\n");
+      fprintf (stderr, login_shell ? _("logout\n") : "exit\n");
       fflush (stderr);
     }
 
diff --git a/builtins/exit.def~ b/builtins/exit.def~
new file mode 100644 (file)
index 0000000..ddaa5d3
--- /dev/null
@@ -0,0 +1,152 @@
+This file is exit.def, from which is created exit.c.
+It implements the builtins "exit", and "logout" in Bash.
+
+Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES exit.c
+
+$BUILTIN exit
+$FUNCTION exit_builtin
+$SHORT_DOC exit [n]
+Exit the shell with a status of N.  If N is omitted, the exit status
+is that of the last command executed.
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include <stdio.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../jobs.h"
+
+#include "common.h"
+#include "builtext.h"  /* for jobs_builtin */
+
+extern int last_command_exit_value;
+extern int running_trap, trap_saved_exit_value;
+extern int subshell_environment;
+extern sh_builtin_func_t *this_shell_builtin;
+extern sh_builtin_func_t *last_shell_builtin;
+
+static int exit_or_logout __P((WORD_LIST *));
+static int sourced_logout;
+
+int
+exit_builtin (list)
+     WORD_LIST *list;
+{
+  if (interactive)
+    {
+      fprintf (stderr, login_shell ? "logout\n" : "exit\n");
+      fflush (stderr);
+    }
+
+  return (exit_or_logout (list));
+}
+
+$BUILTIN logout
+$FUNCTION logout_builtin
+$SHORT_DOC logout
+Logout of a login shell.
+$END
+
+/* How to logout. */
+int
+logout_builtin (list)
+     WORD_LIST *list;
+{
+  if (login_shell == 0 /* && interactive */)
+    {
+      builtin_error (_("not login shell: use `exit'"));
+      return (EXECUTION_FAILURE);
+    }
+  else
+    return (exit_or_logout (list));
+}
+
+static int
+exit_or_logout (list)
+     WORD_LIST *list;
+{
+  int exit_value;
+
+#if defined (JOB_CONTROL)
+  int exit_immediate_okay;
+
+  exit_immediate_okay = (interactive  == 0 ||
+                        last_shell_builtin == exit_builtin ||
+                        last_shell_builtin == logout_builtin ||
+                        last_shell_builtin == jobs_builtin);
+
+  /* Check for stopped jobs if the user wants to. */
+  if (!exit_immediate_okay)
+    {
+      register int i;
+      for (i = 0; i < js.j_jobslots; i++)
+       if (jobs[i] && STOPPED (i))
+         {
+           fprintf (stderr, _("There are stopped jobs.\n"));
+
+           /* This is NOT superfluous because EOF can get here without
+              going through the command parser.  Set both last and this
+              so that either `exit', `logout', or ^D will work to exit
+              immediately if nothing intervenes. */
+           this_shell_builtin = last_shell_builtin = exit_builtin;
+           return (EXECUTION_FAILURE);
+         }
+    }
+#endif /* JOB_CONTROL */
+
+  /* Get return value if present.  This means that you can type
+     `logout 5' to a shell, and it returns 5. */
+
+  /* If we're running the exit trap (running_trap == 1, since running_trap
+     gets set to SIG+1), and we don't have a argument given to `exit'
+     (list == 0), use the exit status we saved before running the trap
+     commands (trap_saved_exit_value). */
+  exit_value = (running_trap == 1 && list == 0) ? trap_saved_exit_value : get_exitstat (list);
+
+  bash_logout ();
+
+  last_command_exit_value = exit_value;
+
+  /* Exit the program. */
+  jump_to_top_level (EXITPROG);
+  /*NOTREACHED*/
+}
+
+void
+bash_logout ()
+{
+  /* Run our `~/.bash_logout' file if it exists, and this is a login shell. */
+  if (login_shell && sourced_logout++ == 0 && subshell_environment == 0)
+    {
+      maybe_execute_file ("~/.bash_logout", 1);
+#ifdef SYS_BASH_LOGOUT
+      maybe_execute_file (SYS_BASH_LOGOUT, 1);
+#endif
+    }
+}
index fe6b4c1f976093b247185793fabf37716dc5815f..a807309dacad6134ab2438495c0ebf5156aea882 100644 (file)
@@ -24,7 +24,7 @@ $PRODUCES fc.c
 $BUILTIN fc
 $FUNCTION fc_builtin
 $DEPENDS_ON HISTORY
-$SHORT_DOC fc [-e ename] [-nlr] [first] [last] or fc -s [pat=rep] [command]
+$SHORT_DOC fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
 fc is used to list or edit and re-execute commands from the history list.
 FIRST and LAST can be numbers specifying the range, or FIRST can be a
 string, which means the most recent command beginning with that
index 3376a1b18f96837bb96fa879b3fb331a5985ee18..fe6b4c1f976093b247185793fabf37716dc5815f 100644 (file)
@@ -1,7 +1,7 @@
 This file is fc.def, from which is created fc.c.
 It implements the builtin "fc" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
index c14381b6d3d6ae7fa926872629616d56aee4a818..2f86c8bd7bf1388c43c529af2e75f7333c8ecabb 100644 (file)
@@ -1,7 +1,7 @@
 This file is fg_bg.def, from which is created fg_bg.c.
 It implements the builtins "bg" and "fg" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -137,7 +137,7 @@ fg_bg (list, foreground)
   if (INVALID_JOB (job))
     {
       if (job != DUP_JOB)
-       sh_badjob (list ? list->word->word : "current");
+       sh_badjob (list ? list->word->word : _("current"));
 
       goto failure;
     }
diff --git a/builtins/fg_bg.def~ b/builtins/fg_bg.def~
new file mode 100644 (file)
index 0000000..c14381b
--- /dev/null
@@ -0,0 +1,177 @@
+This file is fg_bg.def, from which is created fg_bg.c.
+It implements the builtins "bg" and "fg" in Bash.
+
+Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES fg_bg.c
+
+$BUILTIN fg
+$FUNCTION fg_builtin
+$DEPENDS_ON JOB_CONTROL
+$SHORT_DOC fg [job_spec]
+Place JOB_SPEC in the foreground, and make it the current job.  If
+JOB_SPEC is not present, the shell's notion of the current job is
+used.
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include <signal.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../jobs.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+#if defined (JOB_CONTROL)
+extern char *this_command_name;
+
+static int fg_bg __P((WORD_LIST *, int));
+
+/* How to bring a job into the foreground. */
+int
+fg_builtin (list)
+     WORD_LIST *list;
+{
+  int fg_bit;
+  register WORD_LIST *t;
+
+  if (job_control == 0)
+    {
+      sh_nojobs ((char *)NULL);
+      return (EXECUTION_FAILURE);
+    }
+
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;
+
+  /* If the last arg on the line is '&', then start this job in the
+     background.  Else, fg the job. */
+  for (t = list; t && t->next; t = t->next)
+    ;
+  fg_bit = (t && t->word->word[0] == '&' && t->word->word[1] == '\0') == 0;
+
+  return (fg_bg (list, fg_bit));
+}
+#endif /* JOB_CONTROL */
+
+$BUILTIN bg
+$FUNCTION bg_builtin
+$DEPENDS_ON JOB_CONTROL
+$SHORT_DOC bg [job_spec ...]
+Place each JOB_SPEC in the background, as if it had been started with
+`&'.  If JOB_SPEC is not present, the shell's notion of the current
+job is used.
+$END
+
+#if defined (JOB_CONTROL)
+/* How to put a job into the background. */
+int
+bg_builtin (list)
+     WORD_LIST *list;
+{
+  int r;
+
+  if (job_control == 0)
+    {
+      sh_nojobs ((char *)NULL);
+      return (EXECUTION_FAILURE);
+    }
+
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;
+
+  /* This relies on the fact that fg_bg() takes a WORD_LIST *, but only acts
+     on the first member (if any) of that list. */
+  r = EXECUTION_SUCCESS;
+  do
+    {
+      if (fg_bg (list, 0) == EXECUTION_FAILURE)
+       r = EXECUTION_FAILURE;
+      if (list)
+       list = list->next;
+    }
+  while (list);
+
+  return r;
+}
+
+/* How to put a job into the foreground/background. */
+static int
+fg_bg (list, foreground)
+     WORD_LIST *list;
+     int foreground;
+{
+  sigset_t set, oset;
+  int job, status, old_async_pid;
+  JOB *j;
+
+  BLOCK_CHILD (set, oset);
+  job = get_job_spec (list);
+
+  if (INVALID_JOB (job))
+    {
+      if (job != DUP_JOB)
+       sh_badjob (list ? list->word->word : "current");
+
+      goto failure;
+    }
+
+  j = get_job_by_jid (job);
+  /* Or if j->pgrp == shell_pgrp. */
+  if (IS_JOBCONTROL (job) == 0)
+    {
+      builtin_error (_("job %d started without job control"), job + 1);
+      goto failure;
+    }
+
+  if (foreground == 0)
+    {
+      old_async_pid = last_asynchronous_pid;
+      last_asynchronous_pid = j->pgrp; /* As per Posix.2 5.4.2 */
+    }
+
+  status = start_job (job, foreground);
+
+  if (status >= 0)
+    {
+    /* win: */
+      UNBLOCK_CHILD (oset);
+      return (foreground ? status : EXECUTION_SUCCESS);
+    }
+  else
+    {
+      if (foreground == 0)
+       last_asynchronous_pid = old_async_pid;
+
+    failure:
+      UNBLOCK_CHILD (oset);
+      return (EXECUTION_FAILURE);
+    }
+}
+#endif /* JOB_CONTROL */
index dccd97e02d8b759bcc66cbbaadc1a55a66e354bd..8c827e1705de64c09ab5c5c09aaac2f964b478c2 100644 (file)
@@ -233,7 +233,7 @@ print_hashed_commands (fmt)
     return (0);
 
   if (fmt == 0)
-    printf ("hits\tcommand\n");
+    printf (_("hits\tcommand\n"));
   hash_walk (hashed_filenames, fmt ? print_portable_hash_info : print_hash_info);
   return (1);
 }
index 697ffd0a911de44f6e1456e473fb5a0ff3d5b5b6..dccd97e02d8b759bcc66cbbaadc1a55a66e354bd 100644 (file)
@@ -158,7 +158,7 @@ hash_builtin (list)
 #ifdef EISDIR
              builtin_error ("%s: %s", pathname, strerror (EISDIR));
 #else
-             builtin_error ("%s: is a directory", pathname);
+             builtin_error (_("%s: is a directory"), pathname);
 #endif
              opt = EXECUTION_FAILURE;
            }
index 1a127e2e9f1d3ead50836293a287cae1987fa451..972079221e192c90798e844841b2f96fc56653e1 100644 (file)
@@ -24,7 +24,7 @@ $PRODUCES history.c
 $BUILTIN history
 $FUNCTION history_builtin
 $DEPENDS_ON HISTORY
-$SHORT_DOC history [-c] [-d offset] [n] or history -awrn [filename] or history -ps arg [arg...]
+$SHORT_DOC history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
 Display the history list with line numbers.  Lines listed with
 with a `*' have been modified.  Argument of N says to list only
 the last N lines.  The `-c' option causes the history list to be
index efee005210c490bee46bfc5aa6436c9faa0b9ccb..1a127e2e9f1d3ead50836293a287cae1987fa451 100644 (file)
@@ -1,7 +1,7 @@
 This file is history.def, from which is created history.c.
 It implements the builtin "history" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -36,7 +36,7 @@ to append history lines from this session to the history file.
 Argument `-n' means to read all history lines not already read
 from the history file and append them to the history list.
 
-If FILENAME is given, then that is used as the history file else
+If FILENAME is given, then that is used as the history file.  Otherwise,
 if $HISTFILE has a value, that is used, else ~/.bash_history.
 If the -s option is supplied, the non-option ARGs are appended to
 the history list as a single entry.  The -p option means to perform
index 4c3ba6a73144c9bcf266d5d5184128fc5a8ed97e..ff1f3a80b3506799ec9d00b6a50857adc69911ae 100644 (file)
@@ -1,7 +1,7 @@
 This file is jobs.def, from which is created jobs.c.
 It implements the builtins "jobs" and "disown" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -261,7 +261,7 @@ disown_builtin (list)
 
       if (job == NO_JOB || jobs == 0 || INVALID_JOB (job))
        {
-         sh_badjob (list ? list->word->word : "current");
+         sh_badjob (list ? list->word->word : _("current"));
          retval = EXECUTION_FAILURE;
        }
       else if (nohup_only)
diff --git a/builtins/jobs.def~ b/builtins/jobs.def~
new file mode 100644 (file)
index 0000000..4c3ba6a
--- /dev/null
@@ -0,0 +1,280 @@
+This file is jobs.def, from which is created jobs.c.
+It implements the builtins "jobs" and "disown" in Bash.
+
+Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES jobs.c
+
+$BUILTIN jobs
+$FUNCTION jobs_builtin
+$DEPENDS_ON JOB_CONTROL
+$SHORT_DOC jobs [-lnprs] [jobspec ...] or jobs -x command [args]
+Lists the active jobs.  The -l option lists process id's in addition
+to the normal information; the -p option lists process id's only.
+If -n is given, only processes that have changed status since the last
+notification are printed.  JOBSPEC restricts output to that job.  The
+-r and -s options restrict output to running and stopped jobs only,
+respectively.  Without options, the status of all active jobs is
+printed.  If -x is given, COMMAND is run after all job specifications
+that appear in ARGS have been replaced with the process ID of that job's
+process group leader.
+$END
+
+#include <config.h>
+
+#if defined (JOB_CONTROL)
+#include "../bashtypes.h"
+#include <signal.h>
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../jobs.h"
+#include "../execute_cmd.h"
+#include "bashgetopt.h"
+#include "common.h"
+
+#define JSTATE_ANY     0x0
+#define JSTATE_RUNNING 0x1
+#define JSTATE_STOPPED 0x2
+
+static int execute_list_with_replacements __P((WORD_LIST *));
+
+/* The `jobs' command.  Prints outs a list of active jobs.  If the
+   argument `-l' is given, then the process id's are printed also.
+   If the argument `-p' is given, print the process group leader's
+   pid only.  If `-n' is given, only processes that have changed
+   status since the last notification are printed.  If -x is given,
+   replace all job specs with the pid of the appropriate process
+   group leader and execute the command.  The -r and -s options mean
+   to print info about running and stopped jobs only, respectively. */
+int
+jobs_builtin (list)
+     WORD_LIST *list;
+{
+  int form, execute, state, opt, any_failed, job;
+  sigset_t set, oset;
+
+  execute = any_failed = 0;
+  form = JLIST_STANDARD;
+  state = JSTATE_ANY;
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "lpnxrs")) != -1)
+    {
+      switch (opt)
+       {
+       case 'l':
+         form = JLIST_LONG;
+         break;
+       case 'p':
+         form = JLIST_PID_ONLY;
+         break;
+       case 'n':
+         form = JLIST_CHANGED_ONLY;
+         break;
+       case 'x':
+         if (form != JLIST_STANDARD)
+           {
+             builtin_error (_("no other options allowed with `-x'"));
+             return (EXECUTION_FAILURE);
+           }
+         execute++;
+         break;
+       case 'r':
+         state = JSTATE_RUNNING;
+         break;
+       case 's':
+         state = JSTATE_STOPPED;
+         break;
+
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+
+  if (execute)
+    return (execute_list_with_replacements (list));
+
+  if (!list)
+    {
+      switch (state)
+       {
+       case JSTATE_ANY:
+         list_all_jobs (form);
+         break;
+       case JSTATE_RUNNING:
+         list_running_jobs (form);
+         break;
+       case JSTATE_STOPPED:
+         list_stopped_jobs (form);
+         break;
+       }
+      return (EXECUTION_SUCCESS);
+    }
+
+  while (list)
+    {
+      BLOCK_CHILD (set, oset);
+      job = get_job_spec (list);
+
+      if ((job == NO_JOB) || jobs == 0 || get_job_by_jid (job) == 0)
+       {
+         sh_badjob (list->word->word);
+         any_failed++;
+       }
+      else if (job != DUP_JOB)
+       list_one_job ((JOB *)NULL, form, 0, job);
+
+      UNBLOCK_CHILD (oset);
+      list = list->next;
+    }
+  return (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+
+static int
+execute_list_with_replacements (list)
+     WORD_LIST *list;
+{
+  register WORD_LIST *l;
+  int job, result;
+  COMMAND *command;
+  JOB *j;
+
+  /* First do the replacement of job specifications with pids. */
+  for (l = list; l; l = l->next)
+    {
+      if (l->word->word[0] == '%')     /* we have a winner */
+       {
+         job = get_job_spec (l);
+
+         /* A bad job spec is not really a job spec! Pass it through. */
+         if (INVALID_JOB (job))
+           continue;
+
+         j = get_job_by_jid (job);
+         free (l->word->word);
+         l->word->word = itos (j->pgrp);
+       }
+    }
+
+  /* Next make a new simple command and execute it. */
+  begin_unwind_frame ("jobs_builtin");
+
+  command = make_bare_simple_command ();
+  command->value.Simple->words = copy_word_list (list);
+  command->value.Simple->redirects = (REDIRECT *)NULL;
+  command->flags |= CMD_INHIBIT_EXPANSION;
+  command->value.Simple->flags |= CMD_INHIBIT_EXPANSION;
+
+  add_unwind_protect (dispose_command, command);
+  result = execute_command (command);
+  dispose_command (command);
+
+  discard_unwind_frame ("jobs_builtin");
+  return (result);
+}
+#endif /* JOB_CONTROL */
+
+$BUILTIN disown
+$FUNCTION disown_builtin
+$DEPENDS_ON JOB_CONTROL
+$SHORT_DOC disown [-h] [-ar] [jobspec ...]
+By default, removes each JOBSPEC argument from the table of active jobs.
+If the -h option is given, the job is not removed from the table, but is
+marked so that SIGHUP is not sent to the job if the shell receives a
+SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
+jobs from the job table; the -r option means to remove only running jobs.
+$END
+
+#if defined (JOB_CONTROL)
+int
+disown_builtin (list)
+     WORD_LIST *list;
+{
+  int opt, job, retval, nohup_only, running_jobs, all_jobs;
+  sigset_t set, oset;
+  intmax_t pid_value;
+
+  nohup_only = running_jobs = all_jobs = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "ahr")) != -1)
+    {
+      switch (opt)
+       {
+       case 'a':
+         all_jobs = 1;
+         break;
+       case 'h':
+         nohup_only = 1;
+         break;
+       case 'r':
+         running_jobs = 1;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+  retval = EXECUTION_SUCCESS;
+
+  /* `disown -a' or `disown -r' */
+  if (list == 0 && (all_jobs || running_jobs))
+    {
+      if (nohup_only)
+       nohup_all_jobs (running_jobs);
+      else
+       delete_all_jobs (running_jobs);
+      return (EXECUTION_SUCCESS);
+    }
+
+  do
+    {
+      BLOCK_CHILD (set, oset);
+      job = (list && legal_number (list->word->word, &pid_value) && pid_value == (pid_t) pid_value)
+               ? get_job_by_pid ((pid_t) pid_value, 0)
+               : get_job_spec (list);
+
+      if (job == NO_JOB || jobs == 0 || INVALID_JOB (job))
+       {
+         sh_badjob (list ? list->word->word : "current");
+         retval = EXECUTION_FAILURE;
+       }
+      else if (nohup_only)
+       nohup_job (job);
+      else
+       delete_job (job, 1);
+      UNBLOCK_CHILD (oset);
+
+      if (list)
+       list = list->next;
+    }
+  while (list);
+
+  return (retval);
+}
+#endif /* JOB_CONTROL */
index 21521db0f21deaec21e94725378e2cf98d5bf793..d6d4c4dae910f40f53dc8f2b5d6502d82e49e42b 100644 (file)
@@ -23,7 +23,7 @@ $PRODUCES read.c
 
 $BUILTIN read
 $FUNCTION read_builtin
-$SHORT_DOC read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]
+$SHORT_DOC read [-ers] [-a array] [-d delim] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
 One line is read from the standard input, or from file descriptor FD if the
 -u option is supplied, and the first word is assigned to the first NAME,
 the second word to the second NAME, and so on, with leftover words assigned
diff --git a/builtins/read.def~ b/builtins/read.def~
new file mode 100644 (file)
index 0000000..21521db
--- /dev/null
@@ -0,0 +1,784 @@
+This file is read.def, from which is created read.c.
+It implements the builtin "read" in Bash.
+
+Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES read.c
+
+$BUILTIN read
+$FUNCTION read_builtin
+$SHORT_DOC read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]
+One line is read from the standard input, or from file descriptor FD if the
+-u option is supplied, and the first word is assigned to the first NAME,
+the second word to the second NAME, and so on, with leftover words assigned
+to the last NAME.  Only the characters found in $IFS are recognized as word
+delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY
+variable.  If the -r option is given, this signifies `raw' input, and
+backslash escaping is disabled.  The -d option causes read to continue
+until the first character of DELIM is read, rather than newline.  If the -p
+option is supplied, the string PROMPT is output without a trailing newline
+before attempting to read.  If -a is supplied, the words read are assigned
+to sequential indices of ARRAY, starting at zero.  If -e is supplied and
+the shell is interactive, readline is used to obtain the line.  If -n is
+supplied with a non-zero NCHARS argument, read returns after NCHARS
+characters have been read.  The -s option causes input coming from a
+terminal to not be echoed.
+
+The -t option causes read to time out and return failure if a complete line
+of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,
+its value is the default timeout.  The return code is zero, unless end-of-file
+is encountered, read times out, or an invalid file descriptor is supplied as
+the argument to -u.
+$END
+
+#include <config.h>
+
+#include "bashtypes.h"
+#include "posixstat.h"
+
+#include <stdio.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <signal.h>
+#include <errno.h>
+
+#ifdef __CYGWIN__
+#  include <fcntl.h>
+#  include <io.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+#include <shtty.h>
+
+#if defined (READLINE)
+#include "../bashline.h"
+#include <readline/readline.h>
+#endif
+
+#if defined (BUFFERED_INPUT)
+#  include "input.h"
+#endif
+
+#if !defined(errno)
+extern int errno;
+#endif
+
+#if defined (READLINE)
+static void reset_attempted_completion_function __P((char *));
+static char *edit_line __P((char *));
+static void set_eol_delim __P((int));
+static void reset_eol_delim __P((char *));
+#endif
+static SHELL_VAR *bind_read_variable __P((char *, char *));
+
+static sighandler sigalrm __P((int));
+static void reset_alarm __P((void));
+
+static procenv_t alrmbuf;
+static SigHandler *old_alrm;
+static unsigned char delim;
+
+static sighandler
+sigalrm (s)
+     int s;
+{
+  longjmp (alrmbuf, 1);
+}
+
+static void
+reset_alarm ()
+{
+  set_signal_handler (SIGALRM, old_alrm);
+  alarm (0);
+}
+
+/* Read the value of the shell variables whose names follow.
+   The reading is done from the current input stream, whatever
+   that may be.  Successive words of the input line are assigned
+   to the variables mentioned in LIST.  The last variable in LIST
+   gets the remainder of the words on the line.  If no variables
+   are mentioned in LIST, then the default variable is $REPLY. */
+int
+read_builtin (list)
+     WORD_LIST *list;
+{
+  register char *varname;
+  int size, i, nr, pass_next, saw_escape, eof, opt, retval, code;
+  int input_is_tty, input_is_pipe, unbuffered_read;
+  int raw, edit, nchars, silent, have_timeout, fd;
+  unsigned int tmout;
+  intmax_t intval;
+  char c;
+  char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
+  char *e, *t, *t1;
+  struct stat tsb;
+  SHELL_VAR *var;
+#if defined (ARRAY_VARS)
+  WORD_LIST *alist;
+#endif
+#if defined (READLINE)
+  char *rlbuf;
+  int rlind;
+#endif
+
+  USE_VAR(size);
+  USE_VAR(i);
+  USE_VAR(pass_next);
+  USE_VAR(saw_escape);
+  USE_VAR(input_is_pipe);
+/*  USE_VAR(raw); */
+  USE_VAR(edit);
+  USE_VAR(tmout);
+  USE_VAR(nchars);
+  USE_VAR(silent);
+  USE_VAR(ifs_chars);
+  USE_VAR(prompt);
+  USE_VAR(arrayname);
+#if defined (READLINE)
+  USE_VAR(rlbuf);
+  USE_VAR(rlind);
+#endif
+  USE_VAR(list);
+
+  i = 0;               /* Index into the string that we are reading. */
+  raw = edit = 0;      /* Not reading raw input by default. */
+  silent = 0;
+  arrayname = prompt = (char *)NULL;
+  fd = 0;              /* file descriptor to read from */
+
+#if defined (READLINE)
+  rlbuf = (char *)0;
+  rlind = 0;
+#endif
+
+  tmout = 0;           /* no timeout */
+  nr = nchars = input_is_tty = input_is_pipe = unbuffered_read = have_timeout = 0;
+  delim = '\n';                /* read until newline */
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "ersa:d:n:p:t:u:")) != -1)
+    {
+      switch (opt)
+       {
+       case 'r':
+         raw = 1;
+         break;
+       case 'p':
+         prompt = list_optarg;
+         break;
+       case 's':
+         silent = 1;
+         break;
+       case 'e':
+#if defined (READLINE)
+         edit = 1;
+#endif
+         break;
+#if defined (ARRAY_VARS)
+       case 'a':
+         arrayname = list_optarg;
+         break;
+#endif
+       case 't':
+         code = legal_number (list_optarg, &intval);
+         if (code == 0 || intval < 0 || intval != (unsigned int)intval)
+           {
+             builtin_error (_("%s: invalid timeout specification"), list_optarg);
+             return (EXECUTION_FAILURE);
+           }
+         else
+           {
+             have_timeout = 1;
+             tmout = intval;
+           }
+         break;
+       case 'n':
+         code = legal_number (list_optarg, &intval);
+         if (code == 0 || intval < 0 || intval != (int)intval)
+           {
+             sh_invalidnum (list_optarg);
+             return (EXECUTION_FAILURE);
+           }
+         else
+           nchars = intval;
+         break;
+       case 'u':
+         code = legal_number (list_optarg, &intval);
+         if (code == 0 || intval < 0 || intval != (int)intval)
+           {
+             builtin_error (_("%s: invalid file descriptor specification"), list_optarg);
+             return (EXECUTION_FAILURE);
+           }
+         else
+           fd = intval;
+         if (sh_validfd (fd) == 0)
+           {
+             builtin_error (_("%d: invalid file descriptor: %s"), fd, strerror (errno));
+             return (EXECUTION_FAILURE);
+           }
+         break;
+       case 'd':
+         delim = *list_optarg;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  /* `read -t 0 var' returns failure immediately.  XXX - should it test
+     whether input is available with select/FIONREAD, and fail if those
+     are unavailable? */
+  if (have_timeout && tmout == 0)
+    return (EXECUTION_FAILURE);
+
+  /* IF IFS is unset, we use the default of " \t\n". */
+  ifs_chars = getifs ();
+  if (ifs_chars == 0)          /* XXX - shouldn't happen */
+    ifs_chars = "";
+
+  input_string = (char *)xmalloc (size = 112); /* XXX was 128 */
+
+  /* $TMOUT, if set, is the default timeout for read. */
+  if (have_timeout == 0 && (e = get_string_value ("TMOUT")))
+    {
+      code = legal_number (e, &intval);
+      if (code == 0 || intval < 0 || intval != (unsigned int)intval)
+       tmout = 0;
+      else
+       tmout = intval;
+    }
+
+  begin_unwind_frame ("read_builtin");
+
+#if defined (BUFFERED_INPUT)
+  if (interactive == 0 && default_buffered_input >= 0 && fd_is_bash_input (fd))
+    sync_buffered_stream (default_buffered_input);
+#endif
+
+  input_is_tty = isatty (fd);
+  if (input_is_tty == 0)
+#ifndef __CYGWIN__
+    input_is_pipe = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
+#else
+    input_is_pipe = 1;
+#endif
+
+  /* If the -p, -e or -s flags were given, but input is not coming from the
+     terminal, turn them off. */
+  if ((prompt || edit || silent) && input_is_tty == 0)
+    {
+      prompt = (char *)NULL;
+      edit = silent = 0;
+    }
+
+#if defined (READLINE)
+  if (edit)
+    add_unwind_protect (xfree, rlbuf);
+#endif
+
+  if (prompt && edit == 0)
+    {
+      fprintf (stderr, "%s", prompt);
+      fflush (stderr);
+    }
+
+  pass_next = 0;       /* Non-zero signifies last char was backslash. */
+  saw_escape = 0;      /* Non-zero signifies that we saw an escape char */
+
+  if (tmout > 0)
+    {
+      /* Turn off the timeout if stdin is a regular file (e.g. from
+        input redirection). */
+      if ((fstat (fd, &tsb) < 0) || S_ISREG (tsb.st_mode))
+       tmout = 0;
+    }
+
+  if (tmout > 0)
+    {
+      code = setjmp (alrmbuf);
+      if (code)
+       {
+         run_unwind_frame ("read_builtin");
+         return (EXECUTION_FAILURE);
+       }
+      old_alrm = set_signal_handler (SIGALRM, sigalrm);
+      add_unwind_protect (reset_alarm, (char *)NULL);
+#if defined (READLINE)
+      if (edit)
+       add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
+#endif
+      alarm (tmout);
+    }
+
+  /* If we've been asked to read only NCHARS chars, or we're using some
+     character other than newline to terminate the line, do the right
+     thing to readline or the tty. */
+  if (nchars > 0 || delim != '\n')
+    {
+#if defined (READLINE)
+      if (edit)
+       {
+         if (nchars > 0)
+           {
+             unwind_protect_int (rl_num_chars_to_read);
+             rl_num_chars_to_read = nchars;
+           }
+         if (delim != '\n')
+           {
+             set_eol_delim (delim);
+             add_unwind_protect (reset_eol_delim, (char *)NULL);
+           }
+       }
+      else
+#endif
+      if (input_is_tty)
+       {
+         ttsave ();
+         if (silent)
+           ttcbreak ();
+         else
+           ttonechar ();
+         add_unwind_protect ((Function *)ttrestore, (char *)NULL);
+       }
+    }
+  else if (silent)     /* turn off echo but leave term in canonical mode */
+    {
+      ttsave ();
+      ttnoecho ();
+      add_unwind_protect ((Function *)ttrestore, (char *)NULL);
+    }
+
+  /* This *must* be the top unwind-protect on the stack, so the manipulation
+     of the unwind-protect stack after the realloc() works right. */
+  add_unwind_protect (xfree, input_string);
+  interrupt_immediately++;
+  terminate_immediately = 1;
+
+  unbuffered_read = (nchars > 0) || (delim != '\n') || input_is_pipe;
+
+#if defined (__CYGWIN__) && defined (O_TEXT)
+  setmode (0, O_TEXT);
+#endif
+
+  for (eof = retval = 0;;)
+    {
+#if defined (READLINE)
+      if (edit)
+       {
+         if (rlbuf && rlbuf[rlind] == '\0')
+           {
+             xfree (rlbuf);
+             rlbuf = (char *)0;
+           }
+         if (rlbuf == 0)
+           {
+             rlbuf = edit_line (prompt ? prompt : "");
+             rlind = 0;
+           }
+         if (rlbuf == 0)
+           {
+             eof = 1;
+             break;
+           }
+         c = rlbuf[rlind++];
+       }
+      else
+       {
+#endif
+
+      if (unbuffered_read)
+       retval = zread (fd, &c, 1);
+      else
+       retval = zreadc (fd, &c);
+
+      if (retval <= 0)
+       {
+         eof = 1;
+         break;
+       }
+
+#if defined (READLINE)
+       }
+#endif
+
+      if (i + 2 >= size)
+       {
+         input_string = (char *)xrealloc (input_string, size += 128);
+         remove_unwind_protect ();
+         add_unwind_protect (xfree, input_string);
+       }
+
+      /* If the next character is to be accepted verbatim, a backslash
+        newline pair still disappears from the input. */
+      if (pass_next)
+       {
+         pass_next = 0;
+         if (c == '\n')
+           i--;                /* back up over the CTLESC */
+         else
+           goto add_char;
+         continue;
+       }
+
+      if (c == '\\' && raw == 0)
+       {
+         pass_next++;
+         saw_escape++;
+         input_string[i++] = CTLESC;
+         continue;
+       }
+
+      if ((unsigned char)c == delim)
+       break;
+
+      if (c == CTLESC || c == CTLNUL)
+       {
+         saw_escape++;
+         input_string[i++] = CTLESC;
+       }
+
+add_char:
+      input_string[i++] = c;
+      nr++;
+
+      if (nchars > 0 && nr >= nchars)
+       break;
+    }
+  input_string[i] = '\0';
+
+#if 1
+  if (retval < 0)
+    {
+      builtin_error (_("read error: %d: %s"), fd, strerror (errno));
+      run_unwind_frame ("read_builtin");
+      return (EXECUTION_FAILURE);
+    }
+#endif
+
+  if (tmout > 0)
+    reset_alarm ();
+
+  if (nchars > 0 || delim != '\n')
+    {
+#if defined (READLINE)
+      if (edit)
+       {
+         if (nchars > 0)
+           rl_num_chars_to_read = 0;
+         if (delim != '\n')
+           reset_eol_delim ((char *)NULL);
+       }
+      else
+#endif
+      if (input_is_tty)
+       ttrestore ();
+    }
+  else if (silent)
+    ttrestore ();
+
+  if (unbuffered_read == 0)
+    zsyncfd (fd);
+
+  interrupt_immediately--;
+  terminate_immediately = 0;
+  discard_unwind_frame ("read_builtin");
+
+  retval = eof ? EXECUTION_FAILURE : EXECUTION_SUCCESS;
+
+#if defined (ARRAY_VARS)
+  /* If -a was given, take the string read, break it into a list of words,
+     an assign them to `arrayname' in turn. */
+  if (arrayname)
+    {
+      if (legal_identifier (arrayname) == 0)
+       {
+         sh_invalidid (arrayname);
+         xfree (input_string);
+         return (EXECUTION_FAILURE);
+       }
+
+      var = find_or_make_array_variable (arrayname, 1);
+      if (var == 0)
+       {
+         xfree (input_string);
+         return EXECUTION_FAILURE;     /* readonly or noassign */
+       }
+      array_flush (array_cell (var));
+
+      alist = list_string (input_string, ifs_chars, 0);
+      if (alist)
+       {
+         if (saw_escape)
+           dequote_list (alist);
+         else
+           word_list_remove_quoted_nulls (alist);
+         assign_array_var_from_word_list (var, alist, 0);
+         dispose_words (alist);
+       }
+      xfree (input_string);
+      return (retval);
+    }
+#endif /* ARRAY_VARS */ 
+
+  /* If there are no variables, save the text of the line read to the
+     variable $REPLY.  ksh93 strips leading and trailing IFS whitespace,
+     so that `read x ; echo "$x"' and `read ; echo "$REPLY"' behave the
+     same way, but I believe that the difference in behaviors is useful
+     enough to not do it.  Without the bash behavior, there is no way
+     to read a line completely without interpretation or modification
+     unless you mess with $IFS (e.g., setting it to the empty string).
+     If you disagree, change the occurrences of `#if 0' to `#if 1' below. */
+  if (list == 0)
+    {
+#if 0
+      orig_input_string = input_string;
+      for (t = input_string; ifs_chars && *ifs_chars && spctabnl(*t) && isifs(*t); t++)
+       ;
+      input_string = t;
+      input_string = strip_trailing_ifs_whitespace (input_string, ifs_chars, saw_escape);
+#endif
+
+      if (saw_escape)
+       {
+         t = dequote_string (input_string);
+         var = bind_variable ("REPLY", t, 0);
+         free (t);
+       }
+      else
+       var = bind_variable ("REPLY", input_string, 0);
+      VUNSETATTR (var, att_invisible);
+
+      free (input_string);
+      return (retval);
+    }
+
+  /* This code implements the Posix.2 spec for splitting the words
+     read and assigning them to variables. */
+  orig_input_string = input_string;
+
+  /* Remove IFS white space at the beginning of the input string.  If
+     $IFS is null, no field splitting is performed. */
+  for (t = input_string; ifs_chars && *ifs_chars && spctabnl(*t) && isifs(*t); t++)
+    ;
+  input_string = t;
+
+  for (; list->next; list = list->next)
+    {
+      varname = list->word->word;
+#if defined (ARRAY_VARS)
+      if (legal_identifier (varname) == 0 && valid_array_reference (varname) == 0)
+#else
+      if (legal_identifier (varname) == 0)
+#endif
+       {
+         sh_invalidid (varname);
+         xfree (orig_input_string);
+         return (EXECUTION_FAILURE);
+       }
+
+      /* If there are more variables than words read from the input,
+        the remaining variables are set to the empty string. */
+      if (*input_string)
+       {
+         /* This call updates INPUT_STRING. */
+         t = get_word_from_string (&input_string, ifs_chars, &e);
+         if (t)
+           *e = '\0';
+         /* Don't bother to remove the CTLESC unless we added one
+            somewhere while reading the string. */
+         if (t && saw_escape)
+           {
+             t1 = dequote_string (t);
+             var = bind_read_variable (varname, t1);
+             xfree (t1);
+           }
+         else
+           var = bind_read_variable (varname, t);
+       }
+      else
+       {
+         t = (char *)0;
+         var = bind_read_variable (varname, "");
+       }
+
+      FREE (t);
+      if (var == 0)
+       {
+         xfree (orig_input_string);
+         return (EXECUTION_FAILURE);
+       }
+
+      stupidly_hack_special_variables (varname);
+      VUNSETATTR (var, att_invisible);
+    }
+
+  /* Now assign the rest of the line to the last variable argument. */
+#if defined (ARRAY_VARS)
+  if (legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word) == 0)
+#else
+  if (legal_identifier (list->word->word) == 0)
+#endif
+    {
+      sh_invalidid (list->word->word);
+      xfree (orig_input_string);
+      return (EXECUTION_FAILURE);
+    }
+
+#if 0
+  /* This has to be done this way rather than using string_list
+     and list_string because Posix.2 says that the last variable gets the
+     remaining words and their intervening separators. */
+  input_string = strip_trailing_ifs_whitespace (input_string, ifs_chars, saw_escape);
+#else
+  /* Check whether or not the number of fields is exactly the same as the
+     number of variables. */
+  if (*input_string)
+    {
+      t1 = input_string;
+      t = get_word_from_string (&input_string, ifs_chars, &e);
+      if (*input_string == 0)
+       input_string = t;
+      else
+       input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape);
+    }
+#endif
+
+  if (saw_escape)
+    {
+      t = dequote_string (input_string);
+      var = bind_read_variable (list->word->word, t);
+      xfree (t);
+    }
+  else
+    var = bind_read_variable (list->word->word, input_string);
+  stupidly_hack_special_variables (list->word->word);
+  if (var)
+    VUNSETATTR (var, att_invisible);
+  xfree (orig_input_string);
+
+  return (retval);
+}
+
+static SHELL_VAR *
+bind_read_variable (name, value)
+     char *name, *value;
+{
+#if defined (ARRAY_VARS)
+  if (valid_array_reference (name) == 0)
+    return (bind_variable (name, value, 0));
+  else
+    return (assign_array_element (name, value, 0));
+#else /* !ARRAY_VARS */
+  return bind_variable (name, value, 0);
+#endif /* !ARRAY_VARS */
+}
+
+#if defined (READLINE)
+static rl_completion_func_t *old_attempted_completion_function = 0;
+
+static void
+reset_attempted_completion_function (cp)
+     char *cp;
+{
+  if (rl_attempted_completion_function == 0 && old_attempted_completion_function)
+    rl_attempted_completion_function = old_attempted_completion_function;
+}
+
+static char *
+edit_line (p)
+     char *p;
+{
+  char *ret;
+  int len;
+
+  if (bash_readline_initialized == 0)
+    initialize_readline ();
+
+  old_attempted_completion_function = rl_attempted_completion_function;
+  rl_attempted_completion_function = (rl_completion_func_t *)NULL;
+  ret = readline (p);
+  rl_attempted_completion_function = old_attempted_completion_function;
+  old_attempted_completion_function = (rl_completion_func_t *)NULL;
+
+  if (ret == 0)
+    return ret;
+  len = strlen (ret);
+  ret = (char *)xrealloc (ret, len + 2);
+  ret[len++] = delim;
+  ret[len] = '\0';
+  return ret;
+}
+
+static int old_delim_ctype;
+static rl_command_func_t *old_delim_func;
+static int old_newline_ctype;
+static rl_command_func_t *old_newline_func;
+
+static unsigned char delim_char;
+
+static void
+set_eol_delim (c)
+     int c;
+{
+  Keymap cmap;
+
+  if (bash_readline_initialized == 0)
+    initialize_readline ();
+  cmap = rl_get_keymap ();
+
+  /* Change newline to self-insert */
+  old_newline_ctype = cmap[RETURN].type;
+  old_newline_func =  cmap[RETURN].function;
+  cmap[RETURN].type = ISFUNC;
+  cmap[RETURN].function = rl_insert;
+
+  /* Bind the delimiter character to accept-line. */
+  old_delim_ctype = cmap[c].type;
+  old_delim_func = cmap[c].function;
+  cmap[c].type = ISFUNC;
+  cmap[c].function = rl_newline;
+
+  delim_char = c;
+}
+
+static void
+reset_eol_delim (cp)
+     char *cp;
+{
+  Keymap cmap;
+
+  cmap = rl_get_keymap ();
+
+  cmap[RETURN].type = old_newline_ctype;
+  cmap[RETURN].function = old_newline_func;
+
+  cmap[delim_char].type = old_delim_ctype;
+  cmap[delim_char].function = old_delim_func;
+}
+#endif
index e77e723a010386f9a40d260a5e00d43aae09dc53..5e4f6ca0ff8259ed43b27a1499c6e44f97b96faa 100644 (file)
@@ -61,6 +61,9 @@ extern int no_line_editing;
 $BUILTIN set
 $FUNCTION set_builtin
 $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
+Change the value of shell attributes and positional parameters, or display
+the names and values of shell variables.  Available
+shell options are:
     -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.
index d1086695a3d89171ccae84852ea464e9281f3d08..e77e723a010386f9a40d260a5e00d43aae09dc53 100644 (file)
@@ -60,7 +60,7 @@ extern int no_line_editing;
 
 $BUILTIN set
 $FUNCTION set_builtin
-$SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
+$SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option-name] [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.
index 28102bc472ffdcbc1ec93bca9e63e533370d0672..d4fe9871ef26fd0ac4ddd6c9f81798dee5aa0504 100644 (file)
@@ -1,7 +1,7 @@
 This file is setattr.def, from which is created setattr.c.
 It implements the builtins "export" and "readonly", in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -52,7 +52,7 @@ extern int declare_builtin __P((WORD_LIST *));
 
 $BUILTIN export
 $FUNCTION export_builtin
-$SHORT_DOC export [-nf] [name[=value] ...] or export -p
+$SHORT_DOC export [-fn] [name[=value] ...] or export -p
 NAMEs are marked for automatic export to the environment of
 subsequently executed commands.  If the -f option is given,
 the NAMEs refer to functions.  If no NAMEs are given, or if `-p'
diff --git a/builtins/setattr.def~ b/builtins/setattr.def~
new file mode 100644 (file)
index 0000000..90f8dcc
--- /dev/null
@@ -0,0 +1,441 @@
+This file is setattr.def, from which is created setattr.c.
+It implements the builtins "export" and "readonly", in Bash.
+
+Copyright (C) 1987-2006 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES setattr.c
+
+#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 "common.h"
+#include "bashgetopt.h"
+
+extern int posixly_correct;
+extern int array_needs_making;
+extern char *this_command_name;
+extern sh_builtin_func_t *this_shell_builtin;
+
+#ifdef ARRAY_VARS
+extern int declare_builtin __P((WORD_LIST *));
+#endif
+
+#define READONLY_OR_EXPORT \
+  (this_shell_builtin == readonly_builtin || this_shell_builtin == export_builtin)
+
+$BUILTIN export
+$FUNCTION export_builtin
+$SHORT_DOC export [-nf] [name[=value] ...] or export -p
+NAMEs are marked for automatic export to the environment of
+subsequently executed commands.  If the -f option is given,
+the NAMEs refer to functions.  If no NAMEs are given, or if `-p'
+is given, a list of all names that are exported in this shell is
+printed.  An argument of `-n' says to remove the export property
+from subsequent NAMEs.  An argument of `--' disables further option
+processing.
+$END
+
+/* For each variable name in LIST, make that variable appear in the
+   environment passed to simple commands.  If there is no LIST, then
+   print all such variables.  An argument of `-n' says to remove the
+   exported attribute from variables named in LIST.  An argument of
+  -f indicates that the names present in LIST refer to functions. */
+int
+export_builtin (list)
+     register WORD_LIST *list;
+{
+  return (set_or_show_attributes (list, att_exported, 0));
+}
+
+$BUILTIN readonly
+$FUNCTION readonly_builtin
+$SHORT_DOC readonly [-af] [name[=value] ...] or readonly -p
+The given NAMEs are marked readonly and the values of these NAMEs may
+not be changed by subsequent assignment.  If the -f option is given,
+then functions corresponding to the NAMEs are so marked.  If no
+arguments are given, or if `-p' is given, a list of all readonly names
+is printed.  The `-a' option means to treat each NAME as
+an array variable.  An argument of `--' disables further option
+processing.
+$END
+
+/* For each variable name in LIST, make that variable readonly.  Given an
+   empty LIST, print out all existing readonly variables. */
+int
+readonly_builtin (list)
+     register WORD_LIST *list;
+{
+  return (set_or_show_attributes (list, att_readonly, 0));
+}
+
+#if defined (ARRAY_VARS)
+#  define ATTROPTS     "afnp"
+#else
+#  define ATTROPTS     "fnp"
+#endif
+
+/* For each variable name in LIST, make that variable have the specified
+   ATTRIBUTE.  An arg of `-n' says to remove the attribute from the the
+   remaining names in LIST (doesn't work for readonly). */
+int
+set_or_show_attributes (list, attribute, nodefs)
+     register WORD_LIST *list;
+     int attribute, nodefs;
+{
+  register SHELL_VAR *var;
+  int assign, undo, functions_only, arrays_only, any_failed, assign_error, opt;
+  int aflags;
+  char *name;
+#if defined (ARRAY_VARS)
+  WORD_LIST *nlist, *tlist;
+  WORD_DESC *w;
+#endif
+
+  undo = functions_only = arrays_only = any_failed = assign_error = 0;
+  /* Read arguments from the front of the list. */
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, ATTROPTS)) != -1)
+    {
+      switch (opt)
+       {
+         case 'n':
+           undo = 1;
+           break;
+         case 'f':
+           functions_only = 1;
+           break;
+#if defined (ARRAY_VARS)
+         case 'a':
+            arrays_only = 1;
+            break;
+#endif
+         case 'p':
+           break;
+         default:
+           builtin_usage ();
+           return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  if (list)
+    {
+      if (attribute & att_exported)
+       array_needs_making = 1;
+
+      /* Cannot undo readonly status, silently disallowed. */
+      if (undo && (attribute & att_readonly))
+       attribute &= ~att_readonly;
+
+      while (list)
+       {
+         name = list->word->word;
+
+         if (functions_only)           /* xxx -f name */
+           {
+             var = find_function (name);
+             if (var == 0)
+               {
+                 builtin_error (_("%s: not a function"), name);
+                 any_failed++;
+               }
+             else
+               SETVARATTR (var, attribute, undo);
+
+             list = list->next;
+             continue;
+           }
+
+         /* xxx [-np] name[=value] */
+         assign = assignment (name, 0);
+
+         aflags = 0;
+         if (assign)
+           {
+             name[assign] = '\0';
+             if (name[assign - 1] == '+')
+               {
+                 aflags |= ASS_APPEND;
+                 name[assign - 1] = '\0';
+               }
+           }
+
+         if (legal_identifier (name) == 0)
+           {
+             sh_invalidid (name);
+             if (assign)
+               assign_error++;
+             else
+               any_failed++;
+             list = list->next;
+             continue;
+           }
+
+         if (assign)   /* xxx [-np] name=value */
+           {
+             name[assign] = '=';
+             if (aflags & ASS_APPEND)
+               name[assign - 1] = '+';
+#if defined (ARRAY_VARS)
+             /* Let's try something here.  Turn readonly -a xxx=yyy into
+                declare -ra xxx=yyy and see what that gets us. */
+             if (arrays_only)
+               {
+                 tlist = list->next;
+                 list->next = (WORD_LIST *)NULL;
+                 w = make_word ("-ra");
+                 nlist = make_word_list (w, list);
+                 opt = declare_builtin (nlist);
+                 if (opt != EXECUTION_SUCCESS)
+                   assign_error++;
+                 list->next = tlist;
+                 dispose_word (w);
+                 free (nlist);
+               }
+             else
+#endif
+             /* This word has already been expanded once with command
+                and parameter expansion.  Call do_assignment_no_expand (),
+                which does not do command or parameter substitution.  If
+                the assignment is not performed correctly, flag an error. */
+             if (do_assignment_no_expand (name) == 0)
+               assign_error++;
+             name[assign] = '\0';
+             if (aflags & ASS_APPEND)
+               name[assign - 1] = '\0';
+           }
+
+         set_var_attribute (name, attribute, undo);
+         list = list->next;
+       }
+    }
+  else
+    {
+      SHELL_VAR **variable_list;
+      register int i;
+
+      if ((attribute & att_function) || functions_only)
+       {
+         variable_list = all_shell_functions ();
+         if (attribute != att_function)
+           attribute &= ~att_function; /* so declare -xf works, for example */
+       }
+      else
+       variable_list = all_shell_variables ();
+
+#if defined (ARRAY_VARS)
+      if (attribute & att_array)
+       {
+         arrays_only++;
+         if (attribute != att_array)
+           attribute &= ~att_array;
+       }
+#endif
+
+      if (variable_list)
+       {
+         for (i = 0; var = variable_list[i]; i++)
+           {
+#if defined (ARRAY_VARS)
+             if (arrays_only && array_p (var) == 0)
+               continue;
+#endif
+             if ((var->attributes & attribute))
+               show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
+           }
+         free (variable_list);
+       }
+    }
+
+  return (assign_error ? EX_BADASSIGN
+                      : ((any_failed == 0) ? EXECUTION_SUCCESS
+                                           : EXECUTION_FAILURE));
+}
+
+/* Show the attributes for shell variable VAR.  If NODEFS is non-zero,
+   don't show function definitions along with the name.  If PATTR is
+   non-zero, it indicates we're being called from `export' or `readonly'.
+   In POSIX mode, this prints the name of the calling builtin (`export'
+   or `readonly') instead of `declare', and doesn't print function defs
+   when called by `export' or `readonly'. */
+int
+show_var_attributes (var, pattr, nodefs)
+     SHELL_VAR *var;
+     int pattr, nodefs;
+{
+  char flags[8], *x;
+  int i;
+
+  i = 0;
+
+  /* pattr == 0 means we are called from `declare'. */
+  if (pattr == 0 || posixly_correct == 0)
+    {
+#if defined (ARRAY_VARS)
+      if (array_p (var))
+       flags[i++] = 'a';
+#endif
+
+      if (function_p (var))
+       flags[i++] = 'f';
+
+      if (integer_p (var))
+       flags[i++] = 'i';
+
+      if (readonly_p (var))
+       flags[i++] = 'r';
+
+      if (trace_p (var))
+       flags[i++] = 't';
+
+      if (exported_p (var))
+       flags[i++] = 'x';
+    }
+  else
+    {
+#if defined (ARRAY_VARS)
+      if (array_p (var))
+       flags[i++] = 'a';
+#endif
+
+      if (function_p (var))
+       flags[i++] = 'f';
+    }
+
+  flags[i] = '\0';
+
+  /* If we're printing functions with definitions, print the function def
+     first, then the attributes, instead of printing output that can't be
+     reused as input to recreate the current state. */
+  if (function_p (var) && nodefs == 0 && (pattr == 0 || posixly_correct == 0))
+    {
+      printf ("%s\n", named_function_string (var->name, function_cell (var), 1));
+      nodefs++;
+      if (pattr == 0 && i == 1 && flags[0] == 'f')
+       return 0;               /* don't print `declare -f name' */
+    }
+
+  if (pattr == 0 || posixly_correct == 0)
+    printf ("declare -%s ", i ? flags : "-");
+  else if (i)
+    printf ("%s -%s ", this_command_name, flags);
+  else
+    printf ("%s ", this_command_name);
+
+#if defined (ARRAY_VARS)
+ if (array_p (var))
+    print_array_assignment (var, 1);
+  else
+#endif
+  /* force `readonly' and `export' to not print out function definitions
+     when in POSIX mode. */
+  if (nodefs || (function_p (var) && pattr != 0 && posixly_correct))
+    printf ("%s\n", var->name);
+  else if (function_p (var))
+    printf ("%s\n", named_function_string (var->name, function_cell (var), 1));
+  else if (invisible_p (var))
+    printf ("%s\n", var->name);
+  else
+    {
+      x = sh_double_quote (var_isset (var) ? value_cell (var) : "");
+      printf ("%s=%s\n", var->name, x);
+      free (x);
+    }
+  return (0);
+}
+
+int
+show_name_attributes (name, nodefs)
+     char *name;
+     int nodefs;
+{
+  SHELL_VAR *var;
+
+  var = find_variable_internal (name, 1);
+
+  if (var && invisible_p (var) == 0)
+    {
+      show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
+      return (0);
+    }
+  else
+    return (1);
+}
+
+void
+set_var_attribute (name, attribute, undo)
+     char *name;
+     int attribute, undo;
+{
+  SHELL_VAR *var, *tv;
+  char *tvalue;
+
+  if (undo)
+    var = find_variable (name);
+  else
+    {
+      tv = find_tempenv_variable (name);
+      /* XXX -- need to handle case where tv is a temp variable in a
+        function-scope context, since function_env has been merged into
+        the local variables table. */
+      if (tv && tempvar_p (tv))
+       {
+         tvalue = var_isset (tv) ? savestring (value_cell (tv)) : savestring ("");
+
+         var = bind_variable (tv->name, tvalue, 0);
+         var->attributes |= tv->attributes & ~att_tempvar;
+         VSETATTR (tv, att_propagate);
+         if (var->context != 0)
+           VSETATTR (var, att_propagate);
+         SETVARATTR (tv, attribute, undo);     /* XXX */
+
+         stupidly_hack_special_variables (tv->name);
+
+         free (tvalue);
+       }
+      else
+       {
+         var = find_variable_internal (name, 0);
+         if (var == 0)
+           {
+             var = bind_variable (name, (char *)NULL, 0);
+             VSETATTR (var, att_invisible);
+           }
+         else if (var->context != 0)
+           VSETATTR (var, att_propagate);
+       }
+    }
+
+  if (var)
+    SETVARATTR (var, attribute, undo);
+
+  if (var && (exported_p (var) || (attribute & att_exported)))
+    array_needs_making++;      /* XXX */
+}
index ae100ace47c2b3cd3662bccb133a708d2a94d002..7e7508ac5d10617a283f13c2766747448d4b1836 100644 (file)
@@ -1,7 +1,7 @@
 This file is shopt.def, from which is created shopt.c.
 It implements the Bash `shopt' builtin.
 
-Copyright (C) 1994-2005 Free Software Foundation, Inc.
+Copyright (C) 1994-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,7 +23,7 @@ $PRODUCES shopt.c
 
 $BUILTIN shopt
 $FUNCTION shopt_builtin
-$SHORT_DOC shopt [-pqsu] [-o long-option] optname [optname...]
+$SHORT_DOC shopt [-pqsu] [-o] [optname ...]
 Toggle the values of variables controlling optional behavior.
 The -s flag means to enable (set) each OPTNAME; the -u flag
 unsets each OPTNAME.  The -q flag suppresses output; the exit
diff --git a/builtins/shopt.def~ b/builtins/shopt.def~
new file mode 100644 (file)
index 0000000..dce7745
--- /dev/null
@@ -0,0 +1,540 @@
+This file is shopt.def, from which is created shopt.c.
+It implements the Bash `shopt' builtin.
+
+Copyright (C) 1994-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES shopt.c
+
+$BUILTIN shopt
+$FUNCTION shopt_builtin
+$SHORT_DOC shopt [-pqsu] [-o] [optname ...]
+Toggle the values of variables controlling optional behavior.
+The -s flag means to enable (set) each OPTNAME; the -u flag
+unsets each OPTNAME.  The -q flag suppresses output; the exit
+status indicates whether each OPTNAME is set or unset.  The -o
+option restricts the OPTNAMEs to those defined for use with
+`set -o'.  With no options, or with the -p option, a list of all
+settable options is displayed, with an indication of whether or
+not each is set.
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include <stdio.h>
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../flags.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+#define UNSETOPT       0
+#define SETOPT         1
+
+#define OPTFMT         "%-15s\t%s\n"
+
+extern int allow_null_glob_expansion, fail_glob_expansion, glob_dot_filenames;
+extern int cdable_vars, mail_warning, source_uses_path;
+extern int no_exit_on_failed_exec, print_shift_error;
+extern int check_hashed_filenames, promptvars;
+extern int cdspelling, expand_aliases;
+extern int extended_quote;
+extern int check_window_size;
+extern int glob_ignore_case, match_ignore_case;
+extern int hup_on_exit;
+extern int xpg_echo;
+extern int gnu_error_format;
+
+#if defined (EXTENDED_GLOB)
+extern int extended_glob;
+#endif
+
+#if defined (HISTORY)
+extern int literal_history, command_oriented_history;
+extern int force_append_history;
+#endif
+
+#if defined (READLINE)
+extern int hist_verify, history_reediting, perform_hostname_completion;
+extern int no_empty_command_completion;
+extern int force_fignore;
+extern int enable_hostname_completion __P((int));
+#endif
+
+#if defined (PROGRAMMABLE_COMPLETION)
+extern int prog_completion_enabled;
+#endif
+
+#if defined (RESTRICTED_SHELL)
+extern char *shell_name;
+#endif
+
+#if defined (DEBUGGER)
+extern int debugging_mode;
+#endif
+
+static void shopt_error __P((char *));
+
+static int set_shellopts_after_change __P((int));
+
+#if defined (RESTRICTED_SHELL)
+static int set_restricted_shell __P((int));
+#endif
+
+static int shopt_login_shell;
+
+typedef int shopt_set_func_t __P((int));
+
+static struct {
+  char *name;
+  int  *value;
+  shopt_set_func_t *set_func;
+} shopt_vars[] = {
+  { "cdable_vars", &cdable_vars, (shopt_set_func_t *)NULL },
+  { "cdspell", &cdspelling, (shopt_set_func_t *)NULL },
+  { "checkhash", &check_hashed_filenames, (shopt_set_func_t *)NULL },
+  { "checkwinsize", &check_window_size, (shopt_set_func_t *)NULL },
+#if defined (HISTORY)
+  { "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL },
+#endif
+  { "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL },
+  { "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL },
+  { "expand_aliases", &expand_aliases, (shopt_set_func_t *)NULL },
+#if defined (DEBUGGER)
+  { "extdebug", &debugging_mode, (shopt_set_func_t *)NULL },
+#endif
+#if defined (EXTENDED_GLOB)
+  { "extglob", &extended_glob, (shopt_set_func_t *)NULL },
+#endif
+  { "extquote", &extended_quote, (shopt_set_func_t *)NULL },
+  { "failglob", &fail_glob_expansion, (shopt_set_func_t *)NULL },
+#if defined (READLINE)
+  { "force_fignore", &force_fignore, (shopt_set_func_t *)NULL },
+#endif
+  { "gnu_errfmt", &gnu_error_format, (shopt_set_func_t *)NULL },
+#if defined (HISTORY)
+  { "histappend", &force_append_history, (shopt_set_func_t *)NULL },
+#endif
+#if defined (READLINE)
+  { "histreedit", &history_reediting, (shopt_set_func_t *)NULL },
+  { "histverify", &hist_verify, (shopt_set_func_t *)NULL },
+  { "hostcomplete", &perform_hostname_completion, enable_hostname_completion },
+#endif
+  { "huponexit", &hup_on_exit, (shopt_set_func_t *)NULL },
+  { "interactive_comments", &interactive_comments, set_shellopts_after_change },
+#if defined (HISTORY)
+  { "lithist", &literal_history, (shopt_set_func_t *)NULL },
+#endif
+  { "login_shell", &shopt_login_shell, set_login_shell },
+  { "mailwarn", &mail_warning, (shopt_set_func_t *)NULL },
+#if defined (READLINE)
+  { "no_empty_cmd_completion", &no_empty_command_completion, (shopt_set_func_t *)NULL },
+#endif
+  { "nocaseglob", &glob_ignore_case, (shopt_set_func_t *)NULL },
+  { "nocasematch", &match_ignore_case, (shopt_set_func_t *)NULL },
+  { "nullglob",        &allow_null_glob_expansion, (shopt_set_func_t *)NULL },
+#if defined (PROGRAMMABLE_COMPLETION)
+  { "progcomp", &prog_completion_enabled, (shopt_set_func_t *)NULL },
+#endif
+  { "promptvars", &promptvars, (shopt_set_func_t *)NULL },
+#if defined (RESTRICTED_SHELL)
+  { "restricted_shell", &restricted_shell, set_restricted_shell },
+#endif
+  { "shift_verbose", &print_shift_error, (shopt_set_func_t *)NULL },
+  { "sourcepath", &source_uses_path, (shopt_set_func_t *)NULL },
+  { "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL },
+  { (char *)0, (int *)0, (shopt_set_func_t *)NULL }
+};
+
+static char *on = "on";
+static char *off = "off";
+
+static int find_shopt __P((char *));
+static int toggle_shopts __P((int, WORD_LIST *, int));
+static void print_shopt __P((char *, int, int));
+static int list_shopts __P((WORD_LIST *, int));
+static int list_some_shopts __P((int, int));
+static int list_shopt_o_options __P((WORD_LIST *, int));
+static int list_some_o_options __P((int, int));
+static int set_shopt_o_options __P((int, WORD_LIST *, int));
+
+#define SFLAG  0x01
+#define UFLAG  0x02
+#define QFLAG  0x04
+#define OFLAG  0x08
+#define PFLAG  0x10
+
+int
+shopt_builtin (list)
+     WORD_LIST *list;
+{
+  int opt, flags, rval;
+
+  flags = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "psuoq")) != -1)
+    {
+      switch (opt)
+       {
+       case 's':
+         flags |= SFLAG;
+         break;
+       case 'u':
+         flags |= UFLAG;
+         break;
+       case 'q':
+         flags |= QFLAG;
+         break;
+       case 'o':
+         flags |= OFLAG;
+         break;
+       case 'p':
+         flags |= PFLAG;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  if ((flags & (SFLAG|UFLAG)) == (SFLAG|UFLAG))
+    {
+      builtin_error (_("cannot set and unset shell options simultaneously"));
+      return (EXECUTION_FAILURE);
+    }
+
+  rval = EXECUTION_SUCCESS;
+  if ((flags & OFLAG) && ((flags & (SFLAG|UFLAG)) == 0))       /* shopt -o */
+    rval = list_shopt_o_options (list, flags);
+  else if (list && (flags & OFLAG))            /* shopt -so args */
+    rval = set_shopt_o_options ((flags & SFLAG) ? FLAG_ON : FLAG_OFF, list, flags & QFLAG);
+  else if (flags & OFLAG)      /* shopt -so */
+    rval = list_some_o_options ((flags & SFLAG) ? 1 : 0, flags);
+  else if (list && (flags & (SFLAG|UFLAG)))    /* shopt -su args */
+    rval = toggle_shopts ((flags & SFLAG) ? SETOPT : UNSETOPT, list, flags & QFLAG);
+  else if ((flags & (SFLAG|UFLAG)) == 0)       /* shopt [args] */
+    rval = list_shopts (list, flags);
+  else                                         /* shopt -su */
+    rval = list_some_shopts ((flags & SFLAG) ? SETOPT : UNSETOPT, flags);
+  return (rval);
+}
+
+/* Reset the options managed by `shopt' to the values they would have at
+   shell startup. */
+void
+reset_shopt_options ()
+{
+  allow_null_glob_expansion = glob_dot_filenames = 0;
+  cdable_vars = mail_warning = 0;
+  no_exit_on_failed_exec = print_shift_error = 0;
+  check_hashed_filenames = cdspelling = expand_aliases = check_window_size = 0;
+
+  source_uses_path = promptvars = 1;
+
+#if defined (EXTENDED_GLOB)
+  extended_glob = 0;
+#endif
+
+#if defined (HISTORY)
+  literal_history = force_append_history = 0;
+  command_oriented_history = 1;
+#endif
+
+#if defined (READLINE)
+  hist_verify = history_reediting = 0;
+  perform_hostname_completion = 1;
+#endif
+
+  shopt_login_shell = login_shell;
+}
+
+static int
+find_shopt (name)
+     char *name;
+{
+  int i;
+
+  for (i = 0; shopt_vars[i].name; i++)
+    if (STREQ (name, shopt_vars[i].name))
+      return i;
+  return -1;
+}
+
+static void
+shopt_error (s)
+     char *s;
+{
+  builtin_error (_("%s: invalid shell option name"), s);
+}
+
+static int
+toggle_shopts (mode, list, quiet)
+     int mode;
+     WORD_LIST *list;
+     int quiet;
+{
+  WORD_LIST *l;
+  int ind, rval;
+
+  for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
+    {
+      ind = find_shopt (l->word->word);
+      if (ind < 0)
+       {
+         shopt_error (l->word->word);
+         rval = EXECUTION_FAILURE;
+       }
+      else
+       {
+         *shopt_vars[ind].value = mode;        /* 1 for set, 0 for unset */
+         if (shopt_vars[ind].set_func)
+           (*shopt_vars[ind].set_func) (mode);
+       }
+    }
+  return (rval);
+}
+
+static void
+print_shopt (name, val, flags)
+     char *name;
+     int val, flags;
+{
+  if (flags & PFLAG)
+    printf ("shopt %s %s\n", val ? "-s" : "-u", name);
+  else
+    printf (OPTFMT, name, val ? on : off);
+}
+
+/* List the values of all or any of the `shopt' options.  Returns 0 if
+   all were listed or all variables queried were on; 1 otherwise. */
+static int
+list_shopts (list, flags)
+     WORD_LIST *list;
+     int flags;
+{
+  WORD_LIST *l;
+  int i, val, rval;
+
+  if (list == 0)
+    {
+      for (i = 0; shopt_vars[i].name; i++)
+       {
+         val = *shopt_vars[i].value;
+         if ((flags & QFLAG) == 0)
+           print_shopt (shopt_vars[i].name, val, flags);
+       }
+      return (EXECUTION_SUCCESS);
+    }
+
+  for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
+    {
+      i = find_shopt (l->word->word);
+      if (i < 0)
+       {
+         shopt_error (l->word->word);
+         rval = EXECUTION_FAILURE;
+         continue;
+       }
+      val = *shopt_vars[i].value;
+      if (val == 0)
+       rval = EXECUTION_FAILURE;
+      if ((flags & QFLAG) == 0)
+       print_shopt (l->word->word, val, flags);
+    }
+
+  return (rval);
+}
+
+static int
+list_some_shopts (mode, flags)
+     int mode, flags;
+{
+  int val, i;
+
+  for (i = 0; shopt_vars[i].name; i++)
+    {
+      val = *shopt_vars[i].value;
+      if (((flags & QFLAG) == 0) && mode == val)
+       print_shopt (shopt_vars[i].name, val, flags);
+    }
+  return (EXECUTION_SUCCESS);
+}
+
+static int
+list_shopt_o_options (list, flags)
+     WORD_LIST *list;
+     int flags;
+{
+  WORD_LIST *l;
+  int val, rval;
+
+  if (list == 0)
+    {
+      if ((flags & QFLAG) == 0)
+       list_minus_o_opts (-1, (flags & PFLAG));
+      return (EXECUTION_SUCCESS);
+    }
+
+  for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
+    {
+      val = minus_o_option_value (l->word->word);
+      if (val == -1)
+       {
+         sh_invalidoptname (l->word->word);
+         rval = EXECUTION_FAILURE;
+         continue;
+       }
+      if (val == 0)
+       rval = EXECUTION_FAILURE;
+      if ((flags & QFLAG) == 0)
+       {
+         if (flags & PFLAG)
+           printf ("set %co %s\n", val ? '-' : '+', l->word->word);
+         else
+           printf (OPTFMT, l->word->word, val ? on : off);
+       }
+    }
+  return (rval);
+}
+
+static int
+list_some_o_options (mode, flags)
+     int mode, flags;
+{
+  if ((flags & QFLAG) == 0)
+    list_minus_o_opts (mode, (flags & PFLAG));
+  return (EXECUTION_SUCCESS);
+}
+
+static int
+set_shopt_o_options (mode, list, quiet)
+     int mode;
+     WORD_LIST *list;
+     int quiet;
+{
+  WORD_LIST *l;
+  int rval;
+
+  for (l = list, rval = EXECUTION_SUCCESS; l; l = l->next)
+    {
+      if (set_minus_o_option (mode, l->word->word) == EXECUTION_FAILURE)
+       rval = EXECUTION_FAILURE;
+    }
+  set_shellopts ();
+  return rval;
+}
+
+/* If we set or unset interactive_comments with shopt, make sure the
+   change is reflected in $SHELLOPTS. */
+static int
+set_shellopts_after_change (mode)
+     int mode;
+{
+  set_shellopts ();
+  return (0);
+}
+
+#if defined (RESTRICTED_SHELL)
+/* Don't allow the value of restricted_shell to be modified. */
+
+static int
+set_restricted_shell (mode)
+     int mode;
+{
+  static int save_restricted = -1;
+
+  if (save_restricted == -1)
+    save_restricted = shell_is_restricted (shell_name);
+
+  restricted_shell = save_restricted;
+  return (0);
+}
+#endif /* RESTRICTED_SHELL */
+
+/* Not static so shell.c can call it to initialize shopt_login_shell */
+int
+set_login_shell (mode)
+     int mode;
+{
+  shopt_login_shell = login_shell != 0;
+  return (0);
+}
+
+char **
+get_shopt_options ()
+{
+  char **ret;
+  int n, i;
+
+  n = sizeof (shopt_vars) / sizeof (shopt_vars[0]);
+  ret = strvec_create (n + 1);
+  for (i = 0; shopt_vars[i].name; i++)
+    ret[i] = savestring (shopt_vars[i].name);
+  ret[i] = (char *)NULL;
+  return ret;
+}
+
+/*
+ * External interface for other parts of the shell.  NAME is a string option;
+ * MODE is 0 if we want to unset an option; 1 if we want to set an option.
+ * REUSABLE is 1 if we want to print output in a form that may be reused.
+ */
+int
+shopt_setopt (name, mode)
+     char *name;
+     int mode;
+{
+  WORD_LIST *wl;
+  int r;
+
+  wl = add_string_to_list (name, (WORD_LIST *)NULL);
+  r = toggle_shopts (mode, wl, 0);
+  dispose_words (wl);
+  return r;
+}
+
+int
+shopt_listopt (name, reusable)
+     char *name;
+     int reusable;
+{
+  int i;
+
+  if (name == 0)
+    return (list_shopts ((WORD_LIST *)NULL, reusable ? PFLAG : 0));
+
+  i = find_shopt (name);
+  if (i < 0)
+    {
+      shopt_error (name);
+      return (EXECUTION_FAILURE);
+    }
+
+  print_shopt (name, *shopt_vars[i].value, reusable ? PFLAG : 0);
+  return (EXECUTION_SUCCESS);
+}
index 2735791e4ccd8216b897b015762f521984a5624a..9e7d763617920ceb4a8f1ca529e17e04674157c8 100644 (file)
@@ -23,14 +23,14 @@ $PRODUCES trap.c
 
 $BUILTIN trap
 $FUNCTION trap_builtin
-$SHORT_DOC trap [-lp] [arg signal_spec ...]
+$SHORT_DOC trap [-lp] [[arg] signal_spec ...]
 The command ARG is to be read and executed when the shell receives
 signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
 is supplied) or `-', each specified signal is reset to its original
 value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
 shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)
 the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC
-is DEBUG, ARG is executed after every simple command.  If the`-p' option
+is DEBUG, ARG is executed before every simple command.  If the`-p' option
 is supplied then the trap commands associated with each SIGNAL_SPEC are
 displayed.  If no arguments are supplied or if only `-p' is given, trap
 prints the list of commands associated with each signal.  Each SIGNAL_SPEC
diff --git a/builtins/trap.def~ b/builtins/trap.def~
new file mode 100644 (file)
index 0000000..2735791
--- /dev/null
@@ -0,0 +1,268 @@
+This file is trap.def, from which is created trap.c.
+It implements the builtin "trap" in Bash.
+
+Copyright (C) 1987-2006 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES trap.c
+
+$BUILTIN trap
+$FUNCTION trap_builtin
+$SHORT_DOC trap [-lp] [arg signal_spec ...]
+The command ARG is to be read and executed when the shell receives
+signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
+is supplied) or `-', each specified signal is reset to its original
+value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
+shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)
+the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC
+is DEBUG, ARG is executed after every simple command.  If the`-p' option
+is supplied then the trap commands associated with each SIGNAL_SPEC are
+displayed.  If no arguments are supplied or if only `-p' is given, trap
+prints the list of commands associated with each signal.  Each SIGNAL_SPEC
+is either a signal name in <signal.h> or a signal number.  Signal names
+are case insensitive and the SIG prefix is optional.  `trap -l' prints
+a list of signal names and their corresponding numbers.  Note that a
+signal can be sent to the shell with "kill -signal $$".
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashtypes.h"
+#include <signal.h>
+#include <stdio.h>
+#include "../bashansi.h"
+
+#include "../shell.h"
+#include "../trap.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+static void showtrap __P((int));
+static int display_traps __P((WORD_LIST *));
+
+/* The trap command:
+
+   trap <arg> <signal ...>
+   trap <signal ...>
+   trap -l
+   trap -p [sigspec ...]
+   trap [--]
+
+   Set things up so that ARG is executed when SIGNAL(s) N is recieved.
+   If ARG is the empty string, then ignore the SIGNAL(s).  If there is
+   no ARG, then set the trap for SIGNAL(s) to its original value.  Just
+   plain "trap" means to print out the list of commands associated with
+   each signal number.  Single arg of "-l" means list the signal names. */
+
+/* Possible operations to perform on the list of signals.*/
+#define SET 0                  /* Set this signal to first_arg. */
+#define REVERT 1               /* Revert to this signals original value. */
+#define IGNORE 2               /* Ignore this signal. */
+
+extern int posixly_correct;
+
+int
+trap_builtin (list)
+     WORD_LIST *list;
+{
+  int list_signal_names, display, result, opt;
+
+  list_signal_names = display = 0;
+  result = EXECUTION_SUCCESS;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "lp")) != -1)
+    {
+      switch (opt)
+       {
+       case 'l':
+         list_signal_names++;
+         break;
+       case 'p':
+         display++;
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  opt = DSIG_NOCASE|DSIG_SIGPREFIX;    /* flags for decode_signal */
+
+  if (list_signal_names)
+    return (display_signal_list ((WORD_LIST *)NULL, 1));
+  else if (display || list == 0)
+    return (display_traps (list));
+  else
+    {
+      char *first_arg;
+      int operation, sig, first_signal;
+
+      operation = SET;
+      first_arg = list->word->word;
+      first_signal = first_arg && *first_arg && all_digits (first_arg) && signal_object_p (first_arg, opt);
+
+      /* Backwards compatibility.  XXX - question about whether or not we
+        should throw an error if an all-digit argument doesn't correspond
+        to a valid signal number (e.g., if it's `50' on a system with only
+        32 signals).  */
+      if (first_signal)
+       operation = REVERT;
+      /* When in posix mode, the historical behavior of looking for a
+        missing first argument is disabled.  To revert to the original
+        signal handling disposition, use `-' as the first argument. */
+      else if (posixly_correct == 0 && first_arg && *first_arg &&
+               (*first_arg != '-' || first_arg[1]) &&
+               signal_object_p (first_arg, opt) && list->next == 0)
+       operation = REVERT;
+      else
+       {
+         list = list->next;
+         if (list == 0)
+           {
+             builtin_usage ();
+             return (EX_USAGE);
+           }
+         else if (*first_arg == '\0')
+           operation = IGNORE;
+         else if (first_arg[0] == '-' && !first_arg[1])
+           operation = REVERT;
+       }
+
+      while (list)
+       {
+         sig = decode_signal (list->word->word, opt);
+
+         if (sig == NO_SIG)
+           {
+             sh_invalidsig (list->word->word);
+             result = EXECUTION_FAILURE;
+           }
+         else
+           {
+             switch (operation)
+               {
+                 case SET:
+                   set_signal (sig, first_arg);
+                   break;
+
+                 case REVERT:
+                   restore_default_signal (sig);
+
+                   /* Signals that the shell treats specially need special
+                      handling. */
+                   switch (sig)
+                     {
+                     case SIGINT:
+                       if (interactive)
+                         set_signal_handler (SIGINT, sigint_sighandler);
+                       else
+                         set_signal_handler (SIGINT, termsig_sighandler);
+                       break;
+
+                     case SIGQUIT:
+                       /* Always ignore SIGQUIT. */
+                       set_signal_handler (SIGQUIT, SIG_IGN);
+                       break;
+                     case SIGTERM:
+#if defined (JOB_CONTROL)
+                     case SIGTTIN:
+                     case SIGTTOU:
+                     case SIGTSTP:
+#endif /* JOB_CONTROL */
+                       if (interactive)
+                         set_signal_handler (sig, SIG_IGN);
+                       break;
+                     }
+                   break;
+
+                 case IGNORE:
+                   ignore_signal (sig);
+                   break;
+               }
+           }
+         list = list->next;
+       }
+    }
+
+  return (result);
+}
+
+static void
+showtrap (i)
+     int i;
+{
+  char *t, *p, *sn;
+
+  p = trap_list[i];
+  if (p == (char *)DEFAULT_SIG)
+    return;
+
+  t = (p == (char *)IGNORE_SIG) ? (char *)NULL : sh_single_quote (p);
+  sn = signal_name (i);
+  /* Make sure that signals whose names are unknown (for whatever reason)
+     are printed as signal numbers. */
+  if (STREQN (sn, "SIGJUNK", 7) || STREQN (sn, "unknown", 7))
+    printf ("trap -- %s %d\n", t ? t : "''", i);
+  else if (posixly_correct)
+    {
+      if (STREQN (sn, "SIG", 3))
+       printf ("trap -- %s %s\n", t ? t : "''", sn+3);
+      else
+       printf ("trap -- %s %s\n", t ? t : "''", sn);
+    }
+  else
+    printf ("trap -- %s %s\n", t ? t : "''", sn);
+
+  FREE (t);
+}
+
+static int
+display_traps (list)
+     WORD_LIST *list;
+{
+  int result, i;
+
+  if (list == 0)
+    {
+      for (i = 0; i < BASH_NSIG; i++)
+       showtrap (i);
+      return (EXECUTION_SUCCESS);
+    }
+
+  for (result = EXECUTION_SUCCESS; list; list = list->next)
+    {
+      i = decode_signal (list->word->word, DSIG_NOCASE|DSIG_SIGPREFIX);
+      if (i == NO_SIG)
+       {
+         sh_invalidsig (list->word->word);
+         result = EXECUTION_FAILURE;
+       }
+      else
+       showtrap (i);
+    }
+
+  return (result);
+}
index d03ccb2d91bc7260c098fa4d8ccfd007531a5175..39a43162b921b18d23e9a90cd3cf1d29f7215145 100644 (file)
@@ -390,7 +390,7 @@ describe_command (command, dflags)
       if (dflags & CDESC_TYPE)
        puts ("file");
       else if (dflags & CDESC_SHORTDESC)
-       printf ("%s is %s\n", command, full_path);
+       printf (_("%s is %s\n"), command, full_path);
       else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY))
        printf ("%s\n", full_path);
 
diff --git a/builtins/type.def~ b/builtins/type.def~
new file mode 100644 (file)
index 0000000..d03ccb2
--- /dev/null
@@ -0,0 +1,405 @@
+This file is type.def, from which is created type.c.
+It implements the builtin "type" in Bash.
+
+Copyright (C) 1987-2002 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$PRODUCES type.c
+
+$BUILTIN type
+$FUNCTION type_builtin
+$SHORT_DOC type [-afptP] name [name ...]
+For each NAME, indicate how it would be interpreted if used as a
+command name.
+
+If the -t option is used, `type' outputs a single word which is one of
+`alias', `keyword', `function', `builtin', `file' or `', if NAME is an
+alias, shell reserved word, shell function, shell builtin, disk file,
+or unfound, respectively.
+
+If the -p flag is used, `type' either returns the name of the disk
+file that would be executed, or nothing if `type -t NAME' would not
+return `file'.
+
+If the -a flag is used, `type' displays all of the places that contain
+an executable named `file'.  This includes aliases, builtins, and
+functions, if and only if the -p flag is not also used.
+
+The -f flag suppresses shell function lookup.
+
+The -P flag forces a PATH search for each NAME, even if it is an alias,
+builtin, or function, and returns the name of the disk file that would
+be executed.
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include "posixstat.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include "../bashansi.h"
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "../findcmd.h"
+#include "../hashcmd.h"
+
+#if defined (ALIAS)
+#include "../alias.h"
+#endif /* ALIAS */
+
+#include "common.h"
+#include "bashgetopt.h"
+
+extern int find_reserved_word __P((char *));
+
+extern char *this_command_name;
+extern int expand_aliases, posixly_correct;
+
+/* For each word in LIST, find out what the shell is going to do with
+   it as a simple command. i.e., which file would this shell use to
+   execve, or if it is a builtin command, or an alias.  Possible flag
+   arguments:
+       -t              Returns the "type" of the object, one of
+                       `alias', `keyword', `function', `builtin',
+                       or `file'.
+
+       -p              Returns the pathname of the file if -type is
+                       a file.
+
+       -a              Returns all occurrences of words, whether they
+                       be a filename in the path, alias, function,
+                       or builtin.
+
+       -f              Suppress shell function lookup, like `command'.
+
+       -P              Force a path search even in the presence of other
+                       definitions.
+
+   Order of evaluation:
+       alias
+       keyword
+       function
+       builtin
+       file
+ */
+
+int
+type_builtin (list)
+     WORD_LIST *list;
+{
+  int dflags, successful_finds, opt;
+  WORD_LIST *this;
+
+  if (list == 0)
+    return (EXECUTION_SUCCESS);
+
+  dflags = CDESC_SHORTDESC;    /* default */
+  successful_finds = 0;
+
+  /* Handle the obsolescent `-type', `-path', and `-all' by prescanning
+     the arguments and converting those options to the form that
+     internal_getopt recognizes. Converts `--type', `--path', and `--all'
+     also. THIS SHOULD REALLY GO AWAY. */
+  for (this = list; this && this->word->word[0] == '-'; this = this->next)
+    {
+      char *flag = &(this->word->word[1]);
+
+      if (STREQ (flag, "type") || STREQ (flag, "-type"))
+       {
+         this->word->word[1] = 't';
+         this->word->word[2] = '\0';
+       }
+      else if (STREQ (flag, "path") || STREQ (flag, "-path"))
+       {
+         this->word->word[1] = 'p';
+         this->word->word[2] = '\0';
+       }
+      else if (STREQ (flag, "all") || STREQ (flag, "-all"))
+       {
+         this->word->word[1] = 'a';
+         this->word->word[2] = '\0';
+       }
+    }
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "afptP")) != -1)
+    {
+      switch (opt)
+       {
+       case 'a':
+         dflags |= CDESC_ALL;
+         break;
+       case 'f':
+         dflags |= CDESC_NOFUNCS;
+         break;
+       case 'p':
+         dflags |= CDESC_PATH_ONLY;
+         dflags &= ~(CDESC_TYPE|CDESC_SHORTDESC);
+         break;
+       case 't':
+         dflags |= CDESC_TYPE;
+         dflags &= ~(CDESC_PATH_ONLY|CDESC_SHORTDESC);
+         break;
+       case 'P':       /* shorthand for type -ap */
+         dflags |= (CDESC_PATH_ONLY|CDESC_FORCE_PATH);
+         dflags &= ~(CDESC_TYPE|CDESC_SHORTDESC);
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  while (list)
+    {
+      int found;
+
+      found = describe_command (list->word->word, dflags);
+
+      if (!found && (dflags & (CDESC_PATH_ONLY|CDESC_TYPE)) == 0)
+       sh_notfound (list->word->word);
+
+      successful_finds += found;
+      list = list->next;
+    }
+
+  fflush (stdout);
+
+  return ((successful_finds != 0) ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+}
+
+/*
+ * Describe COMMAND as required by the type and command builtins.
+ *
+ * Behavior is controlled by DFLAGS.  Flag values are
+ *     CDESC_ALL       print all descriptions of a command
+ *     CDESC_SHORTDESC print the description for type and command -V
+ *     CDESC_REUSABLE  print in a format that may be reused as input
+ *     CDESC_TYPE      print the type for type -t
+ *     CDESC_PATH_ONLY print the path for type -p
+ *     CDESC_FORCE_PATH        force a path search for type -P
+ *     CDESC_NOFUNCS   skip function lookup for type -f
+ *     CDESC_ABSPATH   convert to absolute path, no ./ prefix
+ *
+ * CDESC_ALL says whether or not to look for all occurrences of COMMAND, or
+ * return after finding it once.
+ */
+int
+describe_command (command, dflags)
+     char *command;
+     int dflags;
+{
+  int found, i, found_file, f, all;
+  char *full_path, *x;
+  SHELL_VAR *func;
+#if defined (ALIAS)
+  alias_t *alias;
+#endif
+
+  all = (dflags & CDESC_ALL) != 0;
+  found = found_file = 0;
+  full_path = (char *)NULL;
+
+#if defined (ALIAS)
+  /* Command is an alias? */
+  if (((dflags & CDESC_FORCE_PATH) == 0) && expand_aliases && (alias = find_alias (command)))
+    {
+      if (dflags & CDESC_TYPE)
+       puts ("alias");
+      else if (dflags & CDESC_SHORTDESC)
+       printf (_("%s is aliased to `%s'\n"), command, alias->value);
+      else if (dflags & CDESC_REUSABLE)
+       {
+         x = sh_single_quote (alias->value);
+         printf ("alias %s=%s\n", command, x);
+         free (x);
+       }
+
+      found = 1;
+
+      if (all == 0)
+       return (1);
+    }
+#endif /* ALIAS */
+
+  /* Command is a shell reserved word? */
+  if (((dflags & CDESC_FORCE_PATH) == 0) && (i = find_reserved_word (command)) >= 0)
+    {
+      if (dflags & CDESC_TYPE)
+       puts ("keyword");
+      else if (dflags & CDESC_SHORTDESC)
+       printf (_("%s is a shell keyword\n"), command);
+      else if (dflags & CDESC_REUSABLE)
+       printf ("%s\n", command);
+
+      found = 1;
+
+      if (all == 0)
+       return (1);
+    }
+
+  /* Command is a function? */
+  if (((dflags & (CDESC_FORCE_PATH|CDESC_NOFUNCS)) == 0) && (func = find_function (command)))
+    {
+      if (dflags & CDESC_TYPE)
+       puts ("function");
+      else if (dflags & CDESC_SHORTDESC)
+       {
+#define PRETTY_PRINT_FUNC 1
+         char *result;
+
+         printf (_("%s is a function\n"), command);
+
+         /* We're blowing away THE_PRINTED_COMMAND here... */
+
+         result = named_function_string (command,
+                                         (COMMAND *) function_cell (func),
+                                         PRETTY_PRINT_FUNC);
+         printf ("%s\n", result);
+#undef PRETTY_PRINT_FUNC
+       }
+      else if (dflags & CDESC_REUSABLE)
+       printf ("%s\n", command);
+
+      found = 1;
+
+      if (all == 0)
+       return (1);
+    }
+
+  /* Command is a builtin? */
+  if (((dflags & CDESC_FORCE_PATH) == 0) && find_shell_builtin (command))
+    {
+      if (dflags & CDESC_TYPE)
+       puts ("builtin");
+      else if (dflags & CDESC_SHORTDESC)
+       printf (_("%s is a shell builtin\n"), command);
+      else if (dflags & CDESC_REUSABLE)
+       printf ("%s\n", command);
+
+      found = 1;
+
+      if (all == 0)
+       return (1);
+    }
+
+  /* Command is a disk file? */
+  /* If the command name given is already an absolute command, just
+     check to see if it is executable. */
+  if (absolute_program (command))
+    {
+      f = file_status (command);
+      if (f & FS_EXECABLE)
+       {
+         if (dflags & CDESC_TYPE)
+           puts ("file");
+         else if (dflags & CDESC_SHORTDESC)
+           printf (_("%s is %s\n"), command, command);
+         else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY))
+           printf ("%s\n", command);
+
+         /* There's no use looking in the hash table or in $PATH,
+            because they're not consulted when an absolute program
+            name is supplied. */
+         return (1);
+       }
+    }
+
+  /* If the user isn't doing "-a", then we might care about
+     whether the file is present in our hash table. */
+  if (all == 0 || (dflags & CDESC_FORCE_PATH))
+    {
+      if (full_path = phash_search (command))
+       {
+         if (dflags & CDESC_TYPE)
+           puts ("file");
+         else if (dflags & CDESC_SHORTDESC)
+           printf (_("%s is hashed (%s)\n"), command, full_path);
+         else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY))
+           printf ("%s\n", full_path);
+
+         free (full_path);
+         return (1);
+       }
+    }
+
+  /* Now search through $PATH. */
+  while (1)
+    {
+      if (all == 0)
+       full_path = find_user_command (command);
+      else
+       full_path =
+         user_command_matches (command, FS_EXEC_ONLY, found_file);
+         /* XXX - should that be FS_EXEC_PREFERRED? */
+
+      if (!full_path)
+       break;
+
+      /* If we found the command as itself by looking through $PATH, it
+        probably doesn't exist.  Check whether or not the command is an
+        executable file.  If it's not, don't report a match.  This is
+        the default posix mode behavior */
+      if (STREQ (full_path, command) || posixly_correct)
+       {
+         f = file_status (full_path);
+         if ((f & FS_EXECABLE) == 0)
+           {
+             free (full_path);
+             full_path = (char *)NULL;
+             if (all == 0)
+               break;
+           }
+         else if (ABSPATH (full_path))
+           ;   /* placeholder; don't need to do anything yet */
+         else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY|CDESC_SHORTDESC))
+           {
+             f = MP_DOCWD | ((dflags & CDESC_ABSPATH) ? MP_RMDOT : 0);
+             full_path = sh_makepath ((char *)NULL, full_path, f);
+           }
+       }
+      /* If we require a full path and don't have one, make one */
+      else if ((dflags & CDESC_ABSPATH) && ABSPATH (full_path) == 0)
+       full_path = sh_makepath ((char *)NULL, full_path, MP_DOCWD|MP_RMDOT);
+
+      found_file++;
+      found = 1;
+
+      if (dflags & CDESC_TYPE)
+       puts ("file");
+      else if (dflags & CDESC_SHORTDESC)
+       printf ("%s is %s\n", command, full_path);
+      else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY))
+       printf ("%s\n", full_path);
+
+      free (full_path);
+      full_path = (char *)NULL;
+
+      if (all == 0)
+       break;
+    }
+
+  return (found);
+}
index f9a0bba1c1ecb449b087dce2344c87efd515c67e..339dc36bd0824189d6fd89dcf2cf430131dc8c47 100644 (file)
@@ -1,7 +1,7 @@
 This file is ulimit.def, from which is created ulimit.c.
 It implements the builtin "ulimit" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -430,7 +430,7 @@ ulimit_internal (cmd, cmdarg, mode, multiple)
 
       if ((real_limit / block_factor) != limit)
        {
-         sh_erange (cmdarg, "limit");
+         sh_erange (cmdarg, _("limit"));
          return (EXECUTION_FAILURE);
        }
     }
index 0279295fa50537438413725312bb6840efd02039..f9a0bba1c1ecb449b087dce2344c87efd515c67e 100644 (file)
@@ -740,7 +740,7 @@ set_all_limits (mode, newlim)
   for (retval = i = 0; limits[i].option > 0; i++)
     if (set_limit (i, newlim, mode) < 0)
       {
-       builtin_error ("%s: cannot modify limit: %s", limits[i].description,
+       builtin_error (_("%s: cannot modify limit: %s"), limits[i].description,
                                                      strerror (errno));
        retval = 1;
       }
index a30959528fe96ae8e151ce0fa2c1cf983831bf45..94e525f543e94ab390e26999c476ea6de95a52f4 100644 (file)
@@ -1,7 +1,7 @@
 This file is wait.def, from which is created wait.c.
 It implements the builtin "wait" in Bash.
 
-Copyright (C) 1987-2005 Free Software Foundation, Inc.
+Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -37,8 +37,7 @@ $DEPENDS_ON !JOB_CONTROL
 $SHORT_DOC wait [n]
 Wait for the specified process and report its termination status.  If
 N is not given, all currently active child processes are waited for,
-and the return code is zero.  N is a process ID; if it is not given,
-all child processes of the shell are waited for.
+and the return code is zero.  N must be a process ID.
 $END
 
 #include <config.h>
diff --git a/builtins/wait.def~ b/builtins/wait.def~
new file mode 100644 (file)
index 0000000..ece8360
--- /dev/null
@@ -0,0 +1,175 @@
+This file is wait.def, from which is created wait.c.
+It implements the builtin "wait" in Bash.
+
+Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+$BUILTIN wait
+$FUNCTION wait_builtin
+$DEPENDS_ON JOB_CONTROL
+$PRODUCES wait.c
+$SHORT_DOC wait [n]
+Wait for the specified process and report its termination status.  If
+N is not given, all currently active child processes are waited for,
+and the return code is zero.  N may be a process ID or a job
+specification; if a job spec is given, all processes in the job's
+pipeline are waited for.
+$END
+
+$BUILTIN wait
+$FUNCTION wait_builtin
+$DEPENDS_ON !JOB_CONTROL
+$SHORT_DOC wait [n]
+Wait for the specified process and report its termination status.  If
+N is not given, all currently active child processes are waited for,
+and the return code is zero.  N must be a process ID.
+$END
+
+#include <config.h>
+
+#include "../bashtypes.h"
+#include <signal.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <chartypes.h>
+
+#include "../bashansi.h"
+
+#include "../shell.h"
+#include "../jobs.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+extern int wait_signal_received;
+
+procenv_t wait_intr_buf;
+
+/* Wait for the pid in LIST to stop or die.  If no arguments are given, then
+   wait for all of the active background processes of the shell and return
+   0.  If a list of pids or job specs are given, return the exit status of
+   the last one waited for. */
+
+#define WAIT_RETURN(s) \
+  do \
+    { \
+      interrupt_immediately = old_interrupt_immediately;\
+      return (s);\
+    } \
+  while (0)
+
+int
+wait_builtin (list)
+     WORD_LIST *list;
+{
+  int status, code;
+  volatile int old_interrupt_immediately;
+
+  USE_VAR(list);
+
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;
+
+  old_interrupt_immediately = interrupt_immediately;
+  interrupt_immediately++;
+
+  /* POSIX.2 says:  When the shell is waiting (by means of the wait utility)
+     for asynchronous commands to complete, the reception of a signal for
+     which a trap has been set shall cause the wait utility to return
+     immediately with an exit status greater than 128, after which the trap
+     associated with the signal shall be taken.
+
+     We handle SIGINT here; it's the only one that needs to be treated
+     specially (I think), since it's handled specially in {no,}jobs.c. */
+  code = setjmp (wait_intr_buf);
+  if (code)
+    {
+      status = 128 + wait_signal_received;
+      WAIT_RETURN (status);
+    }
+
+  /* We support jobs or pids.
+     wait <pid-or-job> [pid-or-job ...] */
+
+  /* But wait without any arguments means to wait for all of the shell's
+     currently active background processes. */
+  if (list == 0)
+    {
+      wait_for_background_pids ();
+      WAIT_RETURN (EXECUTION_SUCCESS);
+    }
+
+  status = EXECUTION_SUCCESS;
+  while (list)
+    {
+      pid_t pid;
+      char *w;
+      intmax_t pid_value;
+
+      w = list->word->word;
+      if (DIGIT (*w))
+       {
+         if (legal_number (w, &pid_value) && pid_value == (pid_t)pid_value)
+           {
+             pid = (pid_t)pid_value;
+             status = wait_for_single_pid (pid);
+           }
+         else
+           {
+             sh_badpid (w);
+             WAIT_RETURN (EXECUTION_FAILURE);
+           }
+       }
+#if defined (JOB_CONTROL)
+      else if (*w && *w == '%')
+       /* Must be a job spec.  Check it out. */
+       {
+         int job;
+         sigset_t set, oset;
+
+         BLOCK_CHILD (set, oset);
+         job = get_job_spec (list);
+
+         if (INVALID_JOB (job))
+           {
+             if (job != DUP_JOB)
+               sh_badjob (list->word->word);
+             UNBLOCK_CHILD (oset);
+             status = 127;     /* As per Posix.2, section 4.70.2 */
+             list = list->next;
+             continue;
+           }
+
+         /* Job spec used.  Wait for the last pid in the pipeline. */
+         UNBLOCK_CHILD (oset);
+         status = wait_for_job (job);
+       }
+#endif /* JOB_CONTROL */
+      else
+       {
+         sh_badpid (w);
+         status = EXECUTION_FAILURE;
+       }
+      list = list->next;
+    }
+
+  WAIT_RETURN (status);
+}
diff --git a/doc/FAQ b/doc/FAQ
index f2a6f57a16c285860262022fd31f8af467470e4e..1d10b32b539ca8893df7d4f3f76fa4d3a06d1866 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,4 +1,4 @@
-This is the Bash FAQ, version 3.34, for Bash version 3.2.
+This is the Bash FAQ, version 3.35, for Bash version 3.2.
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -1791,8 +1791,8 @@ it in fine bookstores near you.  This edition of the book has been updated
 to cover bash-3.0.
 
 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
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
+bash-3.2 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. 
 
index 39ad12d9ed6669ec38e35c455a360acbb9cb7613..43edb1b206c39c8b790575b28faf74649f1e32de 100644 (file)
@@ -1336,12 +1336,16 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
               Note that a negative offset must be separated from the colon  by
               at  least  one  space to avoid being confused with the :- expan-
               sion.  Substring indexing is zero-based  unless  the  positional
-              parameters are used, in which case the indexing starts at 1.
+              parameters  are  used, in which case the indexing starts at 1 by
+              default.  If _\bo_\bf_\bf_\bs_\be_\bt is 0,  and  the  positional  parameters  are
+              used, $\b$0\b0 is prefixed to the list.
 
        ${!\b!_\bp_\br_\be_\bf_\bi_\bx*\b*}
        ${!\b!_\bp_\br_\be_\bf_\bi_\bx@\b@}
               Expands to the names of variables whose names begin with _\bp_\br_\be_\bf_\bi_\bx,
-              separated by the first character of the I\bIF\bFS\bS special variable.
+              separated by the first character of the  I\bIF\bFS\bS  special  variable.
+              When  _\b@  is used and the expansion appears within double quotes,
+              each variable name expands to a separate word.
 
        ${!\b!_\bn_\ba_\bm_\be[_\b@]}
        ${!\b!_\bn_\ba_\bm_\be[_\b*]}
@@ -3689,64 +3693,67 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      environment.
 
               Using  `+'  instead of `-' turns off the attribute instead, with
-              the exception that +\b+a\ba may not be used to destroy an array  vari-
-              able.   When  used in a function, makes each _\bn_\ba_\bm_\be local, as with
-              the l\blo\boc\bca\bal\bl command.  If a variable name is  followed  by  =_\bv_\ba_\bl_\bu_\be,
-              the  value of the variable is set to _\bv_\ba_\bl_\bu_\be.  The return value is
-              0 unless an invalid option is encountered, an attempt is made to
-              define  a  function  using ``-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 (see A\bAr\brr\bra\bay\bys\bs above), one of the _\bn_\ba_\bm_\be_\bs is not  a
-              valid  shell variable name, an attempt is made to turn off read-
-              only 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 -\b-f\bf.
-
-       d\bdi\bir\brs\bs [\b[-\b-c\bcl\blp\bpv\bv]\b] [\b[+\b+_\bn]\b] [\b[-\b-_\bn]\b]
-              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  p\bpu\bus\bsh\bhd\bd  command;  the  p\bpo\bop\bpd\bd command removes
+              the exceptions that +\b+a\ba may not be used to destroy an array vari-
+              able  and  +\b+r\br w\bwi\bil\bll\bl n\bno\bot\bt r\bre\bem\bmo\bov\bve\be t\bth\bhe\be r\bre\bea\bad\bdo\bon\bnl\bly\by a\bat\btt\btr\bri\bib\bbu\but\bte\be.\b.  W\bWh\bhe\ben\bn u\bus\bse\bed\bd
+              i\bin\bn a\ba f\bfu\bun\bnc\bct\bti\bio\bon\bn,\b, m\bma\bak\bke\bes\bs e\bea\bac\bch\bh _\bn_\ba_\bm_\be l\blo\boc\bca\bal\bl,\b, a\bas\bs w\bwi\bit\bth\bh t\bth\bhe\be l\blo\boc\bca\bal\bl command.
+              If a variable name is followed by =_\bv_\ba_\bl_\bu_\be, the value of the vari-
+              able is set to _\bv_\ba_\bl_\bu_\be.  The return value is 0 unless  an  invalid
+              option  is  encountered, an attempt is made to define a function
+              using ``-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 (see
+              A\bAr\brr\bra\bay\bys\bs  above),  one  of the _\bn_\ba_\bm_\be_\bs is not a valid shell variable
+              name, an attempt is made to turn off readonly status for a read-
+              only  variable,  an attempt is made to turn off array status for
+              an array variable, or an attempt is made to display a  non-exis-
+              tent function with -\b-f\bf.
+
+       d\bdi\bir\brs\bs [\b[+\b+_\bn]\b] [\b[-\b-_\bn]\b] [\b[-\b-c\bcp\bpl\blv\bv]\b]
+              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  p\bpu\bus\bsh\bhd\bd  command;  the  p\bpo\bop\bpd\bd  command  removes
               entries from the list.
               +\b+_\bn     Displays the _\bnth entry counting from the left of the list
                      shown by d\bdi\bir\brs\bs when invoked without options, starting with
                      zero.
-              -\b-_\bn     Displays the _\bnth entry counting from  the  right  of  the
+              -\b-_\bn     Displays  the  _\bnth  entry  counting from the right of the
                      list shown by d\bdi\bir\brs\bs when invoked without options, starting
                      with zero.
               -\b-c\bc     Clears  the  directory  stack  by  deleting  all  of  the
                      entries.
-              -\b-l\bl     Produces  a  longer  listing;  the default listing format
+              -\b-l\bl     Produces a longer listing;  the  default  listing  format
                      uses a tilde to denote the home directory.
               -\b-p\bp     Print the directory stack with one entry per line.
-              -\b-v\bv     Print the directory stack with one entry per  line,  pre-
+              -\b-v\bv     Print  the  directory stack with one entry per line, pre-
                      fixing each entry with its index in the stack.
 
-              The  return value is 0 unless an invalid option is supplied or _\bn
+              The return value is 0 unless an invalid option is supplied or  _\bn
               indexes beyond the end of the directory stack.
 
        d\bdi\bis\bso\bow\bwn\bn [-\b-a\bar\br] [-\b-h\bh] [_\bj_\bo_\bb_\bs_\bp_\be_\bc ...]
-              Without options, each _\bj_\bo_\bb_\bs_\bp_\be_\bc  is  removed  from  the  table  of
-              active  jobs.   If  the  -\b-h\bh option is given, each _\bj_\bo_\bb_\bs_\bp_\be_\bc is not
-              removed from the table, but is marked so that S\bSI\bIG\bGH\bHU\bUP\bP is not sent
-              to  the  job  if  the shell receives a S\bSI\bIG\bGH\bHU\bUP\bP.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is
-              present, and neither the -\b-a\ba nor the -\b-r\br option is  supplied,  the
-              _\bc_\bu_\br_\br_\be_\bn_\bt  _\bj_\bo_\bb  is used.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied, the -\b-a\ba option
-              means to remove or mark all jobs; the -\b-r\br option without  a  _\bj_\bo_\bb_\b-
-              _\bs_\bp_\be_\bc  argument  restricts operation to running jobs.  The return
-              value is 0 unless a _\bj_\bo_\bb_\bs_\bp_\be_\bc does not specify a valid job.
+              Without  options,  each  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is  removed  from the table of
+              active jobs.  If _\bj_\bo_\bb_\bs_\bp_\be_\bc is not present, and neither -\b-a\ba  n\bno\bor\br  -\b-r\br
+              i\bis\bs  s\bsu\bup\bpp\bpl\bli\bie\bed\bd,\b, t\bth\bhe\be s\bsh\bhe\bel\bll\bl'\b's\bs n\bno\bot\bti\bio\bon\bn o\bof\bf t\bth\bhe\be _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb i\bis\bs u\bus\bse\bed\bd.\b.  I\bIf\bf
+              t\bth\bhe\be -\b-h\bh o\bop\bpt\bti\bio\bon\bn i\bis\bs g\bgi\biv\bve\ben\bn,\b, e\bea\bac\bch\bh _\bj_\bo_\bb_\bs_\bp_\be_\bc is not removed from the ta-
+              ble,  but is marked so that S\bSI\bIG\bGH\bHU\bUP\bP is not sent to the job if the
+              shell receives a S\bSI\bIG\bGH\bHU\bUP\bP.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is present, and  neither
+              the  -\b-a\ba  nor the -\b-r\br option is supplied, the _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb is used.
+              If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied, the -\b-a\ba option means to remove or mark
+              all  jobs;  the  -\b-r\br  option without a _\bj_\bo_\bb_\bs_\bp_\be_\bc argument restricts
+              operation to running jobs.  The return value is 0 unless a  _\bj_\bo_\bb_\b-
+              _\bs_\bp_\be_\bc does not specify a valid job.
 
        e\bec\bch\bho\bo [-\b-n\bne\beE\bE] [_\ba_\br_\bg ...]
-              Output the _\ba_\br_\bgs, separated by spaces,  followed  by  a  newline.
+              Output  the  _\ba_\br_\bgs,  separated  by spaces, followed by a newline.
               The return status is always 0.  If -\b-n\bn is specified, the trailing
-              newline is suppressed.  If the -\b-e\be option is  given,  interpreta-
-              tion  of  the following backslash-escaped characters is enabled.
-              The -\b-E\bE option disables the interpretation of these escape  char-
-              acters,  even  on systems where they are interpreted by default.
-              The x\bxp\bpg\bg_\b_e\bec\bch\bho\bo shell option may be used to  dynamically  determine
-              whether  or not e\bec\bch\bho\bo expands these escape characters by default.
-              e\bec\bch\bho\bdoes not interpret -\b--\b- to mean the  end  of  options.   e\bec\bch\bho\bo
+              newline  is  suppressed.  If the -\b-e\be option is given, interpreta-
+              tion of the following backslash-escaped characters  is  enabled.
+              The  -\b-E\bE option disables the interpretation of these escape char-
+              acters, even on systems where they are interpreted  by  default.
+              The  x\bxp\bpg\bg_\b_e\bec\bch\bho\bo  shell option may be used to dynamically determine
+              whether or not e\bec\bch\bho\bo expands these escape characters by  default.
+              e\bec\bch\bho\b does  not  interpret  -\b--\b- to mean the end of options.  e\bec\bch\bho\bo
               interprets the following escape sequences:
               \\b\a\ba     alert (bell)
               \\b\b\bb     backspace
@@ -3758,52 +3765,52 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               \\b\t\bt     horizontal tab
               \\b\v\bv     vertical tab
               \\b\\\b\     backslash
-              \\b\0\b0_\bn_\bn_\bn  the  eight-bit  character  whose value is the octal value
+              \\b\0\b0_\bn_\bn_\bn  the eight-bit character whose value is  the  octal  value
                      _\bn_\bn_\bn (zero to three octal digits)
-              \\b\x\bx_\bH_\bH   the eight-bit character whose value  is  the  hexadecimal
+              \\b\x\bx_\bH_\bH   the  eight-bit  character  whose value is the hexadecimal
                      value _\bH_\bH (one or two hex digits)
 
        e\ben\bna\bab\bbl\ble\be [-\b-a\bad\bdn\bnp\bps\bs] [-\b-f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [_\bn_\ba_\bm_\be ...]
-              Enable  and disable builtin shell commands.  Disabling a builtin
+              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  -\b-n\bn  is  used,  each  _\bn_\ba_\bm_\be  is disabled; otherwise, _\bn_\ba_\bm_\be_\bs are
+              to be executed without specifying a full pathname,  even  though
+              the  shell  normally searches for builtins before disk commands.
+              If -\b-n\bn is used, each  _\bn_\ba_\bm_\be  is  disabled;  otherwise,  _\bn_\ba_\bm_\be_\b are
               enabled.  For example, to use the t\bte\bes\bst\bt binary found via the P\bPA\bAT\bTH\bH
-              instead  of  the  shell builtin version, run ``enable -n test''.
-              The -\b-f\bf option means to load the new builtin  command  _\bn_\ba_\bm_\b from
+              instead of the shell builtin version, run  ``enable  -n  test''.
+              The  -\b-f\bf  option  means to load the new builtin command _\bn_\ba_\bm_\be from
               shared object _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, on systems that support dynamic loading.
-              The -\b-d\bd option will delete a builtin previously loaded  with  -\b-f\bf.
+              The  -\b-d\bd  option will delete a builtin previously loaded with -\b-f\bf.
               If no _\bn_\ba_\bm_\be arguments are given, or if the -\b-p\bp option is supplied,
               a list of shell builtins is printed.  With no other option argu-
-              ments,  the  list consists of all enabled shell builtins.  If -\b-n\bn
-              is supplied, only disabled builtins are printed.  If -\b-a\ba is  sup-
-              plied,  the  list printed includes all builtins, with an indica-
-              tion of whether or not each is enabled.  If -\b-s\bs is supplied,  the
-              output  is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The return
-              value is 0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there  is  an
+              ments, the list consists of all enabled shell builtins.   If  -\b-n\bn
+              is  supplied, only disabled builtins are printed.  If -\b-a\ba is sup-
+              plied, the list printed includes all builtins, with  an  indica-
+              tion  of whether or not each is enabled.  If -\b-s\bs is supplied, the
+              output is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The  return
+              value  is  0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there is an
               error loading a new builtin from a shared object.
 
        e\bev\bva\bal\bl [_\ba_\br_\bg ...]
-              The  _\ba_\br_\bgs  are read and concatenated together into a single com-
-              mand.  This command is then read and executed by the shell,  and
-              its  exit status is returned as the value of e\bev\bva\bal\bl.  If there are
+              The _\ba_\br_\bgs are read and concatenated together into a  single  com-
+              mand.   This command is then read and executed by the shell, and
+              its exit status is returned as the value of e\bev\bva\bal\bl.  If there  are
               no _\ba_\br_\bg_\bs, or only null arguments, e\bev\bva\bal\bl returns 0.
 
        e\bex\bxe\bec\bc [-\b-c\bcl\bl] [-\b-a\ba _\bn_\ba_\bm_\be] [_\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs]]
-              If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new  process
-              is  created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  If
+              If  _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new process
+              is created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.   If
               the -\b-l\bl option is supplied, the shell places a dash at the begin-
-              ning of the zeroth arg passed to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  This is what _\bl_\bo_\bg_\bi_\bn(1)
-              does.  The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed with an empty
-              environment.   If  -\b-a\ba  is supplied, the shell passes _\bn_\ba_\bm_\be as the
-              zeroth argument to the executed command.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd  cannot  be
-              executed  for some reason, a non-interactive shell exits, unless
-              the shell option e\bex\bxe\bec\bcf\bfa\bai\bil\bl is enabled, in which case  it  returns
-              failure.   An interactive shell returns failure if the file can-
-              not be executed.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd 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.
+              ning of the zeroth argument passed to  _\bc_\bo_\bm_\bm_\ba_\bn_\bd.   This  is  what
+              _\bl_\bo_\bg_\bi_\bn(1) does.  The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed with
+              an empty environment.  If -\b-a\ba is supplied, the shell passes  _\bn_\ba_\bm_\be
+              as the zeroth argument to the executed command.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd can-
+              not be executed for some reason, a non-interactive shell  exits,
+              unless  the  shell  option e\bex\bxe\bec\bcf\bfa\bai\bil\bl is enabled, in which case it
+              returns failure.  An interactive shell returns  failure  if  the
+              file cannot be executed.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is not specified, any redi-
+              rections take effect in the current shell, and the return status
+              is  0.  If there is a redirection error, the return status is 1.
 
        e\bex\bxi\bit\bt [_\bn]
               Cause the shell to exit with a status of _\bn.  If  _\bn  is  omitted,
@@ -4043,6 +4050,9 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               removes  the  top directory from the stack, and performs a c\bcd\bd to
               the new top directory.  Arguments, if supplied, have the follow-
               ing meanings:
+              -\b-n\bn     Suppresses  the  normal change of directory when removing
+                     directories from the stack, so that  only  the  stack  is
+                     manipulated.
               +\b+_\bn     Removes  the _\bnth entry counting from the left of the list
                      shown by d\bdi\bir\brs\bs, starting with zero.  For  example:  ``popd
                      +0'' removes the first directory, ``popd +1'' the second.
@@ -4050,9 +4060,6 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      shown  by  d\bdi\bir\brs\bs, starting with zero.  For example: ``popd
                      -0'' removes the last directory, ``popd -1'' the next  to
                      last.
-              -\b-n\bn     Suppresses  the  normal change of directory when removing
-                     directories from the stack, so that  only  the  stack  is
-                     manipulated.
 
               If  the p\bpo\bop\bpd\bd command is successful, a d\bdi\bir\brs\bs is performed as well,
               and the return status is 0.  p\bpo\bop\bpd\bd returns false  if  an  invalid
@@ -4084,22 +4091,22 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               null  string,  as  appropriate,  had  been supplied.  The return
               value is zero on success, non-zero on failure.
 
-       p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
        p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [+_\bn] [-_\bn]
+       p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
               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:
+              -\b-n\bn     Suppresses the normal change  of  directory  when  adding
+                     directories  to  the  stack,  so  that  only the stack is
+                     manipulated.
               +\b+_\bn     Rotates the stack so that  the  _\bnth  directory  (counting
                      from  the  left  of the list shown by d\bdi\bir\brs\bs, starting with
                      zero) is at the top.
               -\b-_\bn     Rotates the stack so that  the  _\bnth  directory  (counting
                      from  the  right of the list shown by d\bdi\bir\brs\bs, starting with
                      zero) is at the top.
-              -\b-n\bn     Suppresses the normal change  of  directory  when  adding
-                     directories  to  the  stack,  so  that  only the stack is
-                     manipulated.
               _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top, making it the
                      new current working directory.
 
@@ -4214,10 +4221,10 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       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  w\bwh\bhi\bil\ble\be or u\bun\bnt\bti\bil\bl keyword,
-                      part of the test in an _\bi_\bf statement, part of a &\b&&\b& or  |\b||\b|
-                      list, or if the command's return value is being inverted
-                      via !\b!.  A trap on E\bER\bRR\bR, if set, is  executed  before  the
-                      shell exits.
+                      part of the test in an i\bif\bf statement, part of a &\b&&\b& or  |\b||\b|
+                      list,  any command in a pipeline but the last, or if the
+                      command's return value is being inverted via !\b!.  A  trap
+                      on E\bER\bRR\bR, if set, is executed before the shell exits.
               -\b-f\bf      Disable pathname expansion.
               -\b-h\bh      Remember  the location of commands as they are looked up
                       for execution.  This is enabled by default.
@@ -4883,4 +4890,4 @@ B\bBU\bUG\bGS\bS
 
 
 
-GNU Bash-3.2                   2006 September 28                       BASH(1)
+GNU Bash-3.2                   2006 November 27                        BASH(1)
index bbf08ed9b27b302ff2ebad60521be9906c3b7bac..fec088614ebf0540052e30a6fb59581348d9e2fd 100644 (file)
@@ -6045,13 +6045,6 @@ that they can be re-read.
 .B \-P
 List current \fBreadline\fP function names and bindings.
 .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 \-s
 Display \fBreadline\fP key sequences bound to macros and the strings
 they output in such a way that they can be re-read.
@@ -6060,6 +6053,13 @@ they output in such a way that they can be re-read.
 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
@@ -6232,9 +6232,9 @@ will be displayed.
 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\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP]
+\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\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\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] \fIname\fP [\fIname ...\fP]
+[\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 [\fIname\fP ...]
@@ -6664,7 +6664,7 @@ the eight-bit character whose value is the hexadecimal value \fIHH\fP
 .PD
 .RE
 .TP
-\fBenable\fP [\fB\-adnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
+\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,
@@ -6796,7 +6796,7 @@ is supplied with a
 .I name
 that is not a function.
 .TP
-\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-nlr\fP] [\fIfirst\fP] [\fIlast\fP]
+\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]
@@ -7417,7 +7417,7 @@ 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\-u\fP \fIfd\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-a\fP \fIaname\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-n\fP \fInchars\fP] [\fB\-d\fP \fIdelim\fP] [\fIname\fP ...]
+\fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\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
@@ -7553,7 +7553,7 @@ the return status is false.
 Any command associated with the \fBRETURN\fP trap is executed
 before execution resumes after the function or script.
 .TP
-\fBset\fP [\fB\-\-abefhkmnptuvxBCHP\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
+\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
 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.
index 4e5e66c7407f03bbe3895fd12f0aaf5dea574197..fe45d2e347e5f894e3b7224a87cdac9b286a45ea 100644 (file)
@@ -6,12 +6,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Tue Nov 21 10:50:26 EST 2006
+.\"    Last Change: Mon Nov 27 12:02:01 EST 2006
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2006 November 21" "GNU Bash-3.2"
+.TH BASH 1 "2006 November 27" "GNU Bash-3.2"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -5985,8 +5985,9 @@ no alias has been defined.
 Resume each suspended job \fIjobspec\fP in the background, as if it
 had been started with
 .BR & .
-If \fIjobspec\fP is not present, the shell's notion of the
-\fIcurrent job\fP is used.
+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
@@ -6044,13 +6045,6 @@ that they can be re-read.
 .B \-P
 List current \fBreadline\fP function names and bindings.
 .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 \-s
 Display \fBreadline\fP key sequences bound to macros and the strings
 they output in such a way that they can be re-read.
@@ -6059,6 +6053,13 @@ they output in such a way that they can be re-read.
 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
@@ -6231,9 +6232,9 @@ will be displayed.
 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\-A\fP \fIaction\fP] [\fB\-G\fP \fIglobpat\fP] [\fB\-W\fP \fIwordlist\fP] [\fB\-P\fP \fIprefix\fP] [\fB\-S\fP \fIsuffix\fP]
+\fBcomplete\fP [\fB\-abcdefgjksuv\fP] [\fB\-o\fP \fIcomp-option\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\-F\fP \fIfunction\fP] [\fB\-C\fP \fIcommand\fP] \fIname\fP [\fIname ...\fP]
+[\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 [\fIname\fP ...]
@@ -6499,8 +6500,11 @@ Mark \fIname\fPs for export to subsequent commands via the environment.
 .PD
 .PP
 Using `+' instead of `\-'
-turns off the attribute instead, with the exception that \fB+a\fP
-may not be used to destroy an array variable.  When used in a function,
+turns off the attribute instead,
+with the exceptions that \fB+a\fP
+may not be used to destroy an array variable and \fB+r\fB will not
+remove the readonly attribute.
+When used in a function,
 makes each
 \fIname\fP local, as with the 
 .B local
@@ -6569,6 +6573,10 @@ of the directory stack.
 Without options, each
 .I jobspec
 is removed from the table of active jobs.
+If
+.I jobspec
+is not present, and neither \fB\-a\fB nor \fB\-r\fP is supplied,
+the shell's notion of 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
@@ -6656,7 +6664,7 @@ the eight-bit character whose value is the hexadecimal value \fIHH\fP
 .PD
 .RE
 .TP
-\fBenable\fP [\fB\-adnps\fP] [\fB\-f\fP \fIfilename\fP] [\fIname\fP ...]
+\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,
@@ -6788,7 +6796,7 @@ is supplied with a
 .I name
 that is not a function.
 .TP
-\fBfc\fP [\fB\-e\fP \fIename\fP] [\fB\-nlr\fP] [\fIfirst\fP] [\fIlast\fP]
+\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]
@@ -7274,6 +7282,10 @@ 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
@@ -7297,10 +7309,6 @@ removes the last directory,
 .if n ``popd -1''
 .if t \f(CWpopd -1\fP
 the next to last.
-.TP
-.B \-n
-Suppresses the normal change of directory when removing directories
-from the stack, so that only the stack is manipulated.
 .PD
 .PP
 If the
@@ -7339,10 +7347,10 @@ 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.
 .TP
-\fBpushd\fP [\fB\-n\fP] [\fIdir\fP]
+\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
 .PD 0
 .TP
-\fBpushd\fP [\fB\-n\fP] [+\fIn\fP] [\-\fIn\fP]
+\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
@@ -7352,6 +7360,10 @@ 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
@@ -7365,10 +7377,6 @@ Rotates the stack so that the \fIn\fPth directory
 .BR dirs ,
 starting with zero) is at the top.
 .TP
-.B \-n
-Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
-.TP
 .I dir
 Adds
 .I dir
@@ -7545,7 +7553,7 @@ the return status is false.
 Any command associated with the \fBRETURN\fP trap is executed
 before execution resumes after the function or script.
 .TP
-\fBset\fP [\fB\-\-abefhkmnptuvxBCHP\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
+\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
 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.
@@ -7584,12 +7592,14 @@ or
 .B until
 keyword, 
 part of the test in an
-.I if
+.B if
 statement, part of a
 .B &&
 or
 .B \(bv\(bv
-list, or if the command's return value is
+list,
+any command in a pipeline but the last,
+or if the command's return value is
 being inverted via
 .BR ! .
 A trap on \fBERR\fP, if set, is executed before the shell exits.
index 20eaa02471fa4ae6d277f542ea00716a5d3c4896..9dfcc972e1dde02c07523240cb6ad9d2d960edd4 100644 (file)
@@ -3,7 +3,7 @@
 </HEAD>
 <BODY><TABLE WIDTH=100%>
 <TR>
-<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2006 September 28<TH ALIGN=RIGHT width=33%>BASH(1)
+<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2006 November 27<TH ALIGN=RIGHT width=33%>BASH(1)
 </TR>
 </TABLE>
 <BR><A HREF="#index">Index</A>
@@ -1829,7 +1829,9 @@ 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 is &quot;main&quot;.
+The bottom-most element is
+<TT>&quot;main&quot;</TT>.
+
 This variable exists only when a shell function is executing.
 Assignments to
 <FONT SIZE=-1><B>FUNCNAME</B>
@@ -3121,7 +3123,9 @@ index of the specified array.
 Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the :- expansion.
 Substring indexing is zero-based unless the positional parameters 
-are used, in which case the indexing starts at 1.
+are used, in which case the indexing starts at 1 by default.
+If <I>offset</I> is 0, and the positional parameters are used, <B>$0</B> is
+prefixed to the list.
 <DT>${<B>!</B><I>prefix</I><B>*</B>}<DD>
 
 <DT>${<B>!</B><I>prefix</I><B>@</B>}<DD>
@@ -3132,6 +3136,8 @@ separated by the first character of the
 
 </FONT>
 special variable.
+When <I>@</I> is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
 <DT>${<B>!</B><I>name</I>[<I>@</I>]}<DD>
 
 <DT>${<B>!</B><I>name</I>[<I>*</I>]}<DD>
@@ -7774,8 +7780,10 @@ Resume each suspended job <I>jobspec</I> in the background, as if it
 had been started with
 <B>&amp;</B>.
 
-If <I>jobspec</I> is not present, the shell's notion of the
-<I>current job</I> is used.
+If
+<I>jobspec</I>
+
+is not present, the shell's notion of the <I>current job</I> is used.
 <B>bg</B>
 
 <I>jobspec</I>
@@ -8398,10 +8406,13 @@ Mark <I>name</I>s for export to subsequent commands via the environment.
 <P>
 
 Using `+' instead of `-'
-turns off the attribute instead, with the exception that <B>+a</B>
-may not be used to destroy an array variable.  When used in a function,
+turns off the attribute instead,
+with the exceptions that <B>+a</B>
+may not be used to destroy an array variable and <B>+r will not
+remove the readonly attribute.
+When used in a function,
 makes each
-<I>name</I> local, as with the 
+</B><I>name</I> local, as with the 
 <B>local</B>
 
 command.
@@ -8422,7 +8433,7 @@ 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 <B>-f</B>.
 </DL>
 
-<DT><B>dirs [-clpv</B>] [+<I>n</I>] [-<I>n</I>]
+<DT><B>dirs [+</B><I>n</I>] [-<I>n</I>] [<B>-cplv</B>]
 
 <DD>
 Without options, displays the list of currently remembered directories.
@@ -8482,6 +8493,11 @@ Without options, each
 <I>jobspec</I>
 
 is removed from the table of active jobs.
+If
+<I>jobspec</I>
+
+is not present, and neither <B>-a nor -r</B> is supplied,
+the shell's notion of the <I>current job</I> is used.
 If the <B>-h</B> option is given, each
 <I>jobspec</I>
 
@@ -8669,7 +8685,7 @@ If the
 <B>-l</B>
 
 option is supplied,
-the shell places a dash at the beginning of the zeroth arg passed to 
+the shell places a dash at the beginning of the zeroth argument passed to 
 <I>command</I>.
 
 This is what
@@ -9359,6 +9375,11 @@ Arguments, if supplied, have the following meanings:
 <DL COMPACT><DT><DD>
 
 <DL COMPACT>
+<DT><B>-n</B>
+
+<DD>
+Suppresses the normal change of directory when removing directories
+from the stack, so that only the stack is manipulated.
 <DT><B>+</B><I>n</I><DD>
 Removes the <I>n</I>th entry counting from the left of the list
 shown by
@@ -9383,11 +9404,6 @@ removes the last directory,
 
 <TT>popd -1</TT>
 the next to last.
-<DT><B>-n</B>
-
-<DD>
-Suppresses the normal change of directory when removing directories
-from the stack, so that only the stack is manipulated.
 
 </DL>
 <P>
@@ -9430,10 +9446,10 @@ If the <I>format</I> requires more <I>arguments</I> 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.
-<DT><B>pushd</B> [<B>-n</B>] [<I>dir</I>]<DD>
-
 <DT><B>pushd</B> [<B>-n</B>] [+<I>n</I>] [-<I>n</I>]<DD>
 
+<DT><B>pushd</B> [<B>-n</B>] [<I>dir</I>]<DD>
+
 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
@@ -9442,6 +9458,11 @@ Arguments, if supplied, have the following meanings:
 <DL COMPACT><DT><DD>
 
 <DL COMPACT>
+<DT><B>-n</B>
+
+<DD>
+Suppresses the normal change of directory when adding directories
+to the stack, so that only the stack is manipulated.
 <DT><B>+</B><I>n</I><DD>
 Rotates the stack so that the <I>n</I>th directory
 (counting from the left of the list shown by
@@ -9455,11 +9476,6 @@ Rotates the stack so that the <I>n</I>th directory
 <B>dirs</B>,
 
 starting with zero) is at the top.
-<DT><B>-n</B>
-
-<DD>
-Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
 <DT><I>dir</I>
 
 <DD>
@@ -9732,7 +9748,7 @@ or
 
 keyword, 
 part of the test in an
-<I>if</I>
+<B>if</B>
 
 statement, part of a
 <B>&amp;&amp;</B>
@@ -9740,7 +9756,9 @@ statement, part of a
 or
 <B>||</B>
 
-list, or if the command's return value is
+list,
+any command in a pipeline but the last,
+or if the command's return value is
 being inverted via
 <B>!</B>.
 
@@ -11433,7 +11451,7 @@ Array variables may not (yet) be exported.
 <HR>
 <TABLE WIDTH=100%>
 <TR>
-<TH ALIGN=LEFT width=33%>GNU Bash-3.2<TH ALIGN=CENTER width=33%>2006 September 28<TH ALIGN=RIGHT width=33%>BASH(1)
+<TH ALIGN=LEFT width=33%>GNU Bash-3.2<TH ALIGN=CENTER width=33%>2006 November 27<TH ALIGN=RIGHT width=33%>BASH(1)
 </TR>
 </TABLE>
 <HR>
@@ -11537,6 +11555,6 @@ Array variables may not (yet) be exported.
 </DL>
 <HR>
 This document was created by man2html from bash.1.<BR>
-Time: 03 October 2006 08:54:31 EDT
+Time: 12 December 2006 14:43:32 EST
 </BODY>
 </HTML>
index 84e9c054f1c4455c58e7e4481273e07611f38e97..3e5a5bd4472f841fdbfc44b1d5891ee1bb84c80d 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.19.1
-%%CreationDate: Tue Oct  3 08:54:29 2006
+%%CreationDate: Tue Dec 12 14:43:06 2006
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%+ font Times-Italic
@@ -332,7 +332,8 @@ E F2(po)2.5 E F0(\(portable object\) \214le format.)2.5 E F2
 144 686.4 Q .3 -.15(ve \()-.25 H(see).15 E F4(INV)2.5 E(OCA)-.405 E
 (TION)-.855 E F0(belo)2.25 E(w\).)-.25 E F2(\255\255login)108 703.2 Q F0
 (Equi)144 715.2 Q -.25(va)-.25 G(lent to).25 E F2<ad6c>2.5 E F0(.)A
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(1)190.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(1)
+190.545 E 0 Cg EP
 %%Page: 2 2
 %%BeginPageSetup
 BP
@@ -454,7 +455,7 @@ F(ariable)-.25 E F3 -.27(BA)108 679.2 S(SH_ENV).27 E F0 1.01(in the en)
 108 727.2 S 2.5(tt).2 G(he v)-2.5 E(alue of the)-.25 E F3 -.666(PA)2.5 G
 (TH)-.189 E F0 -.25(va)2.25 G
 (riable is not used to search for the \214le name.).25 E(GNU Bash-3.2)72
-768 Q(2006 September 28)135.125 E(2)190.115 E 0 Cg EP
+768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(2)190.545 E 0 Cg EP
 %%Page: 3 3
 %%BeginPageSetup
 BP
@@ -579,7 +580,8 @@ F1(Pipelines)87 679.2 Q F0(A)108 691.2 Q F2(pipeline)2.919 E F0 .419
 F F1(|)2.92 E F0 5.42(.T)C .42(he format for a pipeline)-5.42 F(is:)108
 703.2 Q([)144 720 Q F1(time)A F0([)2.5 E F1<ad70>A F0(]] [ ! ])A F2
 (command)2.5 E F0([)2.5 E F1(|)2.5 E F2(command2)2.5 E F0(... ])2.5 E
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(3)190.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(3)
+190.545 E 0 Cg EP
 %%Page: 4 4
 %%BeginPageSetup
 BP
@@ -699,8 +701,8 @@ A({)108 573.6 Q F1(list)2.5 E F0 2.5(;})C F1(list)3.89 E F0 .402
 F(SIONS)144 727.2 Q F5(.)A F0 -.8(Wo)5.633 G 1.133
 (rd splitting and pathname e).8 F 1.133
 (xpansion are not performed on the w)-.15 F 1.133(ords between the)-.1 F
-F3([[)3.632 E F0(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(4)
-190.115 E 0 Cg EP
+F3([[)3.632 E F0(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G
+(mber 27).15 E(4)190.545 E 0 Cg EP
 %%Page: 5 5
 %%BeginPageSetup
 BP
@@ -838,7 +840,8 @@ F 1.538(played w)144 715.2 R 1.538(ords, then the v)-.1 F 1.538(alue of)
 F 1.537(ords and)-.1 F .065(prompt are displayed ag)144 727.2 R 2.565
 (ain. If)-.05 F .065(EOF is read, the command completes.)2.565 F(An)
 5.066 E 2.566(yo)-.15 G .066(ther v)-2.566 F .066(alue read causes)-.25
-F(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(5)190.115 E 0 Cg EP
+F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(5)190.545 E 0 Cg EP
 %%Page: 6 6
 %%BeginPageSetup
 BP
@@ -978,7 +981,8 @@ F0 1.337(option is on by def)3.837 F 1.337(ault in)-.1 F(interacti)108
 722.4 R F1(metac)2.789 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288
 (listed abo)2.789 F .588 -.15(ve u)-.15 H(nder).15 E F3(DEFINITIONS)
 2.788 E F0 .288(has special meaning to the shell and must be)2.538 F
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(6)190.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(6)
+190.545 E 0 Cg EP
 %%Page: 7 7
 %%BeginPageSetup
 BP
@@ -1094,8 +1098,8 @@ F .515(and v)108 715.2 R .515(ariable e)-.25 F .515
 (integer)2.698 E F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value)
 2.988 E F0 .198(is e)2.878 F -.25(va)-.25 G .199
 (luated as an arithmetic e).25 F .199(xpression e)-.15 F -.15(ve)-.25 G
-(n).15 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(7)190.115 E 0
-Cg EP
+(n).15 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27)
+.15 E(7)190.545 E 0 Cg EP
 %%Page: 8 8
 %%BeginPageSetup
 BP
@@ -1227,7 +1231,8 @@ S 1.6(cuted and placed in the en).15 F 1.6(vironment e)-.4 F 1.6
 696 Q(wing v)-.25 E(ariables are set by the shell:)-.25 E F1 -.3(BA)108
 712.8 S(SH).3 E F0(Expands to the full \214le name used to in)9.07 E -.2
 (vo)-.4 G .2 -.1(ke t).2 H(his instance of).1 E F1(bash)2.5 E F0(.)A
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(8)190.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(8)
+190.545 E 0 Cg EP
 %%Page: 9 9
 %%BeginPageSetup
 BP
@@ -1327,8 +1332,8 @@ E F0(belo)2.5 E(w\).)-.25 E F1(COMP_LINE)108 680.4 Q F0 1.207
 2.849(mands in)144 704.4 R -.2(vo)-.4 G -.1(ke).2 G 5.349(db).1 G 5.349
 (yt)-5.349 G 2.849(he programmable completion f)-5.349 F 2.849
 (acilities \(see)-.1 F F1(Pr)5.349 E 2.848(ogrammable Completion)-.18 F
-F0(belo)144 716.4 Q(w\).)-.25 E(GNU Bash-3.2)72 768 Q(2006 September 28)
-135.125 E(9)190.115 E 0 Cg EP
+F0(belo)144 716.4 Q(w\).)-.25 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(9)190.545 E 0 Cg EP
 %%Page: 10 10
 %%BeginPageSetup
 BP
@@ -1389,10 +1394,11 @@ F(ariable)-.25 E .35(will not change the current directory)144 326.4 R
 -.25 F -.15(xe)-.15 G .479(cution call stack.).15 F .277
 (The element with inde)144 408 R 2.777(x0i)-.15 G 2.777(st)-2.777 G .276
 (he name of an)-2.777 F 2.776(yc)-.15 G(urrently-e)-2.776 E -.15(xe)-.15
-G .276(cuting shell function.).15 F .276(The bottom-most)5.276 F .81
-(element is "main".)144 420 R .81(This v)5.81 F .81(ariable e)-.25 F .81
-(xists only when a shell function is e)-.15 F -.15(xe)-.15 G 3.31
-(cuting. Assignments).15 F(to)3.31 E F2(FUNCN)144 432 Q(AME)-.18 E F0
+G .276(cuting shell function.).15 F .276(The bottom-most)5.276 F .25
+(element is)144 420 R/F3 10/Courier@0 SF("main")2.75 E F0 5.25(.T)C .25
+(his v)-5.25 F .25(ariable e)-.25 F .25
+(xists only when a shell function is e)-.15 F -.15(xe)-.15 G 2.75
+(cuting. Assignments).15 F(to)2.75 E F2(FUNCN)144 432 Q(AME)-.18 E F0
 (ha)2.635 E .685 -.15(ve n)-.2 H 2.885(oe).15 G -.25(ff)-2.885 G .385
 (ect and return an error status.).25 F(If)5.385 E F2(FUNCN)2.885 E(AME)
 -.18 E F0 .384(is unset, it loses its special)2.634 F(properties, e)144
@@ -1429,9 +1435,9 @@ G 2.5(ti)-2.5 G 2.5(ss)-2.5 G(ubsequently reset.)-2.5 E F1(MA)108 688.8
 Q(CHTYPE)-.55 E F0 .898(Automatically set to a string that fully descri\
 bes the system type on which)144 700.8 R F1(bash)3.398 E F0 .898(is e)
 3.398 F -.15(xe)-.15 G .898(cuting, in).15 F(the standard GNU)144 712.8
-Q/F3 10/Times-Italic@0 SF(cpu-company-system)2.5 E F0 2.5(format. The)
+Q/F4 10/Times-Italic@0 SF(cpu-company-system)2.5 E F0 2.5(format. The)
 2.5 F(def)2.5 E(ault is system-dependent.)-.1 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(10)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(10)185.545 E 0 Cg EP
 %%Page: 11 11
 %%BeginPageSetup
 BP
@@ -1522,7 +1528,8 @@ F2 -.666(PA)5 G(TH)-.189 E F0
 (shell looks for destination directories speci\214ed by the)144 691.2 R
 F1(cd)6.295 E F0 6.296(command. A)6.296 F 3.796(sample v)6.296 F 3.796
 (alue is)-.25 F/F5 10/Courier@0 SF(".:~:/usr")144 703.2 Q F0(.)A
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(11)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(11)185.545 E 0 Cg EP
 %%Page: 12 12
 %%BeginPageSetup
 BP
@@ -1638,7 +1645,8 @@ R F1(history)3.173 E F0 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v)
 3.173 F .673(ariable is)-.25 F
 (set, time stamps are written to the history \214le so the)144 696 Q 2.5
 (ym)-.15 G(ay be preserv)-2.5 E(ed across shell sessions.)-.15 E
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(12)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(12)185.545 E 0 Cg EP
 %%Page: 13 13
 %%BeginPageSetup
 BP
@@ -1739,8 +1747,8 @@ essage with a)-3.42 F 2.807(`?'. When)144 648 R .307(used in the te)
 .389(ariable, b)-.25 F .388
 (ut the location of the user mail \214les that it uses is)-.2 F
 (system dependent \(e.g., /v)144 696 Q(ar/mail/)-.25 E F1($USER)A F0
-(\).)A(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(13)185.115 E 0
-Cg EP
+(\).)A(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27)
+.15 E(13)185.545 E 0 Cg EP
 %%Page: 14 14
 %%BeginPageSetup
 BP
@@ -1853,8 +1861,8 @@ R .885(In an interacti)5.885 F 1.185 -.15(ve s)-.25 H .885(hell, the v)
 .15 F .886(alue is interpreted as the number of seconds to)-.25 F -.1
 (wa)144 721.2 S .546(it for input after issuing the primary prompt.).1 F
 F1(Bash)5.546 E F0 .546(terminates after w)3.046 F .546
-(aiting for that number of)-.1 F(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(14)185.115 E 0 Cg EP
+(aiting for that number of)-.1 F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(14)185.545 E 0 Cg EP
 %%Page: 15 15
 %%BeginPageSetup
 BP
@@ -1991,7 +1999,7 @@ F0 3.386(]}. If)B F2(subscript)3.386 E F0(is)3.386 E F1(*)3.386 E F0(or)
 R 5.733(.R)-.65 G .733(eferencing an array v)-5.733 F .733
 (ariable without a subscript is equi)-.25 F -.25(va)-.25 G .734
 (lent to referencing element).25 F(zero.)108 717.6 Q(GNU Bash-3.2)72 768
-Q(2006 September 28)135.125 E(15)185.115 E 0 Cg EP
+Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(15)185.545 E 0 Cg EP
 %%Page: 16 16
 %%BeginPageSetup
 BP
@@ -2124,7 +2132,7 @@ G(dist,b).65 E(ugs})-.2 E(or)108 621.6 Q(cho)144 633.6 Q
 (xpansion with the)-.15 F F1(+B)108 710.4 Q F0(option to the)2.5 E F1
 (set)2.5 E F0(command \(see)2.5 E F4(SHELL B)2.5 E(UIL)-.09 E
 (TIN COMMANDS)-.828 E F0(belo)2.25 E(w\).)-.25 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(16)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(16)185.545 E 0 Cg EP
 %%Page: 17 17
 %%BeginPageSetup
 BP
@@ -2247,8 +2255,8 @@ F1 .535(Display Err)144 679.2 R .535(or if Null or Unset)-.18 F F0 5.535
  written to the standard error and the shell, if it is not)3.932 F
 (interacti)144 703.2 Q -.15(ve)-.25 G 2.5(,e).15 G 2.5(xits. Otherwise,)
 -2.65 F(the v)2.5 E(alue of)-.25 E F2(par)2.5 E(ameter)-.15 E F0
-(is substituted.)2.5 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E
-(17)185.115 E 0 Cg EP
+(is substituted.)2.5 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)
+-.15 G(mber 27).15 E(17)185.545 E 0 Cg EP
 %%Page: 18 18
 %%BeginPageSetup
 BP
@@ -2296,432 +2304,440 @@ F0 .111(is tak)2.61 F .111(en relati)-.1 F .411 -.15(ve t)-.25 H 2.611
 -.25(ff).15 G .92(set must be separated from the colon by at least one)
 .25 F .64(space to a)144 252 R -.2(vo)-.2 G .641
 (id being confused with the :- e).2 F 3.141(xpansion. Substring)-.15 F
-(inde)3.141 E .641(xing is zero-based unless the)-.15 F
-(positional parameters are used, in which case the inde)144 264 Q
-(xing starts at 1.)-.15 E(${)108 280.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2
-(*)A F0(})A(${)108 292.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(@)A F0(})A
-.42(Expands to the names of v)144 304.8 R .42(ariables whose names be)
--.25 F .42(gin with)-.15 F F1(pr)2.92 E(e\214x)-.37 E F0 2.92(,s)C .42
-(eparated by the \214rst character)-2.92 F(of the)144 316.8 Q F3(IFS)2.5
-E F0(special v)2.25 E(ariable.)-.25 E(${)108 333.6 Q F2(!)A F1(name)A F0
-([)A F1(@)A F0(]})A(${)108 345.6 Q F2(!)A F1(name)A F0([)A F1(*)A F0(]})
-A(If)144 357.6 Q F1(name)2.921 E F0 .421(is an array v)2.921 F .421
-(ariable, e)-.25 F .421(xpands to the list of array indices \(k)-.15 F
--.15(ey)-.1 G .421(s\) assigned in).15 F F1(name)2.921 E F0 5.422(.I)C
-(f)-5.422 E F1(name)2.922 E F0 .238(is not an array)144 369.6 R 2.738
-(,e)-.65 G .238(xpands to 0 if)-2.888 F F1(name)2.738 E F0 .237
+(inde)3.141 E .641(xing is zero-based unless the)-.15 F .299
+(positional parameters are used, in which case the inde)144 264 R .299
+(xing starts at 1 by def)-.15 F 2.799(ault. If)-.1 F F1(of)2.799 E(fset)
+-.18 E F0 .298(is 0, and)2.799 F(the positional parameters are used,)144
+276 Q F2($0)2.5 E F0(is pre\214x)2.5 E(ed to the list.)-.15 E(${)108
+292.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A F0(})A(${)108 304.8 Q F2(!)A
+F1(pr)A(e\214x)-.37 E F2(@)A F0(})A .42(Expands to the names of v)144
+316.8 R .42(ariables whose names be)-.25 F .42(gin with)-.15 F F1(pr)
+2.92 E(e\214x)-.37 E F0 2.92(,s)C .42(eparated by the \214rst character)
+-2.92 F .099(of the)144 328.8 R F3(IFS)2.599 E F0 .099(special v)2.349 F
+2.599(ariable. When)-.25 F F1(@)2.599 E F0 .098(is used and the e)2.599
+F .098(xpansion appears within double quotes, each)-.15 F -.25(va)144
+340.8 S(riable name e).25 E(xpands to a separate w)-.15 E(ord.)-.1 E(${)
+108 357.6 Q F2(!)A F1(name)A F0([)A F1(@)A F0(]})A(${)108 369.6 Q F2(!)A
+F1(name)A F0([)A F1(*)A F0(]})A(If)144 381.6 Q F1(name)2.921 E F0 .421
+(is an array v)2.921 F .421(ariable, e)-.25 F .421
+(xpands to the list of array indices \(k)-.15 F -.15(ey)-.1 G .421
+(s\) assigned in).15 F F1(name)2.921 E F0 5.422(.I)C(f)-5.422 E F1(name)
+2.922 E F0 .238(is not an array)144 393.6 R 2.738(,e)-.65 G .238
+(xpands to 0 if)-2.888 F F1(name)2.738 E F0 .237
 (is set and null otherwise.)2.738 F(When)5.237 E F1(@)2.737 E F0 .237
 (is used and the e)2.737 F(xpansion)-.15 E
-(appears within double quotes, each k)144 381.6 Q .3 -.15(ey ex)-.1 H
-(pands to a separate w).15 E(ord.)-.1 E(${)108 398.4 Q F2(#)A F1(par)A
-(ameter)-.15 E F0(})A 1.391(The length in characters of the v)144 410.4
+(appears within double quotes, each k)144 405.6 Q .3 -.15(ey ex)-.1 H
+(pands to a separate w).15 E(ord.)-.1 E(${)108 422.4 Q F2(#)A F1(par)A
+(ameter)-.15 E F0(})A 1.391(The length in characters of the v)144 434.4
 R 1.392(alue of)-.25 F F1(par)3.892 E(ameter)-.15 E F0 1.392
 (is substituted.)3.892 F(If)6.392 E F1(par)5.142 E(ameter)-.15 E F0(is)
 4.622 E F2(*)3.892 E F0(or)3.892 E F2(@)3.892 E F0 3.892(,t)C(he)-3.892
-E -.25(va)144 422.4 S 1.749
+E -.25(va)144 446.4 S 1.749
 (lue substituted is the number of positional parameters.).25 F(If)6.749
 E F1(par)5.498 E(ameter)-.15 E F0 1.748(is an array name sub-)4.978 F
-(scripted by)144 434.4 Q F2(*)2.5 E F0(or)2.5 E F2(@)2.5 E F0 2.5(,t)C
+(scripted by)144 458.4 Q F2(*)2.5 E F0(or)2.5 E F2(@)2.5 E F0 2.5(,t)C
 (he v)-2.5 E(alue substituted is the number of elements in the array)
--.25 E(.)-.65 E(${)108 451.2 Q F1(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)
--.37 E F0(})A(${)108 463.2 Q F1(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)
--.37 E F0(})A(The)144 475.2 Q F1(wor)3.33 E(d)-.37 E F0 .49(is e)3.76 F
+-.25 E(.)-.65 E(${)108 475.2 Q F1(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)
+-.37 E F0(})A(${)108 487.2 Q F1(par)A(ameter)-.15 E F2(##)A F1(wor)A(d)
+-.37 E F0(})A(The)144 499.2 Q F1(wor)3.33 E(d)-.37 E F0 .49(is e)3.76 F
 .491(xpanded to produce a pattern just as in pathname e)-.15 F 2.991
 (xpansion. If)-.15 F .491(the pattern matches)2.991 F .412(the be)144
-487.2 R .412(ginning of the v)-.15 F .411(alue of)-.25 F F1(par)2.911 E
+511.2 R .412(ginning of the v)-.15 F .411(alue of)-.25 F F1(par)2.911 E
 (ameter)-.15 E F0 2.911(,t).73 G .411(hen the result of the e)-2.911 F
 .411(xpansion is the e)-.15 F .411(xpanded v)-.15 F .411(alue of)-.25 F
-F1(par)145.25 499.2 Q(ameter)-.15 E F0 .607
+F1(par)145.25 523.2 Q(ameter)-.15 E F0 .607
 (with the shortest matching pattern \(the `)3.837 F(`)-.74 E F2(#)A F0
 2.087 -.74('' c)D .607(ase\) or the longest matching pattern \(the).74 F
--.74(``)144 511.2 S F2(##).74 E F0 1.654 -.74('' c)D .174
+-.74(``)144 535.2 S F2(##).74 E F0 1.654 -.74('' c)D .174
 (ase\) deleted.).74 F(If)5.174 E F1(par)3.924 E(ameter)-.15 E F0(is)
 3.404 E F2(@)2.674 E F0(or)2.674 E F2(*)2.674 E F0 2.674(,t)C .173
 (he pattern remo)-2.674 F -.25(va)-.15 G 2.673(lo).25 G .173
 (peration is applied to each posi-)-2.673 F .654
-(tional parameter in turn, and the e)144 523.2 R .654
+(tional parameter in turn, and the e)144 547.2 R .654
 (xpansion is the resultant list.)-.15 F(If)5.655 E F1(par)4.405 E
 (ameter)-.15 E F0 .655(is an array v)3.885 F(ariable)-.25 E .651
-(subscripted with)144 535.2 R F2(@)3.151 E F0(or)3.151 E F2(*)3.151 E F0
+(subscripted with)144 559.2 R F2(@)3.151 E F0(or)3.151 E F2(*)3.151 E F0
 3.151(,t)C .651(he pattern remo)-3.151 F -.25(va)-.15 G 3.151(lo).25 G
 .65(peration is applied to each member of the array in)-3.151 F
-(turn, and the e)144 547.2 Q(xpansion is the resultant list.)-.15 E(${)
-108 564 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108
-576 Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A(The)144
-588 Q F1(wor)2.618 E(d)-.37 E F0 .118(is e)2.618 F .119
+(turn, and the e)144 571.2 Q(xpansion is the resultant list.)-.15 E(${)
+108 588 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108
+600 Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A(The)144
+612 Q F1(wor)2.618 E(d)-.37 E F0 .118(is e)2.618 F .119
 (xpanded to produce a pattern just as in pathname e)-.15 F 2.619
 (xpansion. If)-.15 F .119(the pattern matches a)2.619 F 2.402
-(trailing portion of the e)144 600 R 2.402(xpanded v)-.15 F 2.401
+(trailing portion of the e)144 624 R 2.402(xpanded v)-.15 F 2.401
 (alue of)-.25 F F1(par)4.901 E(ameter)-.15 E F0 4.901(,t).73 G 2.401
 (hen the result of the e)-4.901 F 2.401(xpansion is the)-.15 F -.15(ex)
-144 612 S 1.152(panded v).15 F 1.152(alue of)-.25 F F1(par)4.902 E
+144 636 S 1.152(panded v).15 F 1.152(alue of)-.25 F F1(par)4.902 E
 (ameter)-.15 E F0 1.152(with the shortest matching pattern \(the `)4.382
 F(`)-.74 E F2(%)A F0 2.632 -.74('' c)D 1.153(ase\) or the longest).74 F
-.79(matching pattern \(the `)144 624 R(`)-.74 E F2(%%)A F0 2.27 -.74
+.79(matching pattern \(the `)144 648 R(`)-.74 E F2(%%)A F0 2.27 -.74
 ('' c)D .79(ase\) deleted.).74 F(If)5.79 E F1(par)4.54 E(ameter)-.15 E
 F0(is)4.02 E F2(@)3.29 E F0(or)3.29 E F2(*)3.29 E F0 3.29(,t)C .79
 (he pattern remo)-3.29 F -.25(va)-.15 G 3.29(lo).25 G(pera-)-3.29 E
 1.758(tion is applied to each positional parameter in turn, and the e)
-144 636 R 1.758(xpansion is the resultant list.)-.15 F(If)6.759 E F1
-(par)145.25 648 Q(ameter)-.15 E F0 .089(is an array v)3.319 F .089
+144 660 R 1.758(xpansion is the resultant list.)-.15 F(If)6.759 E F1
+(par)145.25 672 Q(ameter)-.15 E F0 .089(is an array v)3.319 F .089
 (ariable subscripted with)-.25 F F2(@)2.589 E F0(or)2.589 E F2(*)2.589 E
 F0 2.589(,t)C .089(he pattern remo)-2.589 F -.25(va)-.15 G 2.588(lo).25
 G .088(peration is applied to)-2.588 F
-(each member of the array in turn, and the e)144 660 Q
-(xpansion is the resultant list.)-.15 E(${)108 676.8 Q F1(par)A(ameter)
--.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0(})A(The)144 688.8 Q F1
+(each member of the array in turn, and the e)144 684 Q
+(xpansion is the resultant list.)-.15 E(${)108 700.8 Q F1(par)A(ameter)
+-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0(})A(The)144 712.8 Q F1
 (pattern)5.085 E F0 2.585(is e)5.085 F 2.585
 (xpanded to produce a pattern just as in pathname e)-.15 F(xpansion.)
 -.15 E F1 -.8(Pa)7.585 G -.15(ra).8 G(meter).15 E F0(is)5.085 E -.15(ex)
-144 700.8 S 1.304(panded and the longest match of).15 F F1(pattern)3.804
+144 724.8 S 1.304(panded and the longest match of).15 F F1(pattern)3.804
 E F0(ag)3.804 E 1.304(ainst its v)-.05 F 1.304(alue is replaced with)
 -.25 F F1(string)3.804 E F0 6.304(.I)C 3.804(fI)-6.304 G(pattern)-3.804
-E F1(be)144 712.8 Q 1.33(gins with)-.4 F F2(/)3.83 E F1 3.83(,a)C 1.33
-(ll matc)-3.83 F 1.33(hes of pattern ar)-.15 F 3.831(er)-.37 G 1.331
-(eplaced with string)-4.201 F 6.331(.N)-.15 G 1.331
-(ormally only the \214r)-6.331 F 1.331(st matc)-.1 F 3.831(hi)-.15 G(s)
--3.831 E -.37(re)144 724.8 S 4.69(placed. If).37 F 2.19(pattern be)4.69
-F 2.19(gins with)-.4 F F2(#)4.69 E F1 4.69(,i)C 4.69(tm)-4.69 G 2.19
-(ust matc)-4.69 F 4.69(ha)-.15 G 4.69(tt)-4.69 G 2.19(he be)-4.69 F 2.19
-(ginning of the e)-.4 F 2.19(xpanded value of)-.2 F F0(GNU Bash-3.2)72
-768 Q(2006 September 28)135.125 E(18)185.115 E 0 Cg EP
+E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(18)185.545 E 0 Cg EP
 %%Page: 19 19
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Italic@0 SF(par)144 84 Q(ameter)-.15 E 5.236(.I)-1.11
-G 2.736(fp)-5.236 G .236(attern be)-2.736 F .236(gins with)-.4 F/F2 10
-/Times-Bold@0 SF(%)2.736 E F1 2.736(,i)C 2.736(tm)-2.736 G .236
-(ust matc)-2.736 F 2.736(ha)-.15 G 2.737(tt)-2.736 G .237
-(he end of the e)-2.737 F .237(xpanded value of par)-.2 F(ameter)-.15 E
-(.)-1.11 E 1.43(If string is null, matc)144 96 R 1.43(hes of pattern ar)
--.15 F 3.929(ed)-.37 G 1.429(eleted and the)-3.929 F F2(/)3.929 E F1
-1.429(following pattern may be omitted.)3.929 F(If)6.429 E(par)145.25
-108 Q(ameter)-.15 E F0(is)3.328 E F2(@)2.598 E F0(or)2.598 E F2(*)2.598
-E F0 2.598(,t)C .098(he substitution operation is applied to each posit\
-ional parameter in turn, and)-2.598 F .64(the e)144 120 R .64
+-.35 E/F1 10/Times-Italic@0 SF(be)144 84 Q 1.33(gins with)-.4 F/F2 10
+/Times-Bold@0 SF(/)3.83 E F1 3.83(,a)C 1.33(ll matc)-3.83 F 1.33
+(hes of pattern ar)-.15 F 3.831(er)-.37 G 1.331(eplaced with string)
+-4.201 F 6.331(.N)-.15 G 1.331(ormally only the \214r)-6.331 F 1.331
+(st matc)-.1 F 3.831(hi)-.15 G(s)-3.831 E -.37(re)144 96 S 2.692
+(placed. If).37 F .192(pattern be)2.692 F .191(gins with)-.4 F F2(#)
+2.691 E F1 2.691(,i)C 2.691(tm)-2.691 G .191(ust matc)-2.691 F 2.691(ha)
+-.15 G 2.691(tt)-2.691 G .191(he be)-2.691 F .191(ginning of the e)-.4 F
+.191(xpanded value of par)-.2 F(am-)-.15 E(eter)144 108 Q 6.048(.I)-1.11
+G 3.548(fp)-6.048 G 1.048(attern be)-3.548 F 1.048(gins with)-.4 F F2(%)
+3.548 E F1 3.548(,i)C 3.548(tm)-3.548 G 1.048(ust matc)-3.548 F 3.548
+(ha)-.15 G 3.548(tt)-3.548 G 1.048(he end of the e)-3.548 F 1.049
+(xpanded value of par)-.2 F(ameter)-.15 E 6.049(.I)-1.11 G(f)-6.049 E
+2.057(string is null, matc)144 120 R 2.057(hes of pattern ar)-.15 F
+4.557(ed)-.37 G 2.057(eleted and the)-4.557 F F2(/)4.557 E F1 2.057
+(following pattern may be omitted.)4.557 F(If)7.056 E(par)145.25 132 Q
+(ameter)-.15 E F0(is)3.328 E F2(@)2.598 E F0(or)2.598 E F2(*)2.598 E F0
+2.598(,t)C .098(he substitution operation is applied to each positional\
+ parameter in turn, and)-2.598 F .64(the e)144 144 R .64
 (xpansion is the resultant list.)-.15 F(If)5.64 E F1(par)4.39 E(ameter)
 -.15 E F0 .64(is an array v)3.87 F .64(ariable subscripted with)-.25 F
 F2(@)3.14 E F0(or)3.14 E F2(*)3.14 E F0 3.14(,t)C(he)-3.14 E 1.446(subs\
 titution operation is applied to each member of the array in turn, and \
-the e)144 132 R 1.447(xpansion is the)-.15 F(resultant list.)144 144 Q
-F2(Command Substitution)87 160.8 Q F1 1.698(Command substitution)108
-172.8 R F0(allo)4.198 E 1.697
+the e)144 156 R 1.447(xpansion is the)-.15 F(resultant list.)144 168 Q
+F2(Command Substitution)87 184.8 Q F1 1.698(Command substitution)108
+196.8 R F0(allo)4.198 E 1.697
 (ws the output of a command to replace the command name.)-.25 F 1.697
-(There are tw)6.697 F(o)-.1 E(forms:)108 184.8 Q F2($\()144 206.4 Q F1
-(command)A F2(\))1.666 E F0(or)108 218.4 Q F2(`)144 230.4 Q F1(command)A
-F2(`)A(Bash)108 247.2 Q F0 .019(performs the e)2.519 F .019
+(There are tw)6.697 F(o)-.1 E(forms:)108 208.8 Q F2($\()144 230.4 Q F1
+(command)A F2(\))1.666 E F0(or)108 242.4 Q F2(`)144 254.4 Q F1(command)A
+F2(`)A(Bash)108 271.2 Q F0 .019(performs the e)2.519 F .019
 (xpansion by e)-.15 F -.15(xe)-.15 G(cuting).15 E F1(command)2.519 E F0
 .02(and replacing the command substitution with the stan-)2.519 F .768
-(dard output of the command, with an)108 259.2 R 3.268(yt)-.15 G .768
+(dard output of the command, with an)108 283.2 R 3.268(yt)-.15 G .768
 (railing ne)-3.268 F .768(wlines deleted.)-.25 F .768(Embedded ne)5.768
-F .768(wlines are not deleted, b)-.25 F(ut)-.2 E(the)108 271.2 Q 3.218
+F .768(wlines are not deleted, b)-.25 F(ut)-.2 E(the)108 295.2 Q 3.218
 (ym)-.15 G .718(ay be remo)-3.218 F -.15(ve)-.15 G 3.218(dd).15 G .719
 (uring w)-3.218 F .719(ord splitting.)-.1 F .719
 (The command substitution)5.719 F F2($\(cat)3.219 E F1(\214le)3.219 E F2
-(\))A F0 .719(can be replaced by the)3.219 F(equi)108 283.2 Q -.25(va)
+(\))A F0 .719(can be replaced by the)3.219 F(equi)108 307.2 Q -.25(va)
 -.25 G(lent b).25 E(ut f)-.2 E(aster)-.1 E F2($\(<)2.5 E F1(\214le)2.5 E
 F2(\))A F0(.)A 1.724(When the old-style backquote form of substitution \
-is used, backslash retains its literal meaning e)108 300 R(xcept)-.15 E
-.314(when follo)108 312 R .314(wed by)-.25 F F2($)2.814 E F0(,)A F2(`)
+is used, backslash retains its literal meaning e)108 324 R(xcept)-.15 E
+.314(when follo)108 336 R .314(wed by)-.25 F F2($)2.814 E F0(,)A F2(`)
 2.814 E F0 2.814(,o)C(r)-2.814 E F2(\\)2.814 E F0 5.314(.T)C .315(he \
 \214rst backquote not preceded by a backslash terminates the command su\
-b-)-5.314 F 3.887(stitution. When)108 324 R 1.387(using the $\()3.887 F
+b-)-5.314 F 3.887(stitution. When)108 348 R 1.387(using the $\()3.887 F
 F1(command).833 E F0 3.887(\)f)1.666 G 1.386
 (orm, all characters between the parentheses mak)-3.887 F 3.886(eu)-.1 G
 3.886(pt)-3.886 G 1.386(he com-)-3.886 F
-(mand; none are treated specially)108 336 Q(.)-.65 E .894
-(Command substitutions may be nested.)108 352.8 R 2.494 -.8(To n)5.894 H
+(mand; none are treated specially)108 360 Q(.)-.65 E .894
+(Command substitutions may be nested.)108 376.8 R 2.494 -.8(To n)5.894 H
 .894(est when using the backquoted form, escape the inner back-).8 F
-(quotes with backslashes.)108 364.8 Q .422
-(If the substitution appears within double quotes, w)108 381.6 R .422
+(quotes with backslashes.)108 388.8 Q .422
+(If the substitution appears within double quotes, w)108 405.6 R .422
 (ord splitting and pathname e)-.1 F .422(xpansion are not performed)-.15
-F(on the results.)108 393.6 Q F2(Arithmetic Expansion)87 410.4 Q F0
-1.034(Arithmetic e)108 422.4 R 1.034(xpansion allo)-.15 F 1.034
+F(on the results.)108 417.6 Q F2(Arithmetic Expansion)87 434.4 Q F0
+1.034(Arithmetic e)108 446.4 R 1.034(xpansion allo)-.15 F 1.034
 (ws the e)-.25 F -.25(va)-.25 G 1.034(luation of an arithmetic e).25 F
 1.035(xpression and the substitution of the result.)-.15 F
-(The format for arithmetic e)108 434.4 Q(xpansion is:)-.15 E F2($\(\()
-144 451.2 Q F1 -.2(ex)C(pr).2 E(ession)-.37 E F2(\)\))A F0(The)108 468 Q
+(The format for arithmetic e)108 458.4 Q(xpansion is:)-.15 E F2($\(\()
+144 475.2 Q F1 -.2(ex)C(pr).2 E(ession)-.37 E F2(\)\))A F0(The)108 492 Q
 F1 -.2(ex)2.666 G(pr).2 E(ession)-.37 E F0 .165
 (is treated as if it were within double quotes, b)2.906 F .165
 (ut a double quote inside the parentheses is not)-.2 F 1.074
-(treated specially)108 480 R 6.074(.A)-.65 G 1.074(ll tok)-6.074 F 1.074
+(treated specially)108 504 R 6.074(.A)-.65 G 1.074(ll tok)-6.074 F 1.074
 (ens in the e)-.1 F 1.074(xpression under)-.15 F 1.074(go parameter e)
 -.18 F 1.074(xpansion, string e)-.15 F 1.075(xpansion, command)-.15 F
-(substitution, and quote remo)108 492 Q -.25(va)-.15 G 2.5
+(substitution, and quote remo)108 516 Q -.25(va)-.15 G 2.5
 (l. Arithmetic).25 F -.15(ex)2.5 G(pansions may be nested.).15 E 1.379
-(The e)108 508.8 R -.25(va)-.25 G 1.378
+(The e)108 532.8 R -.25(va)-.25 G 1.378
 (luation is performed according to the rules listed belo).25 F 3.878(wu)
 -.25 G(nder)-3.878 E/F3 9/Times-Bold@0 SF 1.378(ARITHMETIC EV)3.878 F
 (ALU)-1.215 E -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0
-(If)5.878 E F1 -.2(ex)108 520.8 S(pr).2 E(ession)-.37 E F0(is in)2.74 E
+(If)5.878 E F1 -.2(ex)108 544.8 S(pr).2 E(ession)-.37 E F0(is in)2.74 E
 -.25(va)-.4 G(lid,).25 E F2(bash)2.5 E F0(prints a message indicating f)
-2.5 E(ailure and no substitution occurs.)-.1 E F2(Pr)87 537.6 Q
-(ocess Substitution)-.18 E F1(Pr)108 549.6 Q .97(ocess substitution)-.45
+2.5 E(ailure and no substitution occurs.)-.1 E F2(Pr)87 561.6 Q
+(ocess Substitution)-.18 E F1(Pr)108 573.6 Q .97(ocess substitution)-.45
 F F0 .971(is supported on systems that support named pipes \()3.47 F F1
 (FIFOs)A F0 3.471(\)o)C 3.471(rt)-3.471 G(he)-3.471 E F2(/de)3.471 E
 (v/fd)-.15 E F0 .971(method of)3.471 F .022(naming open \214les.)108
-561.6 R .021(It tak)5.022 F .021(es the form of)-.1 F F2(<\()2.521 E F1
+585.6 R .021(It tak)5.022 F .021(es the form of)-.1 F F2(<\()2.521 E F1
 (list)A F2(\)).833 E F0(or)2.521 E F2(>\()2.521 E F1(list)A F2(\)).833 E
 F0 5.021(.T)C .021(he process)-5.021 F F1(list)2.521 E F0 .021
-(is run with its input or output con-)2.521 F .058(nected to a)108 573.6
+(is run with its input or output con-)2.521 F .058(nected to a)108 597.6
 R F1(FIFO)2.558 E F0 .058(or some \214le in)2.558 F F2(/de)2.558 E(v/fd)
 -.15 E F0 5.058(.T)C .058(he name of this \214le is passed as an ar)
 -5.058 F .059(gument to the current com-)-.18 F .131
-(mand as the result of the e)108 585.6 R 2.631(xpansion. If)-.15 F(the)
+(mand as the result of the e)108 609.6 R 2.631(xpansion. If)-.15 F(the)
 2.63 E F2(>\()2.63 E F1(list)A F2(\)).833 E F0 .13
 (form is used, writing to the \214le will pro)2.63 F .13(vide input for)
--.15 F F1(list)2.63 E F0(.)A(If the)108 597.6 Q F2(<\()2.5 E F1(list)A
+-.15 F F1(list)2.63 E F0(.)A(If the)108 621.6 Q F2(<\()2.5 E F1(list)A
 F2(\)).833 E F0(form is used, the \214le passed as an ar)2.5 E
 (gument should be read to obtain the output of)-.18 E F1(list)2.5 E F0
-(.)A .896(When a)108 614.4 R -.25(va)-.2 G .896(ilable, process substit\
+(.)A .896(When a)108 638.4 R -.25(va)-.2 G .896(ilable, process substit\
 ution is performed simultaneously with parameter and v).25 F .897
 (ariable e)-.25 F(xpansion,)-.15 E
-(command substitution, and arithmetic e)108 626.4 Q(xpansion.)-.15 E F2
--.75(Wo)87 643.2 S(rd Splitting).75 E F0 1.143
-(The shell scans the results of parameter e)108 655.2 R 1.142
+(command substitution, and arithmetic e)108 650.4 Q(xpansion.)-.15 E F2
+-.75(Wo)87 667.2 S(rd Splitting).75 E F0 1.143
+(The shell scans the results of parameter e)108 679.2 R 1.142
 (xpansion, command substitution, and arithmetic e)-.15 F 1.142
-(xpansion that)-.15 F(did not occur within double quotes for)108 667.2 Q
+(xpansion that)-.15 F(did not occur within double quotes for)108 691.2 Q
 F1(wor)2.5 E 2.5(ds)-.37 G(plitting)-2.5 E F0(.).22 E .063
-(The shell treats each character of)108 684 R F3(IFS)2.563 E F0 .063
+(The shell treats each character of)108 708 R F3(IFS)2.563 E F0 .063
 (as a delimiter)2.313 F 2.563(,a)-.4 G .063
 (nd splits the results of the other e)-2.563 F .063(xpansions into w)
--.15 F(ords)-.1 E .628(on these characters.)108 696 R(If)5.628 E F3(IFS)
+-.15 F(ords)-.1 E .628(on these characters.)108 720 R(If)5.628 E F3(IFS)
 3.128 E F0 .627(is unset, or its v)2.877 F .627(alue is e)-.25 F(xactly)
 -.15 E F2(<space><tab><newline>)3.127 E F0 3.127(,t)C .627(he def)-3.127
-F .627(ault, then an)-.1 F(y)-.15 E 2.527(sequence of)108 708 R F3(IFS)
-5.027 E F0 2.527(characters serv)4.777 F 2.527(es to delimit w)-.15 F
-5.027(ords. If)-.1 F F3(IFS)5.027 E F0 2.527(has a v)4.777 F 2.527
-(alue other than the def)-.25 F 2.528(ault, then)-.1 F .363
-(sequences of the whitespace characters)108 720 R F2(space)2.863 E F0
-(and)2.863 E F2(tab)2.863 E F0 .363(are ignored at the be)2.863 F .362
-(ginning and end of the w)-.15 F .362(ord, as)-.1 F(GNU Bash-3.2)72 768
-Q(2006 September 28)135.125 E(19)185.115 E 0 Cg EP
+F .627(ault, then an)-.1 F(y)-.15 E(GNU Bash-3.2)72 768 Q(2006 No)
+135.555 E -.15(ve)-.15 G(mber 27).15 E(19)185.545 E 0 Cg EP
 %%Page: 20 20
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E .334(long as the whitespace character is in the v)108 84 R .334
-(alue of)-.25 F/F1 9/Times-Bold@0 SF(IFS)2.834 E F0(\(an)2.584 E F1(IFS)
-2.834 E F0 .335(whitespace character\).)2.585 F(An)5.335 E 2.835(yc)-.15
-G .335(haracter in)-2.835 F F1(IFS)2.835 E F0 .296(that is not)108 96 R
-F1(IFS)2.795 E F0 .295(whitespace, along with an)2.545 F 2.795(ya)-.15 G
+-.35 E 2.527(sequence of)108 84 R/F1 9/Times-Bold@0 SF(IFS)5.027 E F0
+2.527(characters serv)4.777 F 2.527(es to delimit w)-.15 F 5.027
+(ords. If)-.1 F F1(IFS)5.027 E F0 2.527(has a v)4.777 F 2.527
+(alue other than the def)-.25 F 2.528(ault, then)-.1 F .363
+(sequences of the whitespace characters)108 96 R/F2 10/Times-Bold@0 SF
+(space)2.863 E F0(and)2.863 E F2(tab)2.863 E F0 .363
+(are ignored at the be)2.863 F .362(ginning and end of the w)-.15 F .362
+(ord, as)-.1 F .334(long as the whitespace character is in the v)108 108
+R .334(alue of)-.25 F F1(IFS)2.834 E F0(\(an)2.584 E F1(IFS)2.834 E F0
+.335(whitespace character\).)2.585 F(An)5.335 E 2.835(yc)-.15 G .335
+(haracter in)-2.835 F F1(IFS)2.835 E F0 .296(that is not)108 120 R F1
+(IFS)2.795 E F0 .295(whitespace, along with an)2.545 F 2.795(ya)-.15 G
 (djacent)-2.795 E F1(IFS)2.795 E F0 .295
 (whitespace characters, delimits a \214eld.)2.545 F 2.795(As)5.295 G
-(equence)-2.795 E(of)108 108 Q F1(IFS)3.752 E F0 1.252
+(equence)-2.795 E(of)108 132 Q F1(IFS)3.752 E F0 1.252
 (whitespace characters is also treated as a delimiter)3.502 F 6.252(.I)
 -.55 G 3.752(ft)-6.252 G 1.252(he v)-3.752 F 1.252(alue of)-.25 F F1
 (IFS)3.752 E F0 1.253(is null, no w)3.502 F 1.253(ord splitting)-.1 F
-(occurs.)108 120 Q 1.879(Explicit null ar)108 136.8 R 1.879(guments \()
--.18 F/F2 10/Times-Bold@0 SF .833("").833 G F0(or)3.545 E F2 .833<0808>
-5.211 G F0 4.378(\)a)C 1.878(re retained.)-4.378 F 1.878
-(Unquoted implicit null ar)6.878 F 1.878(guments, resulting from the)
--.18 F -.15(ex)108 148.8 S .176(pansion of parameters that ha).15 F .476
--.15(ve n)-.2 H 2.676(ov).15 G .176(alues, are remo)-2.926 F -.15(ve)
--.15 G 2.676(d. If).15 F 2.677(ap)2.677 G .177(arameter with no v)-2.677
-F .177(alue is e)-.25 F .177(xpanded within)-.15 F
-(double quotes, a null ar)108 160.8 Q(gument results and is retained.)
--.18 E(Note that if no e)108 177.6 Q
-(xpansion occurs, no splitting is performed.)-.15 E F2 -.1(Pa)87 194.4 S
-(thname Expansion).1 E F0 .371(After w)108 206.4 R .371
+(occurs.)108 144 Q 1.879(Explicit null ar)108 160.8 R 1.879(guments \()
+-.18 F F2 .833("").833 G F0(or)3.545 E F2 .833<0808>5.211 G F0 4.378
+(\)a)C 1.878(re retained.)-4.378 F 1.878(Unquoted implicit null ar)6.878
+F 1.878(guments, resulting from the)-.18 F -.15(ex)108 172.8 S .176
+(pansion of parameters that ha).15 F .476 -.15(ve n)-.2 H 2.676(ov).15 G
+.176(alues, are remo)-2.926 F -.15(ve)-.15 G 2.676(d. If).15 F 2.677(ap)
+2.677 G .177(arameter with no v)-2.677 F .177(alue is e)-.25 F .177
+(xpanded within)-.15 F(double quotes, a null ar)108 184.8 Q
+(gument results and is retained.)-.18 E(Note that if no e)108 201.6 Q
+(xpansion occurs, no splitting is performed.)-.15 E F2 -.1(Pa)87 218.4 S
+(thname Expansion).1 E F0 .371(After w)108 230.4 R .371
 (ord splitting, unless the)-.1 F F2<ad66>2.871 E F0 .371
 (option has been set,)2.871 F F2(bash)2.871 E F0 .37(scans each w)2.87 F
 .37(ord for the characters)-.1 F F2(*)2.87 E F0(,)A F2(?)2.87 E F0 2.87
 (,a)C(nd)-2.87 E F2([)2.87 E F0(.)A .677
-(If one of these characters appears, then the w)108 218.4 R .677
+(If one of these characters appears, then the w)108 242.4 R .677
 (ord is re)-.1 F -.05(ga)-.15 G .677(rded as a).05 F/F3 10
 /Times-Italic@0 SF(pattern)3.177 E F0 3.177(,a).24 G .678
 (nd replaced with an alphabeti-)-3.177 F 1.457
-(cally sorted list of \214le names matching the pattern.)108 230.4 R
+(cally sorted list of \214le names matching the pattern.)108 254.4 R
 1.456(If no matching \214le names are found, and the shell)6.457 F
-(option)108 242.4 Q F2(nullglob)3.265 E F0 .765(is disabled, the w)3.265
+(option)108 266.4 Q F2(nullglob)3.265 E F0 .765(is disabled, the w)3.265
 F .765(ord is left unchanged.)-.1 F .765(If the)5.765 F F2(nullglob)
 3.265 E F0 .765(option is set, and no matches are)3.265 F .306
-(found, the w)108 254.4 R .306(ord is remo)-.1 F -.15(ve)-.15 G 2.806
+(found, the w)108 278.4 R .306(ord is remo)-.1 F -.15(ve)-.15 G 2.806
 (d. If).15 F(the)2.805 E F2(failglob)2.805 E F0 .305
 (shell option is set, and no matches are found, an error message)2.805 F
-.928(is printed and the command is not e)108 266.4 R -.15(xe)-.15 G
+.928(is printed and the command is not e)108 290.4 R -.15(xe)-.15 G
 3.428(cuted. If).15 F .928(the shell option)3.428 F F2(nocaseglob)3.428
 E F0 .929(is enabled, the match is per)3.429 F(-)-.2 E .033
-(formed without re)108 278.4 R -.05(ga)-.15 G .033
+(formed without re)108 302.4 R -.05(ga)-.15 G .033
 (rd to the case of alphabetic characters.).05 F .032
 (When a pattern is used for pathname e)5.032 F(xpansion,)-.15 E .104
-(the character)108 290.4 R F2 -.63(``)2.604 G -.55(.').63 G(')-.08 E F0
+(the character)108 314.4 R F2 -.63(``)2.604 G -.55(.').63 G(')-.08 E F0
 .104(at the start of a name or immediately follo)5.104 F .105
 (wing a slash must be matched e)-.25 F(xplicitly)-.15 E 2.605(,u)-.65 G
-(nless)-2.605 E .888(the shell option)108 302.4 R F2(dotglob)3.388 E F0
+(nless)-2.605 E .888(the shell option)108 326.4 R F2(dotglob)3.388 E F0
 .888(is set.)3.388 F .887
 (When matching a pathname, the slash character must al)5.888 F -.1(wa)
--.1 G .887(ys be matched).1 F -.15(ex)108 314.4 S(plicitly).15 E 6.165
+-.1 G .887(ys be matched).1 F -.15(ex)108 338.4 S(plicitly).15 E 6.165
 (.I)-.65 G 3.665(no)-6.165 G 1.165(ther cases, the)-3.665 F F2 -.63(``)
 3.665 G -.55(.').63 G(')-.08 E F0 1.166
 (character is not treated specially)6.165 F 6.166(.S)-.65 G 1.166
 (ee the description of)-6.166 F F2(shopt)3.666 E F0(belo)3.666 E(w)-.25
-E(under)108 326.4 Q F1 .478(SHELL B)2.978 F(UIL)-.09 E .478
+E(under)108 350.4 Q F1 .478(SHELL B)2.978 F(UIL)-.09 E .478
 (TIN COMMANDS)-.828 F F0 .477(for a description of the)2.728 F F2
 (nocaseglob)2.977 E F0(,)A F2(nullglob)2.977 E F0(,)A F2(failglob)2.977
 E F0 2.977(,a)C(nd)-2.977 E F2(dotglob)2.977 E F0(shell options.)108
-338.4 Q(The)108 355.2 Q F1(GLOBIGNORE)2.63 E F0 .13(shell v)2.38 F .131
+362.4 Q(The)108 379.2 Q F1(GLOBIGNORE)2.63 E F0 .13(shell v)2.38 F .131
 (ariable may be used to restrict the set of \214le names matching a)-.25
 F F3(pattern)2.631 E F0 5.131(.I).24 G(f)-5.131 E F1(GLO-)2.631 E
-(BIGNORE)108 367.2 Q F0 2.015(is set, each matching \214le name that al\
+(BIGNORE)108 391.2 Q F0 2.015(is set, each matching \214le name that al\
 so matches one of the patterns in)4.265 F F1(GLOBIGNORE)4.515 E F0(is)
-4.264 E(remo)108 379.2 Q -.15(ve)-.15 G 2.503(df).15 G .003
+4.264 E(remo)108 403.2 Q -.15(ve)-.15 G 2.503(df).15 G .003
 (rom the list of matches.)-2.503 F .003(The \214le names)5.003 F F2 -.63
 (``)2.503 G -.55(.').63 G(')-.08 E F0(and)5.003 E F2 -.63(``)2.503 G(..)
 .63 E -.63('')-.55 G F0 .004(are al)5.633 F -.1(wa)-.1 G .004
 (ys ignored when).1 F F1(GLOBIGNORE)2.504 E F0(is)2.254 E .046
-(set and not null.)108 391.2 R(Ho)5.046 E(we)-.25 E -.15(ve)-.25 G .846
+(set and not null.)108 415.2 R(Ho)5.046 E(we)-.25 E -.15(ve)-.25 G .846
 -.4(r, s).15 H(etting).4 E F1(GLOBIGNORE)2.546 E F0 .046
 (to a non-null v)2.296 F .045(alue has the ef)-.25 F .045
 (fect of enabling the)-.25 F F2(dotglob)2.545 E F0 .613
-(shell option, so all other \214le names be)108 403.2 R .614
+(shell option, so all other \214le names be)108 427.2 R .614
 (ginning with a)-.15 F F2 -.63(``)3.114 G -.55(.').63 G(')-.08 E F0 .614
 (will match.)5.614 F 2.214 -.8(To g)5.614 H .614(et the old beha).8 F
-.614(vior of ignoring)-.2 F .457(\214le names be)108 415.2 R .457
+.614(vior of ignoring)-.2 F .457(\214le names be)108 439.2 R .457
 (ginning with a)-.15 F F2 -.63(``)2.957 G -.55(.').63 G(')-.08 E F0
 2.957(,m)C(ak)-2.957 E(e)-.1 E F2 -.63(``)2.957 G(.*').63 E(')-.63 E F0
 .457(one of the patterns in)5.457 F F1(GLOBIGNORE)2.957 E/F4 9
 /Times-Roman@0 SF(.)A F0(The)4.957 E F2(dotglob)2.956 E F0 .456
-(option is)2.956 F(disabled when)108 427.2 Q F1(GLOBIGNORE)2.5 E F0
-(is unset.)2.25 E F2 -.1(Pa)108 444 S(tter).1 E 2.5(nM)-.15 G(atching)
--2.5 E F0(An)108 460.8 Q 3.138(yc)-.15 G .638(haracter that appears in \
+(option is)2.956 F(disabled when)108 451.2 Q F1(GLOBIGNORE)2.5 E F0
+(is unset.)2.25 E F2 -.1(Pa)108 468 S(tter).1 E 2.5(nM)-.15 G(atching)
+-2.5 E F0(An)108 484.8 Q 3.138(yc)-.15 G .638(haracter that appears in \
 a pattern, other than the special pattern characters described belo)
--3.138 F 1.938 -.65(w, m)-.25 H(atches).65 E 3.62(itself. The)108 472.8
+-3.138 F 1.938 -.65(w, m)-.25 H(atches).65 E 3.62(itself. The)108 496.8
 R 1.12(NUL character may not occur in a pattern.)3.62 F 3.62(Ab)6.12 G
 1.12(ackslash escapes the follo)-3.62 F 1.12(wing character; the)-.25 F
-.576(escaping backslash is discarded when matching.)108 484.8 R .576
+.576(escaping backslash is discarded when matching.)108 508.8 R .576
 (The special pattern characters must be quoted if the)5.576 F 3.076(ya)
--.15 G(re)-3.076 E(to be matched literally)108 496.8 Q(.)-.65 E
-(The special pattern characters ha)108 513.6 Q .3 -.15(ve t)-.2 H
-(he follo).15 E(wing meanings:)-.25 E F2(*)108 530.4 Q F0(Matches an)31
-E 2.5(ys)-.15 G(tring, including the null string.)-2.5 E F2(?)108 542.4
+-.15 G(re)-3.076 E(to be matched literally)108 520.8 Q(.)-.65 E
+(The special pattern characters ha)108 537.6 Q .3 -.15(ve t)-.2 H
+(he follo).15 E(wing meanings:)-.25 E F2(*)108 554.4 Q F0(Matches an)31
+E 2.5(ys)-.15 G(tring, including the null string.)-2.5 E F2(?)108 566.4
 Q F0(Matches an)31 E 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E F2
-([...])108 554.4 Q F0 .257(Matches an)21.84 F 2.757(yo)-.15 G .257
+([...])108 578.4 Q F0 .257(Matches an)21.84 F 2.757(yo)-.15 G .257
 (ne of the enclosed characters.)-2.757 F 2.757(Ap)5.257 G .257
 (air of characters separated by a h)-2.757 F .256(yphen denotes a)-.05 F
-F3 -.15(ra)144 566.4 S(ng).15 E 3.289(ee)-.1 G(xpr)-3.489 E(ession)-.37
+F3 -.15(ra)144 590.4 S(ng).15 E 3.289(ee)-.1 G(xpr)-3.489 E(ession)-.37
 E F0 3.289(;a)C 1.089 -.15(ny c)-3.289 H .789
 (haracter that sorts between those tw).15 F 3.289(oc)-.1 G .789
 (haracters, inclusi)-3.289 F -.15(ve)-.25 G 3.29(,u).15 G .79
-(sing the cur)-3.29 F(-)-.2 E .35(rent locale')144 578.4 R 2.85(sc)-.55
+(sing the cur)-3.29 F(-)-.2 E .35(rent locale')144 602.4 R 2.85(sc)-.55
 G .35(ollating sequence and character set, is matched.)-2.85 F .349
 (If the \214rst character follo)5.349 F .349(wing the)-.25 F F2([)2.849
-E F0 .563(is a)144 590.4 R F2(!)3.063 E F0 .563(or a)5.563 F F2(^)3.063
+E F0 .563(is a)144 614.4 R F2(!)3.063 E F0 .563(or a)5.563 F F2(^)3.063
 E F0 .564(then an)3.063 F 3.064(yc)-.15 G .564
 (haracter not enclosed is matched.)-3.064 F .564
-(The sorting order of characters in range)5.564 F -.15(ex)144 602.4 S
+(The sorting order of characters in range)5.564 F -.15(ex)144 626.4 S
 1.102(pressions is determined by the current locale and the v).15 F
 1.102(alue of the)-.25 F F2(LC_COLLA)3.602 E(TE)-.95 E F0 1.102(shell v)
-3.602 F(ari-)-.25 E .088(able, if set.)144 614.4 R(A)5.088 E F2<ad>2.588
+3.602 F(ari-)-.25 E .088(able, if set.)144 638.4 R(A)5.088 E F2<ad>2.588
 E F0 .088(may be matched by including it as the \214rst or last charact\
 er in the set.)2.588 F(A)5.089 E F2(])2.589 E F0 .089(may be)2.589 F
-(matched by including it as the \214rst character in the set.)144 626.4
-Q -.4(Wi)144 644.4 S(thin).4 E F2([)2.915 E F0(and)2.915 E F2(])2.915 E
+(matched by including it as the \214rst character in the set.)144 650.4
+Q -.4(Wi)144 668.4 S(thin).4 E F2([)2.915 E F0(and)2.915 E F2(])2.915 E
 F0(,)A F3 -.15(ch)2.915 G(ar).15 E .415(acter classes)-.15 F F0 .415
 (can be speci\214ed using the syntax)2.915 F F2([:)2.915 E F3(class)A F2
 (:])A F0 2.914(,w)C(here)-2.914 E F3(class)2.914 E F0 .414(is one of)
-2.914 F(the follo)144 656.4 Q
+2.914 F(the follo)144 680.4 Q
 (wing classes de\214ned in the POSIX standard:)-.25 E F2 5.421
-(alnum alpha ascii blank cntrl digit graph lo)144 668.4 R 5.421
-(wer print punct space upper w)-.1 F(ord)-.1 E(xdigit)144 680.4 Q F0
-2.519(Ac)144 692.4 S .019(haracter class matches an)-2.519 F 2.519(yc)
+(alnum alpha ascii blank cntrl digit graph lo)144 692.4 R 5.421
+(wer print punct space upper w)-.1 F(ord)-.1 E(xdigit)144 704.4 Q F0
+2.519(Ac)144 716.4 S .019(haracter class matches an)-2.519 F 2.519(yc)
 -.15 G .019(haracter belonging to that class.)-2.519 F(The)5.018 E F2
 -.1(wo)2.518 G(rd).1 E F0 .018(character class matches)2.518 F
-(letters, digits, and the character _.)144 704.4 Q -.4(Wi)144 722.4 S
-(thin).4 E F2([)3.546 E F0(and)3.546 E F2(])3.546 E F0 3.546(,a)C(n)
--3.546 E F3 1.046(equivalence class)3.546 F F0 1.046
-(can be speci\214ed using the syntax)3.546 F F2([=)3.547 E F3(c)A F2(=])
-A F0 3.547(,w)C 1.047(hich matches all)-3.547 F(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(20)185.115 E 0 Cg EP
+(letters, digits, and the character _.)144 728.4 Q(GNU Bash-3.2)72 768 Q
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(20)185.545 E 0 Cg EP
 %%Page: 21 21
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E(characters with the same collation weight \(as de\214ned by the \
-current locale\) as the character)144 84 Q/F1 10/Times-Italic@0 SF(c)2.5
-E F0(.)A -.4(Wi)144 102 S(thin).4 E/F2 10/Times-Bold@0 SF([)2.5 E F0
-(and)2.5 E F2(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F2([.)2.5 E F1
-(symbol)A F2(.])A F0(matches the collating symbol)2.5 E F1(symbol)2.5 E
-F0(.)A .705(If the)108 118.8 R F2(extglob)3.205 E F0 .705
-(shell option is enabled using the)3.205 F F2(shopt)3.205 E F0 -.2(bu)
+-.35 E -.4(Wi)144 84 S(thin).4 E/F1 10/Times-Bold@0 SF([)3.546 E F0(and)
+3.546 E F1(])3.546 E F0 3.546(,a)C(n)-3.546 E/F2 10/Times-Italic@0 SF
+1.046(equivalence class)3.546 F F0 1.046
+(can be speci\214ed using the syntax)3.546 F F1([=)3.547 E F2(c)A F1(=])
+A F0 3.547(,w)C 1.047(hich matches all)-3.547 F(characters with the sam\
+e collation weight \(as de\214ned by the current locale\) as the charac\
+ter)144 96 Q F2(c)2.5 E F0(.)A -.4(Wi)144 114 S(thin).4 E F1([)2.5 E F0
+(and)2.5 E F1(])2.5 E F0 2.5(,t)C(he syntax)-2.5 E F1([.)2.5 E F2
+(symbol)A F1(.])A F0(matches the collating symbol)2.5 E F2(symbol)2.5 E
+F0(.)A .705(If the)108 130.8 R F1(extglob)3.205 E F0 .705
+(shell option is enabled using the)3.205 F F1(shopt)3.205 E F0 -.2(bu)
 3.205 G .704(iltin, se).2 F -.15(ve)-.25 G .704(ral e).15 F .704
 (xtended pattern matching operators)-.15 F .255(are recognized.)108
-130.8 R .255(In the follo)5.255 F .255(wing description, a)-.25 F F1
+142.8 R .255(In the follo)5.255 F .255(wing description, a)-.25 F F2
 (pattern-list)2.755 E F0 .255
-(is a list of one or more patterns separated by a)2.755 F F2(|)2.756 E
+(is a list of one or more patterns separated by a)2.755 F F1(|)2.756 E
 F0(.)A(Composite patterns may be formed using one or more of the follo)
-108 142.8 Q(wing sub-patterns:)-.25 E F2(?\()144 166.8 Q F1
-(pattern-list).833 E F2(\)).833 E F0
-(Matches zero or one occurrence of the gi)180 178.8 Q -.15(ve)-.25 G 2.5
-(np).15 G(atterns)-2.5 E F2(*\()144 190.8 Q F1(pattern-list).833 E F2
-(\)).833 E F0(Matches zero or more occurrences of the gi)180 202.8 Q
--.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F2(+\()144 214.8 Q F1
-(pattern-list).833 E F2(\)).833 E F0
-(Matches one or more occurrences of the gi)180 226.8 Q -.15(ve)-.25 G
-2.5(np).15 G(atterns)-2.5 E F2(@\()144 238.8 Q F1(pattern-list).833 E F2
-(\)).833 E F0(Matches one of the gi)180 250.8 Q -.15(ve)-.25 G 2.5(np)
-.15 G(atterns)-2.5 E F2(!\()144 262.8 Q F1(pattern-list).833 E F2(\))
-.833 E F0(Matches an)180 274.8 Q(ything e)-.15 E(xcept one of the gi)
--.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F2(Quote Remo)87 291.6
-Q -.1(va)-.1 G(l).1 E F0 1.113(After the preceding e)108 303.6 R 1.113
-(xpansions, all unquoted occurrences of the characters)-.15 F F2(\\)
-3.613 E F0(,)A F2<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F2(")4.445 E F0
-1.112(that did not result)4.445 F(from one of the abo)108 315.6 Q .3
+108 154.8 Q(wing sub-patterns:)-.25 E F1(?\()144 178.8 Q F2
+(pattern-list).833 E F1(\)).833 E F0
+(Matches zero or one occurrence of the gi)180 190.8 Q -.15(ve)-.25 G 2.5
+(np).15 G(atterns)-2.5 E F1(*\()144 202.8 Q F2(pattern-list).833 E F1
+(\)).833 E F0(Matches zero or more occurrences of the gi)180 214.8 Q
+-.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(+\()144 226.8 Q F2
+(pattern-list).833 E F1(\)).833 E F0
+(Matches one or more occurrences of the gi)180 238.8 Q -.15(ve)-.25 G
+2.5(np).15 G(atterns)-2.5 E F1(@\()144 250.8 Q F2(pattern-list).833 E F1
+(\)).833 E F0(Matches one of the gi)180 262.8 Q -.15(ve)-.25 G 2.5(np)
+.15 G(atterns)-2.5 E F1(!\()144 274.8 Q F2(pattern-list).833 E F1(\))
+.833 E F0(Matches an)180 286.8 Q(ything e)-.15 E(xcept one of the gi)
+-.15 E -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(Quote Remo)87 303.6
+Q -.1(va)-.1 G(l).1 E F0 1.113(After the preceding e)108 315.6 R 1.113
+(xpansions, all unquoted occurrences of the characters)-.15 F F1(\\)
+3.613 E F0(,)A F1<08>3.612 E F0 3.612(,a)C(nd)-3.612 E F1(")4.445 E F0
+1.112(that did not result)4.445 F(from one of the abo)108 327.6 Q .3
 -.15(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F3
-10.95/Times-Bold@0 SF(REDIRECTION)72 332.4 Q F0 .545
-(Before a command is e)108 344.4 R -.15(xe)-.15 G .545
-(cuted, its input and output may be).15 F F1 -.37(re)3.045 G(dir).37 E
+10.95/Times-Bold@0 SF(REDIRECTION)72 344.4 Q F0 .545
+(Before a command is e)108 356.4 R -.15(xe)-.15 G .545
+(cuted, its input and output may be).15 F F2 -.37(re)3.045 G(dir).37 E
 (ected)-.37 E F0 .545(using a special notation interpreted)3.815 F .617
-(by the shell.)108 356.4 R .617(Redirection may also be used to open an\
+(by the shell.)108 368.4 R .617(Redirection may also be used to open an\
 d close \214les for the current shell e)5.617 F -.15(xe)-.15 G .616
-(cution en).15 F(viron-)-.4 E 3.274(ment. The)108 368.4 R(follo)3.274 E
+(cution en).15 F(viron-)-.4 E 3.274(ment. The)108 380.4 R(follo)3.274 E
 .774(wing redirection operators may precede or appear an)-.25 F .774
-(ywhere within a)-.15 F F1 .775(simple command)3.615 F F0(or)4.045 E
-(may follo)108 380.4 Q 2.5(wa)-.25 G F1(command)A F0 5(.R).77 G
+(ywhere within a)-.15 F F2 .775(simple command)3.615 F F0(or)4.045 E
+(may follo)108 392.4 Q 2.5(wa)-.25 G F2(command)A F0 5(.R).77 G
 (edirections are processed in the order the)-5 E 2.5(ya)-.15 G(ppear)
 -2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .284(In the follo)108
-397.2 R .283(wing descriptions, if the \214le descriptor number is omit\
+409.2 R .283(wing descriptions, if the \214le descriptor number is omit\
 ted, and the \214rst character of the redirect-)-.25 F .512
-(ion operator is)108 409.2 R F2(<)3.012 E F0 3.012(,t)C .512
+(ion operator is)108 421.2 R F1(<)3.012 E F0 3.012(,t)C .512
 (he redirection refers to the standard input \(\214le descriptor 0\).)
 -3.012 F .512(If the \214rst character of the)5.512 F
-(redirection operator is)108 421.2 Q F2(>)2.5 E F0 2.5(,t)C
+(redirection operator is)108 433.2 Q F1(>)2.5 E F0 2.5(,t)C
 (he redirection refers to the standard output \(\214le descriptor 1\).)
--2.5 E .825(The w)108 438 R .825(ord follo)-.1 F .824
+-2.5 E .825(The w)108 450 R .825(ord follo)-.1 F .824
 (wing the redirection operator in the follo)-.25 F .824
 (wing descriptions, unless otherwise noted, is sub-)-.25 F .772
-(jected to brace e)108 450 R .773(xpansion, tilde e)-.15 F .773
+(jected to brace e)108 462 R .773(xpansion, tilde e)-.15 F .773
 (xpansion, parameter e)-.15 F .773
 (xpansion, command substitution, arithmetic e)-.15 F(xpan-)-.15 E .844
-(sion, quote remo)108 462 R -.25(va)-.15 G .843(l, pathname e).25 F .843
+(sion, quote remo)108 474 R -.25(va)-.15 G .843(l, pathname e).25 F .843
 (xpansion, and w)-.15 F .843(ord splitting.)-.1 F .843(If it e)5.843 F
-.843(xpands to more than one w)-.15 F(ord,)-.1 E F2(bash)3.343 E F0
-(reports an error)108 474 Q(.)-.55 E
-(Note that the order of redirections is signi\214cant.)108 490.8 Q -.15
-(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 507.6 Q F2(>)2.5
-E F0(dirlist 2)2.5 E F2(>&)A F0(1)A
-(directs both standard output and standard error to the \214le)108 524.4
-Q F1(dirlist)2.5 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144
-541.2 Q F2(>&)A F0(1)A F2(>)2.5 E F0(dirlist)2.5 E .387
-(directs only the standard output to \214le)108 558 R F1(dirlist)2.887 E
+.843(xpands to more than one w)-.15 F(ord,)-.1 E F1(bash)3.343 E F0
+(reports an error)108 486 Q(.)-.55 E
+(Note that the order of redirections is signi\214cant.)108 502.8 Q -.15
+(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 519.6 Q F1(>)2.5
+E F0(dirlist 2)2.5 E F1(>&)A F0(1)A
+(directs both standard output and standard error to the \214le)108 536.4
+Q F2(dirlist)2.5 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144
+553.2 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .387
+(directs only the standard output to \214le)108 570 R F2(dirlist)2.887 E
 F0 2.887(,b).68 G .388(ecause the standard error w)-2.887 F .388
 (as duplicated as standard output)-.1 F(before the standard output w)108
-570 Q(as redirected to)-.1 E F1(dirlist)2.5 E F0(.).68 E F2(Bash)108
-586.8 Q F0 .599(handles se)3.099 F -.15(ve)-.25 G .599
+582 Q(as redirected to)-.1 E F2(dirlist)2.5 E F0(.).68 E F1(Bash)108
+598.8 Q F0 .599(handles se)3.099 F -.15(ve)-.25 G .599
 (ral \214lenames specially when the).15 F 3.099(ya)-.15 G .598
 (re used in redirections, as described in the follo)-3.099 F(wing)-.25 E
-(table:)108 598.8 Q F2(/de)144 615.6 Q(v/fd/)-.15 E F1(fd)A F0(If)180
-627.6 Q F1(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E(ger)-.15 E 2.5
-<2c8c>-.4 G(le descriptor)-2.5 E F1(fd)2.5 E F0(is duplicated.)2.5 E F2
-(/de)144 639.6 Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.)180
-651.6 Q F2(/de)144 663.6 Q(v/stdout)-.15 E F0
-(File descriptor 1 is duplicated.)180 675.6 Q F2(/de)144 687.6 Q
-(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 699.6 Q
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(21)185.115 E 0 Cg EP
+(table:)108 610.8 Q F1(/de)144 627.6 Q(v/fd/)-.15 E F2(fd)A F0(If)180
+639.6 Q F2(fd)2.5 E F0(is a v)2.5 E(alid inte)-.25 E(ger)-.15 E 2.5
+<2c8c>-.4 G(le descriptor)-2.5 E F2(fd)2.5 E F0(is duplicated.)2.5 E F1
+(/de)144 651.6 Q(v/stdin)-.15 E F0(File descriptor 0 is duplicated.)180
+663.6 Q F1(/de)144 675.6 Q(v/stdout)-.15 E F0
+(File descriptor 1 is duplicated.)180 687.6 Q F1(/de)144 699.6 Q
+(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180 711.6 Q
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(21)185.545 E 0 Cg EP
 %%Page: 22 22
 %%BeginPageSetup
 BP
@@ -2810,7 +2826,8 @@ rrent source until a line containing only)108 655.2 R F2(wor)108.34
 5.684 F(input for a command.)108 679.2 Q
 (The format of here-documents is:)108 696 Q F1(<<)144 712.8 Q F0([)A F1
 <ad>A F0(])A F2(wor)A(d)-.37 E(her)164 724.8 Q(e-document)-.37 E F0
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(22)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(22)185.545 E 0 Cg EP
 %%Page: 23 23
 %%BeginPageSetup
 BP
@@ -2913,8 +2930,8 @@ F2($)2.972 E F0(,)A F2(`)2.972 E F0(,)A(and)108 712.8 Q F2(=)3.611 E F0
 (ay not appear in an alias).15 F 3.62(name. The)108 724.8 R 1.12
 (replacement te)3.62 F 1.119(xt may contain an)-.15 F 3.619(yv)-.15 G
 1.119(alid shell input, including shell metacharacters.)-3.869 F 1.119
-(The \214rst)6.119 F(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E
-(23)185.115 E 0 Cg EP
+(The \214rst)6.119 F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)
+-.15 G(mber 27).15 E(23)185.545 E 0 Cg EP
 %%Page: 24 24
 %%BeginPageSetup
 BP
@@ -3062,8 +3079,8 @@ G(imit is imposed on the number of recursi)-2.5 E .3 -.15(ve c)-.25 H
 F .205(gers with no)-.15 F 2.07(check for o)108 724.8 R -.15(ve)-.15 G
 (r\215o).15 E 3.37 -.65(w, t)-.25 H 2.07(hough di).65 F 2.07
 (vision by 0 is trapped and \215agged as an error)-.25 F 7.07(.T)-.55 G
-2.07(he operators and their)-7.07 F(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(24)185.115 E 0 Cg EP
+2.07(he operators and their)-7.07 F(GNU Bash-3.2)72 768 Q(2006 No)
+135.555 E -.15(ve)-.15 G(mber 27).15 E(24)185.545 E 0 Cg EP
 %%Page: 25 25
 %%BeginPageSetup
 BP
@@ -3158,7 +3175,7 @@ R 3.906(Al)6.406 G 1.407(eading 0x or 0X denotes he)-3.906 F(xadecimal.)
 -3.221 F(get)-.18 E(of the link, rather than the link itself.)108 688.8
 Q F2<ad61>108 712.8 Q F1(\214le)2.5 E F0 -.35(Tr)10.58 G(ue if).35 E F1
 (\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(25)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(25)185.545 E 0 Cg EP
 %%Page: 26 26
 %%BeginPageSetup
 BP
@@ -3258,8 +3275,8 @@ qual to, greater than, or greater than or equal to)144 636 R F2(ar)144
 (rds that the parser has mark).1 F 1.848(ed as v)-.1 F 1.849
 (ariable assignments \(those preceding the command)-.25 F
 (name\) and redirections are sa)144 717.6 Q -.15(ve)-.2 G 2.5(df).15 G
-(or later processing.)-2.5 E(GNU Bash-3.2)72 768 Q(2006 September 28)
-135.125 E(26)185.115 E 0 Cg EP
+(or later processing.)-2.5 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(26)185.545 E 0 Cg EP
 %%Page: 27 27
 %%BeginPageSetup
 BP
@@ -3374,7 +3391,8 @@ F3(exec)3.905 E F0 -.2(bu)144 686.4 S(iltin).2 E 32.5<8374>108 703.2 S
 (he current w)-32.5 E(orking directory as set by)-.1 E F3(cd)2.5 E F0(,)
 A F3(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F3(popd)2.5 E F0 2.5(,o)C 2.5(ri)
 -2.5 G(nherited by the shell at in)-2.5 E -.2(vo)-.4 G(cation).2 E
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(27)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(27)185.545 E 0 Cg EP
 %%Page: 28 28
 %%BeginPageSetup
 BP
@@ -3484,8 +3502,8 @@ E F0 .81(option is set \(see the)3.31 F F1(set)3.31 E F0 -.2(bu)3.31 G
 .81(iltin command belo).2 F .81(w\), then)-.25 F F2(all)3.64 E F0 .81
 (parameter assignments are placed in)3.82 F(the en)108 720 Q
 (vironment for a command, not just those that precede the command name.)
--.4 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(28)185.115 E 0
-Cg EP
+-.4 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15
+E(28)185.545 E 0 Cg EP
 %%Page: 29 29
 %%BeginPageSetup
 BP
@@ -3614,7 +3632,7 @@ E(ound)-.45 E F0 1.346(processes are those whose process)4.616 F 1.843
 (group ID dif)108 720 R 1.844(fers from the terminal')-.25 F 1.844
 (s; such processes are immune to k)-.55 F -.15(ey)-.1 G 1.844
 (board-generated signals.).15 F(Only)6.844 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(29)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(29)185.545 E 0 Cg EP
 %%Page: 30 30
 %%BeginPageSetup
 BP
@@ -3734,7 +3752,8 @@ ized by inserting a number of backslash-escaped special characters that\
 (\(the portion follo)2.5 E(wing the \214nal slash\))-.25 E F2(\\t)144
 700.8 Q F0(the current time in 24-hour HH:MM:SS format)29.89 E F2(\\T)
 144 712.8 Q F0(the current time in 12-hour HH:MM:SS format)26.55 E
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(30)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(30)185.545 E 0 Cg EP
 %%Page: 31 31
 %%BeginPageSetup
 BP
@@ -3856,8 +3875,8 @@ nd the k)108 628.8 R 1.334 -.15(ey b)-.1 H 1.034(indings and).15 F -.25
 (programs that use this library may)3.487 F(add their o)108 693.6 Q
 (wn commands and bindings.)-.25 E -.15(Fo)108 710.4 S 2.5(re).15 G
 (xample, placing)-2.65 E(M\255Control\255u: uni)144 727.2 Q -.15(ve)-.25
-G(rsal\255ar).15 E(gument)-.18 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(31)185.115 E 0 Cg EP
+G(rsal\255ar).15 E(gument)-.18 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(31)185.545 E 0 Cg EP
 %%Page: 32 32
 %%BeginPageSetup
 BP
@@ -3945,7 +3964,8 @@ F1(nnn)A F0(the eight-bit character whose v)18.22 E(alue is the octal v)
 (\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E 1.142
 (When entering the te)108 720 R 1.141(xt of a macro, single or double q\
 uotes must be used to indicate a macro de\214nition.)-.15 F
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(32)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(32)185.545 E 0 Cg EP
 %%Page: 33 33
 %%BeginPageSetup
 BP
@@ -4050,8 +4070,8 @@ F0 2.949(,m)C(ak)-2.949 E .448
 (es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448
 (crolling the input horizontally on a)-2.948 F 1.194(single screen line\
  when it becomes longer than the screen width rather than wrapping to a\
- ne)144 720 R(w)-.25 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E
-(33)185.115 E 0 Cg EP
+ ne)144 720 R(w)-.25 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)
+-.15 G(mber 27).15 E(33)185.545 E 0 Cg EP
 %%Page: 34 34
 %%BeginPageSetup
 BP
@@ -4149,8 +4169,8 @@ F0 .462(construct allo)2.962 F .463(ws bindings to be made based on the\
 (or the application using readline.)144 705.6 R .477(The te)5.477 F .477
 (xt of the test e)-.15 F .477
 (xtends to the end of the line; no characters)-.15 F
-(are required to isolate it.)144 717.6 Q(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(34)185.115 E 0 Cg EP
+(are required to isolate it.)144 717.6 Q(GNU Bash-3.2)72 768 Q(2006 No)
+135.555 E -.15(ve)-.15 G(mber 27).15 E(34)185.545 E 0 Cg EP
 %%Page: 35 35
 %%BeginPageSetup
 BP
@@ -4258,8 +4278,8 @@ F0 .911(refers to a cursor position sa)3.411 F -.15(ve)-.2 G 3.411(db)
 .15 G 3.411(yt)-3.411 G(he)-3.411 E F1(set\255mark)108 724.8 Q F0 2.5
 (command. The)2.5 F(te)2.5 E
 (xt between the point and mark is referred to as the)-.15 E F2 -.37(re)
-2.5 G(gion)-.03 E F0(.)A(GNU Bash-3.2)72 768 Q(2006 September 28)135.125
-E(35)185.115 E 0 Cg EP
+2.5 G(gion)-.03 E F0(.)A(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15
+(ve)-.15 G(mber 27).15 E(35)185.545 E 0 Cg EP
 %%Page: 36 36
 %%BeginPageSetup
 BP
@@ -4338,8 +4358,8 @@ etween the start of the current)-.1 F(line and the point.)144 688.8 Q
 (th an ar).4 F(gument)-.18 E/F3 10/Times-Italic@0 SF(n)3.294 E F0 3.294
 (,i).24 G .794(nsert the)-3.294 F F3(n)3.294 E F0 .794(th w)B .794
 (ord from the pre)-.1 F .794(vious command \(the w)-.25 F .794
-(ords in the)-.1 F(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(36)
-185.115 E 0 Cg EP
+(ords in the)-.1 F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15
+G(mber 27).15 E(36)185.545 E 0 Cg EP
 %%Page: 37 37
 %%BeginPageSetup
 BP
@@ -4436,7 +4456,8 @@ G .779(nsert characters lik)-3.279 F(e)-.1 E F2(C\255q)3.278 E F0 3.278
 688.8 R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E
 -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 700.8 Q(guments ha)-.18 E
 .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E(GNU Bash-3.2)
-72 768 Q(2006 September 28)135.125 E(37)185.115 E 0 Cg EP
+72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(37)185.545 E 0
+Cg EP
 %%Page: 38 38
 %%BeginPageSetup
 BP
@@ -4527,8 +4548,8 @@ E 7.007(.T)-.55 G 2.007(he w)-7.007 F 2.007
 (ord boundaries are the same as)-.1 F F1 -.25(fo)4.507 G -.37(r-).25 G
 (ward\255w)144 688.8 Q(ord)-.1 E F0(.)A F1(yank \(C\255y\))108 700.8 Q
 F0 -1(Ya)144 712.8 S(nk the top of the kill ring into the b)1 E(uf)-.2 E
-(fer at point.)-.25 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E
-(38)185.115 E 0 Cg EP
+(fer at point.)-.25 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)
+-.15 G(mber 27).15 E(38)185.545 E 0 Cg EP
 %%Page: 39 39
 %%BeginPageSetup
 BP
@@ -4626,7 +4647,7 @@ F0(List the possible completions of the te)144 657.6 Q
 (possible\255hostname\255completions \(C\255x @\))108 693.6 Q F0
 (List the possible completions of the te)144 705.6 Q
 (xt before point, treating it as a hostname.)-.15 E(GNU Bash-3.2)72 768
-Q(2006 September 28)135.125 E(39)185.115 E 0 Cg EP
+Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(39)185.545 E 0 Cg EP
 %%Page: 40 40
 %%BeginPageSetup
 BP
@@ -4719,8 +4740,8 @@ F0 1.095(command enough times to)3.595 F
 .321(the characters at the be)144 729.6 R .321
 (ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1
 (comment\255begin)2.821 E F0 2.822(,t)C .322(he v)-2.822 F .322(alue is)
--.25 F(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(40)185.115 E 0
-Cg EP
+-.25 F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27)
+.15 E(40)185.545 E 0 Cg EP
 %%Page: 41 41
 %%BeginPageSetup
 BP
@@ -4838,8 +4859,8 @@ F0(and)3.737 E F1<ad43>3.737 E F0 2.158(options is in)108 729.6 R -.2
 (vo)-.4 G -.1(ke).2 G 4.658(d. When).1 F 2.159
 (the command or function is in)4.658 F -.2(vo)-.4 G -.1(ke).2 G 2.159
 (d, the).1 F F3(COMP_LINE)4.659 E F0(and)4.409 E F3(COMP_POINT)4.659 E
-F0(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(41)185.115 E 0 Cg
-EP
+F0(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(41)185.545 E 0 Cg EP
 %%Page: 42 42
 %%BeginPageSetup
 BP
@@ -4986,7 +5007,8 @@ R 1.294(uiltin command)-.2 F F1(fc)3.794 E F0(\(see)3.794 E F2 1.293
 S .673(cute a portion of the history list.).15 F(The)5.673 E F1(history)
 3.173 E F0 -.2(bu)3.173 G .673
 (iltin may be used to display or modify the history list).2 F
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(42)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(42)185.545 E 0 Cg EP
 %%Page: 43 43
 %%BeginPageSetup
 BP
@@ -5111,7 +5133,7 @@ E F0(.).22 E F2(!?)108 679.2 Q F4(string)A F2([?])A F0 1.022
 E F0 6.022(.T).22 G 1.022(he trailing)-6.022 F F2(?)3.522 E F0 1.022
 (may be omitted if)3.522 F F4(string)3.861 E F0(is)3.741 E(follo)144
 703.2 Q(wed immediately by a ne)-.25 E(wline.)-.25 E(GNU Bash-3.2)72 768
-Q(2006 September 28)135.125 E(43)185.115 E 0 Cg EP
+Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(43)185.545 E 0 Cg EP
 %%Page: 44 44
 %%BeginPageSetup
 BP
@@ -5217,7 +5239,7 @@ E F0 3.8(,a)C(nd)-3.8 E F3(test)3.8 E F0 -.2(bu)3.8 G 1.3(iltins do not)
 -.15 E F2(ar)3.282 E(guments)-.37 E F0 .451(and performing an)3.221 F
 2.951(ys)-.15 G(peci\214ed)-2.951 E 2.5(redirections. A)144 706.8 R
 (zero e)2.5 E(xit code is returned.)-.15 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(44)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(44)185.545 E 0 Cg EP
 %%Page: 45 45
 %%BeginPageSetup
 BP
@@ -5272,13 +5294,13 @@ F 1.313(plied, the name and v)144 280.8 R 1.314
 (returns true unless a)3.814 F F2(name)3.814 E F0 1.314(is gi)3.814 F
 -.15(ve)-.25 G 3.814(nf).15 G(or)-3.814 E
 (which no alias has been de\214ned.)144 292.8 Q F1(bg)108 309.6 Q F0([)
-2.5 E F2(jobspec)A F0(...])2.5 E .847(Resume each suspended job)144
-321.6 R F2(jobspec)3.347 E F0 .847
-(in the background, as if it had been started with)3.347 F F1(&)3.347 E
-F0 5.847(.I)C(f)-5.847 E F2(job-)3.347 E(spec)144 333.6 Q F0 .689
-(is not present, the shell')3.188 F 3.189(sn)-.55 G .689(otion of the)
--3.189 F F2(curr)3.189 E .689(ent job)-.37 F F0 .689(is used.)3.189 F F1
-(bg)5.689 E F2(jobspec)4.929 E F0 .689(returns 0 unless run)3.499 F .419
+2.5 E F2(jobspec)A F0(...])2.5 E .745(Resume each suspended job)144
+321.6 R F2(jobspec)3.245 E F0 .745
+(in the background, as if it had been started with)3.245 F F1(&)3.244 E
+F0 5.744(.I)C(f)-5.744 E F2(job-)4.984 E(spec)144 333.6 Q F0 .671
+(is not present, the shell')3.481 F 3.171(sn)-.55 G .672(otion of the)
+-3.171 F F2(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F1
+(bg)5.672 E F2(jobspec)4.912 E F0 .672(returns 0 unless run)3.482 F .419
 (when job control is disabled or)144 345.6 R 2.919(,w)-.4 G .419
 (hen run with job control enabled, an)-2.919 F 2.918(ys)-.15 G
 (peci\214ed)-2.918 E F2(jobspec)2.918 E F0 -.1(wa)2.918 G 2.918(sn).1 G
@@ -5341,7 +5363,7 @@ F1<ad71>144 674.4 Q F2(function)2.5 E F0(Query about which k)180 686.4 Q
 (he named).1 E F2(function)2.5 E F0(.)A F1<ad75>144 698.4 Q F2(function)
 2.5 E F0(Unbind all k)180 710.4 Q -.15(ey)-.1 G 2.5(sb).15 G
 (ound to the named)-2.5 E F2(function)2.5 E F0(.)A(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(45)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(45)185.545 E 0 Cg EP
 %%Page: 46 46
 %%BeginPageSetup
 BP
@@ -5475,8 +5497,8 @@ F(grammable completion f)144 681.6 Q(acilities, while a)-.1 E -.25(va)
 em directly from a completion speci\214cation with the same \215ags.)144
 717.6 R(If)5.02 E F2(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)
 2.52 F(those completions matching)144 729.6 Q F2(wor)2.5 E(d)-.37 E F0
-(will be displayed.)2.5 E(GNU Bash-3.2)72 768 Q(2006 September 28)
-135.125 E(46)185.115 E 0 Cg EP
+(will be displayed.)2.5 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15
+(ve)-.15 G(mber 27).15 E(46)185.545 E 0 Cg EP
 %%Page: 47 47
 %%BeginPageSetup
 BP
@@ -5561,7 +5583,7 @@ G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 580.8 S(iltin).2 E F0
 2.5 E F1<ad65>2.5 E F0(.)A F1(\214le)184 688.8 Q F0(File names.)27.22 E
 (May also be speci\214ed as)5 E F1<ad66>2.5 E F0(.)A F1(function)184
 700.8 Q F0(Names of shell functions.)224 712.8 Q(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(47)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(47)185.545 E 0 Cg EP
 %%Page: 48 48
 %%BeginPageSetup
 BP
@@ -5664,8 +5686,8 @@ F0 .22(option inhibits the display of function de\214nitions; only the)
 2.72 F .466(function name and attrib)144 722.4 R .466(utes are printed.)
 -.2 F .466(If the)5.466 F F1(extdeb)2.966 E(ug)-.2 E F0 .466
 (shell option is enabled using)2.966 F F1(shopt)2.966 E F0 2.966(,t)C
-(he)-2.966 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(48)
-185.115 E 0 Cg EP
+(he)-2.966 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G
+(mber 27).15 E(48)185.545 E 0 Cg EP
 %%Page: 49 49
 %%BeginPageSetup
 BP
@@ -5697,600 +5719,607 @@ SF<ad46>3.808 E F0 .19(option implies)144 96 R F1<ad66>2.69 E F0 5.19
 180 204 Q(The trace attrib)5 E(ute has no special meaning for v)-.2 E
 (ariables.)-.25 E F1<ad78>144 216 Q F0(Mark)25.3 E F2(name)2.5 E F0 2.5
 (sf)C(or e)-2.5 E(xport to subsequent commands via the en)-.15 E
-(vironment.)-.4 E .336(Using `+' instead of `\255' turns of)144 232.8 R
-2.837(ft)-.25 G .337(he attrib)-2.837 F .337(ute instead, with the e)-.2
-F .337(xception that)-.15 F F1(+a)2.837 E F0 .337(may not be used)2.837
-F .793(to destro)144 244.8 R 3.293(ya)-.1 G 3.293(na)-3.293 G .793
-(rray v)-3.293 F 3.293(ariable. When)-.25 F .793
-(used in a function, mak)3.293 F .793(es each)-.1 F F2(name)3.293 E F0
-.793(local, as with the)3.293 F F1(local)3.292 E F0 2.842(command. If)
-144 256.8 R 2.842(av)2.842 G .342(ariable name is follo)-3.092 F .342
-(wed by =)-.25 F F2(value)A F0 2.842(,t)C .342(he v)-2.842 F .342
-(alue of the v)-.25 F .343(ariable is set to)-.25 F F2(value)2.843 E F0
-5.343(.T)C(he)-5.343 E .801(return v)144 268.8 R .801
-(alue is 0 unless an in)-.25 F -.25(va)-.4 G .8
-(lid option is encountered, an attempt is made to de\214ne a function)
-.25 F(using)144 280.8 Q/F4 10/Courier@0 SF 1.038(\255f foo=bar)3.538 F
-F0 3.538(,a)C 3.538(na)-3.538 G 1.038(ttempt is made to assign a v)
--3.538 F 1.038(alue to a readonly v)-.25 F 1.039(ariable, an attempt is)
--.25 F .974(made to assign a v)144 292.8 R .974(alue to an array v)-.25
-F .974(ariable without using the compound assignment syntax \(see)-.25 F
-F1(Arrays)144 304.8 Q F0(abo)2.86 E -.15(ve)-.15 G .36(\), one of the)
-.15 F F2(names)2.86 E F0 .36(is not a v)2.86 F .36(alid shell v)-.25 F
-.36(ariable name, an attempt is made to turn of)-.25 F(f)-.25 E .057
-(readonly status for a readonly v)144 316.8 R .057
-(ariable, an attempt is made to turn of)-.25 F 2.556(fa)-.25 G .056
-(rray status for an array v)-2.556 F(ari-)-.25 E
-(able, or an attempt is made to display a non-e)144 328.8 Q
-(xistent function with)-.15 E F1<ad66>2.5 E F0(.)A F1
-(dirs [\255clpv] [+)108 345.6 Q F2(n)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1
-(])A F0 -.4(Wi)144 357.6 S .328
+(vironment.)-.4 E .12(Using `+' instead of `\255' turns of)144 232.8 R
+2.62(ft)-.25 G .12(he attrib)-2.62 F .121(ute instead, with the e)-.2 F
+.121(xceptions that)-.15 F F1(+a)2.621 E F0 .121(may not be used)2.621 F
+1.237(to destro)144 244.8 R 3.737(ya)-.1 G 3.737(na)-3.737 G 1.237
+(rray v)-3.737 F 1.237(ariable and)-.25 F F1 1.237(+r will not r)3.737 F
+(emo)-.18 E 1.437 -.1(ve t)-.1 H 1.237(he r).1 F 1.237(eadonly attrib)
+-.18 F 3.737(ute. When)-.2 F 1.236(used in a)3.737 F .311(function, mak)
+144 256.8 R .311(es each)-.1 F F2(name)2.811 E F1 .311
+(local, as with the local)2.811 F F0 2.811(command. If)2.811 F 2.811(av)
+2.811 G .312(ariable name is follo)-3.061 F .312(wed by)-.25 F(=)144
+268.8 Q F2(value)A F0 3.239(,t)C .739(he v)-3.239 F .739(alue of the v)
+-.25 F .739(ariable is set to)-.25 F F2(value)3.238 E F0 5.738(.T)C .738
+(he return v)-5.738 F .738(alue is 0 unless an in)-.25 F -.25(va)-.4 G
+.738(lid option is).25 F .603
+(encountered, an attempt is made to de\214ne a function using)144 280.8
+R/F4 10/Courier@0 SF .603(\255f foo=bar)3.103 F F0 3.103(,a)C 3.103(na)
+-3.103 G .604(ttempt is made to)-3.103 F 1.243(assign a v)144 292.8 R
+1.243(alue to a readonly v)-.25 F 1.242
+(ariable, an attempt is made to assign a v)-.25 F 1.242
+(alue to an array v)-.25 F(ariable)-.25 E 1.386
+(without using the compound assignment syntax \(see)144 304.8 R F1
+(Arrays)3.886 E F0(abo)3.886 E -.15(ve)-.15 G 1.386(\), one of the).15 F
+F2(names)3.886 E F0 1.386(is not a)3.886 F -.25(va)144 316.8 S .172
+(lid shell v).25 F .171(ariable name, an attempt is made to turn of)-.25
+F 2.671(fr)-.25 G .171(eadonly status for a readonly v)-2.671 F .171
+(ariable, an)-.25 F .96(attempt is made to turn of)144 328.8 R 3.46(fa)
+-.25 G .96(rray status for an array v)-3.46 F .96
+(ariable, or an attempt is made to display a)-.25 F(non-e)144 340.8 Q
+(xistent function with)-.15 E F1<ad66>2.5 E F0(.)A F1(dirs [+)108 357.6
+Q F2(n)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1 2.5(][)C(\255cplv])-2.5 E F0
+-.4(Wi)144 369.6 S .329
 (thout options, displays the list of currently remembered directories.)
-.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238
-(single line with directory names separated by spaces.)144 369.6 R 1.238
-(Directories are added to the list with the)6.238 F F1(pushd)144 381.6 Q
+.4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 381.6 R 1.238
+(Directories are added to the list with the)6.238 F F1(pushd)144 393.6 Q
 F0(command; the)2.5 E F1(popd)2.5 E F0(command remo)2.5 E -.15(ve)-.15 G
-2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 393.6 Q F2(n)A F0
-1.564(Displays the)25.3 F F2(n)4.064 E F0 1.565
-(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F1
-(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 405.6 Q F1<ad>144 417.6 Q F2
+2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 405.6 Q F2(n)A F0
+1.565(Displays the)25.3 F F2(n)4.065 E F0 1.565
+(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F1
+(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 417.6 Q F1<ad>144 429.6 Q F2
 (n)A F0 1.194(Displays the)25.3 F F2(n)3.694 E F0 1.194
 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
 F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 429.6 Q F1<ad63>144 441.6 Q F0
+(without options, starting with zero.)180 441.6 Q F1<ad63>144 453.6 Q F0
 (Clears the directory stack by deleting all of the entries.)25.86 E F1
-<ad6c>144 453.6 Q F0 .324(Produces a longer listing; the def)27.52 F
+<ad6c>144 465.6 Q F0 .324(Produces a longer listing; the def)27.52 F
 .324(ault listing format uses a tilde to denote the home direc-)-.1 F
-(tory)180 465.6 Q(.)-.65 E F1<ad70>144 477.6 Q F0
+(tory)180 477.6 Q(.)-.65 E F1<ad70>144 489.6 Q F0
 (Print the directory stack with one entry per line.)24.74 E F1<ad76>144
-489.6 Q F0 .273(Print the directory stack with one entry per line, pre\
-\214xing each entry with its inde)25.3 F 2.772(xi)-.15 G 2.772(nt)-2.772
-G(he)-2.772 E(stack.)180 501.6 Q .257(The return v)144 518.4 R .258
+501.6 Q F0 .272(Print the directory stack with one entry per line, pre\
+\214xing each entry with its inde)25.3 F 2.773(xi)-.15 G 2.773(nt)-2.773
+G(he)-2.773 E(stack.)180 513.6 Q .258(The return v)144 530.4 R .258
 (alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
 (lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe)
 -.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-)
-.15 F(tory stack.)144 530.4 Q F1(diso)108 547.2 Q(wn)-.1 E F0([)2.5 E F1
+.15 F(tory stack.)144 542.4 Q F1(diso)108 559.2 Q(wn)-.1 E F0([)2.5 E F1
 (\255ar)A F0 2.5(][)C F1<ad68>-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0
-(...])2.5 E -.4(Wi)144 559.2 S .331(thout options, each).4 F F2(jobspec)
-4.571 E F0 .331(is remo)3.141 F -.15(ve)-.15 G 2.831(df).15 G .331
-(rom the table of acti)-2.831 F .63 -.15(ve j)-.25 H 2.83(obs. If).15 F
-(the)2.83 E F1<ad68>2.83 E F0 .33(option is gi)2.83 F -.15(ve)-.25 G(n,)
-.15 E(each)144 571.2 Q F2(jobspec)4.52 E F0 .28(is not remo)3.09 F -.15
-(ve)-.15 G 2.78(df).15 G .28(rom the table, b)-2.78 F .28(ut is mark)-.2
-F .28(ed so that)-.1 F F3(SIGHUP)2.78 E F0 .281
-(is not sent to the job if)2.53 F .224(the shell recei)144 583.2 R -.15
-(ve)-.25 G 2.724(sa).15 G F3(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 .224
-(If no)4.724 F F2(jobspec)4.464 E F0 .224(is present, and neither the)
-3.034 F F1<ad61>2.724 E F0 .224(nor the)2.724 F F1<ad72>2.724 E F0 .223
-(option is sup-)2.724 F .651(plied, the)144 595.2 R F2(curr)3.151 E .651
-(ent job)-.37 F F0 .651(is used.)3.151 F .652(If no)5.651 F F2(jobspec)
-4.892 E F0 .652(is supplied, the)3.462 F F1<ad61>3.152 E F0 .652
-(option means to remo)3.152 F .952 -.15(ve o)-.15 H 3.152(rm).15 G(ark)
--3.152 E .435(all jobs; the)144 607.2 R F1<ad72>2.935 E F0 .435
-(option without a)2.935 F F2(jobspec)4.675 E F0(ar)3.245 E .434
-(gument restricts operation to running jobs.)-.18 F .434(The return)
-5.434 F -.25(va)144 619.2 S(lue is 0 unless a).25 E F2(jobspec)4.24 E F0
-(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 636 Q
+(...])2.5 E -.4(Wi)144 571.2 S .295(thout options, each).4 F F2(jobspec)
+4.535 E F0 .295(is remo)3.105 F -.15(ve)-.15 G 2.795(df).15 G .295
+(rom the table of acti)-2.795 F .595 -.15(ve j)-.25 H 2.795(obs. If).15
+F F2(jobspec)4.535 E F0 .295(is not present,)3.105 F .244(and neither)
+144 583.2 R F1 .243(\255a nor \255r is supplied, the shell')2.744 F
+2.743(sn)-.37 G .243(otion of the)-2.743 F F2(curr)2.743 E .243(ent job)
+-.37 F F1 .243(is used.)2.743 F .243(If the \255h option)5.243 F .333
+(is gi)144 595.2 R -.1(ve)-.1 G .333(n, each).1 F F2(jobspec)4.574 E F0
+.334(is not remo)3.144 F -.15(ve)-.15 G 2.834(df).15 G .334
+(rom the table, b)-2.834 F .334(ut is mark)-.2 F .334(ed so that)-.1 F
+F3(SIGHUP)2.834 E F0 .334(is not sent to)2.584 F 1.19
+(the job if the shell recei)144 607.2 R -.15(ve)-.25 G 3.689(sa).15 G F3
+(SIGHUP)A/F5 9/Times-Roman@0 SF(.)A F0 1.189(If no)5.689 F F2(jobspec)
+5.429 E F0 1.189(is present, and neither the)3.999 F F1<ad61>3.689 E F0
+1.189(nor the)3.689 F F1<ad72>3.689 E F0 1.569(option is supplied, the)
+144 619.2 R F2(curr)4.069 E 1.569(ent job)-.37 F F0 1.569(is used.)4.069
+F 1.569(If no)6.569 F F2(jobspec)5.809 E F0 1.57(is supplied, the)4.38 F
+F1<ad61>4.07 E F0 1.57(option means to)4.07 F(remo)144 631.2 Q .904 -.15
+(ve o)-.15 H 3.104(rm).15 G .604(ark all jobs; the)-3.104 F F1<ad72>
+3.103 E F0 .603(option without a)3.103 F F2(jobspec)4.843 E F0(ar)3.413
+E .603(gument restricts operation to running)-.18 F 2.5(jobs. The)144
+643.2 R(return v)2.5 E(alue is 0 unless a)-.25 E F2(jobspec)4.24 E F0
+(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 660 Q
 F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E
-.394(Output the)144 648 R F2(ar)2.894 E(g)-.37 E F0 .394
+.394(Output the)144 672 R F2(ar)2.894 E(g)-.37 E F0 .394
 (s, separated by spaces, follo)B .395(wed by a ne)-.25 F 2.895
 (wline. The)-.25 F .395(return status is al)2.895 F -.1(wa)-.1 G .395
 (ys 0.).1 F(If)5.395 E F1<ad6e>2.895 E F0 .549
-(is speci\214ed, the trailing ne)144 660 R .548(wline is suppressed.)
+(is speci\214ed, the trailing ne)144 684 R .548(wline is suppressed.)
 -.25 F .548(If the)5.548 F F1<ad65>3.048 E F0 .548(option is gi)3.048 F
--.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 672 Q
+-.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 696 Q
 .052(wing backslash-escaped characters is enabled.)-.25 F(The)5.052 E F1
 <ad45>2.552 E F0 .053(option disables the interpretation of these)2.553
-F 1.503(escape characters, e)144 684 R -.15(ve)-.25 G 4.003(no).15 G
+F 1.503(escape characters, e)144 708 R -.15(ve)-.25 G 4.003(no).15 G
 4.003(ns)-4.003 G 1.502(ystems where the)-4.003 F 4.002(ya)-.15 G 1.502
 (re interpreted by def)-4.002 F 4.002(ault. The)-.1 F F1(xpg_echo)4.002
 E F0(shell)4.002 E .009
-(option may be used to dynamically determine whether or not)144 696 R F1
+(option may be used to dynamically determine whether or not)144 720 R F1
 (echo)2.509 E F0 -.15(ex)2.51 G .01(pands these escape characters).15 F
-.66(by def)144 708 R(ault.)-.1 E F1(echo)5.66 E F0 .66
-(does not interpret)3.16 F F1<adad>3.16 E F0 .659
-(to mean the end of options.)3.159 F F1(echo)5.659 E F0 .659
-(interprets the follo)3.159 F(wing)-.25 E(escape sequences:)144 720 Q
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(49)185.115 E 0 Cg EP
+(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E
+(49)185.545 E 0 Cg EP
 %%Page: 50 50
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(\\a)144 84 Q F0(alert \(bell\))28.22 E F1
-(\\b)144 96 Q F0(backspace)27.66 E F1(\\c)144 108 Q F0
-(suppress trailing ne)28.78 E(wline)-.25 E F1(\\e)144 120 Q F0
-(an escape character)28.78 E F1(\\f)144 132 Q F0(form feed)29.89 E F1
-(\\n)144 144 Q F0(ne)27.66 E 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 156 Q
-F0(carriage return)28.78 E F1(\\t)144 168 Q F0(horizontal tab)29.89 E F1
-(\\v)144 180 Q F0 -.15(ve)28.22 G(rtical tab).15 E F1(\\\\)144 192 Q F0
-(backslash)30.44 E F1(\\0)144 204 Q/F2 10/Times-Italic@0 SF(nnn)A F0
-(the eight-bit character whose v)13.22 E(alue is the octal v)-.25 E
-(alue)-.25 E F2(nnn)2.5 E F0(\(zero to three octal digits\))2.5 E F1
-(\\x)144 216 Q F2(HH)A F0(the eight-bit character whose v)13.78 E
-(alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0
-(\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1
-(enable)108 232.8 Q F0([)2.5 E F1(\255adnps)A F0 2.5(][)C F1<ad66>-2.5 E
-F2(\214lename)2.5 E F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .277
-(Enable and disable b)144 244.8 R .278(uiltin shell commands.)-.2 F .278
-(Disabling a b)5.278 F .278(uiltin allo)-.2 F .278
-(ws a disk command which has)-.25 F .834(the same name as a shell b)144
-256.8 R .834(uiltin to be e)-.2 F -.15(xe)-.15 G .834
-(cuted without specifying a full pathname, e).15 F -.15(ve)-.25 G 3.333
-(nt).15 G(hough)-3.333 E .989(the shell normally searches for b)144
-268.8 R .989(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>
-3.489 E F0 .99(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F
-1.582(abled; otherwise,)144 280.8 R F2(names)4.082 E F0 1.582
-(are enabled.)4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582
-(xample, to use the)-4.232 F F1(test)4.082 E F0 1.582
-(binary found via the)4.082 F/F3 9/Times-Bold@0 SF -.666(PA)4.081 G(TH)
--.189 E F0 .08(instead of the shell b)144 292.8 R .08(uiltin v)-.2 F .08
-(ersion, run)-.15 F/F4 10/Courier@0 SF .081(enable -n test)2.58 F F0
-5.081(.T)C(he)-5.081 E F1<ad66>2.581 E F0 .081
-(option means to load the ne)2.581 F(w)-.25 E -.2(bu)144 304.8 S 1.525
+-.35 E .66(by def)144 84 R(ault.)-.1 E/F1 10/Times-Bold@0 SF(echo)5.66 E
+F0 .66(does not interpret)3.16 F F1<adad>3.16 E F0 .659
+(to mean the end of options.)3.159 F F1(echo)5.659 E F0 .659
+(interprets the follo)3.159 F(wing)-.25 E(escape sequences:)144 96 Q F1
+(\\a)144 108 Q F0(alert \(bell\))28.22 E F1(\\b)144 120 Q F0(backspace)
+27.66 E F1(\\c)144 132 Q F0(suppress trailing ne)28.78 E(wline)-.25 E F1
+(\\e)144 144 Q F0(an escape character)28.78 E F1(\\f)144 156 Q F0
+(form feed)29.89 E F1(\\n)144 168 Q F0(ne)27.66 E 2.5(wl)-.25 G(ine)-2.5
+E F1(\\r)144 180 Q F0(carriage return)28.78 E F1(\\t)144 192 Q F0
+(horizontal tab)29.89 E F1(\\v)144 204 Q F0 -.15(ve)28.22 G(rtical tab)
+.15 E F1(\\\\)144 216 Q F0(backslash)30.44 E F1(\\0)144 228 Q/F2 10
+/Times-Italic@0 SF(nnn)A F0(the eight-bit character whose v)13.22 E
+(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0
+(\(zero to three octal digits\))2.5 E F1(\\x)144 240 Q F2(HH)A F0
+(the eight-bit character whose v)13.78 E(alue is the he)-.25 E
+(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)
+-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(enable)108 256.8 Q F0([)2.5 E
+F1(\255adnps)A F0 2.5(][)C F1<ad66>-2.5 E F2(\214lename)2.5 E F0 2.5(][)
+C F2(name)-2.5 E F0(...])2.5 E .277(Enable and disable b)144 268.8 R
+.278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278
+(uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .834
+(the same name as a shell b)144 280.8 R .834(uiltin to be e)-.2 F -.15
+(xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15
+(ve)-.25 G 3.333(nt).15 G(hough)-3.333 E .989
+(the shell normally searches for b)144 292.8 R .989
+(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .99
+(is used, each)3.49 F F2(name)3.49 E F0 .99(is dis-)3.49 F 1.582
+(abled; otherwise,)144 304.8 R F2(names)4.082 E F0 1.582(are enabled.)
+4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F
+F1(test)4.082 E F0 1.582(binary found via the)4.082 F/F3 9/Times-Bold@0
+SF -.666(PA)4.081 G(TH)-.189 E F0 .08(instead of the shell b)144 316.8 R
+.08(uiltin v)-.2 F .08(ersion, run)-.15 F/F4 10/Courier@0 SF .081
+(enable -n test)2.58 F F0 5.081(.T)C(he)-5.081 E F1<ad66>2.581 E F0 .081
+(option means to load the ne)2.581 F(w)-.25 E -.2(bu)144 328.8 S 1.525
 (iltin command).2 F F2(name)4.385 E F0 1.524(from shared object)4.204 F
 F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524
-(ystems that support dynamic loading.)-4.024 F(The)144 316.8 Q F1<ad64>
+(ystems that support dynamic loading.)-4.024 F(The)144 340.8 Q F1<ad64>
 2.866 E F0 .366(option will delete a b)2.866 F .366(uiltin pre)-.2 F
 .366(viously loaded with)-.25 F F1<ad66>2.867 E F0 5.367(.I)C 2.867(fn)
 -5.367 G(o)-2.867 E F2(name)2.867 E F0(ar)2.867 E .367(guments are gi)
--.18 F -.15(ve)-.25 G .367(n, or).15 F .399(if the)144 328.8 R F1<ad70>
+-.18 F -.15(ve)-.25 G .367(n, or).15 F .399(if the)144 352.8 R F1<ad70>
 2.899 E F0 .399(option is supplied, a list of shell b)2.899 F .399
 (uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
 F .398(guments, the)-.18 F .098(list consists of all enabled shell b)144
-340.8 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
+364.8 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
 (is supplied, only disabled b)2.598 F .099(uiltins are printed.)-.2 F
 (If)5.099 E F1<ad61>2.599 E F0 1.917
-(is supplied, the list printed includes all b)144 352.8 R 1.916
+(is supplied, the list printed includes all b)144 376.8 R 1.916
 (uiltins, with an indication of whether or not each is)-.2 F 2.878
-(enabled. If)144 364.8 R F1<ad73>2.878 E F0 .379
+(enabled. If)144 388.8 R F1<ad73>2.878 E F0 .379
 (is supplied, the output is restricted to the POSIX)2.878 F F2(special)
 2.879 E F0 -.2(bu)2.879 G 2.879(iltins. The).2 F .379(return v)2.879 F
-(alue)-.25 E .995(is 0 unless a)144 376.8 R F2(name)3.855 E F0 .994
+(alue)-.25 E .995(is 0 unless a)144 400.8 R F2(name)3.855 E F0 .994
 (is not a shell b)3.675 F .994(uiltin or there is an error loading a ne)
 -.2 F 3.494(wb)-.25 G .994(uiltin from a shared)-3.694 F(object.)144
-388.8 Q F1 -2.3 -.15(ev a)108 405.6 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37
-E F0(...])2.5 E(The)144 417.6 Q F2(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671
+412.8 Q F1 -2.3 -.15(ev a)108 429.6 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37
+E F0(...])2.5 E(The)144 441.6 Q F2(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671
 (re read and concatenated together into a single command.)-3.17 F .671
-(This command is then read)5.671 F .495(and e)144 429.6 R -.15(xe)-.15 G
+(This command is then read)5.671 F .495(and e)144 453.6 R -.15(xe)-.15 G
 .495(cuted by the shell, and its e).15 F .495
 (xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15
 (ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no)
--2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 441.6 Q
+-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 465.6 Q
 (guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1
-(exec)108 458.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
+(exec)108 482.4 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
 (name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments)
--.37 E F0(]])A(If)144 470.4 Q F2(command)3.005 E F0 .305
+-.37 E F0(]])A(If)144 494.4 Q F2(command)3.005 E F0 .305
 (is speci\214ed, it replaces the shell.)3.575 F .305(No ne)5.305 F 2.805
 (wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F2(ar)3.136 E
-(guments)-.37 E F0(become)3.076 E .177(the ar)144 482.4 R .177
+(guments)-.37 E F0(become)3.076 E .177(the ar)144 506.4 R .177
 (guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G
 (he)-2.676 E F1<ad6c>2.676 E F0 .176
 (option is supplied, the shell places a dash at the be)2.676 F .176
-(ginning of)-.15 F .159(the zeroth ar)144 494.4 R 2.659(gp)-.18 G .159
-(assed to)-2.659 F F2(command)2.659 E F0 5.159(.T).77 G .159
-(his is what)-5.159 F F2(lo)2.659 E(gin)-.1 E F0 .159(\(1\) does.).24 F
-(The)5.16 E F1<ad63>2.66 E F0 .16(option causes)2.66 F F2(command)2.86 E
-F0(to)3.43 E 1.196(be e)144 506.4 R -.15(xe)-.15 G 1.196
-(cuted with an empty en).15 F 3.696(vironment. If)-.4 F F1<ad61>3.696 E
-F0 1.196(is supplied, the shell passes)3.696 F F2(name)4.055 E F0 1.195
-(as the zeroth)3.875 F(ar)144 518.4 Q .02(gument to the e)-.18 F -.15
-(xe)-.15 G .02(cuted command.).15 F(If)5.02 E F2(command)2.72 E F0 .02
-(cannot be e)3.29 F -.15(xe)-.15 G .02
-(cuted for some reason, a non-inter).15 F(-)-.2 E(acti)144 530.4 Q 1.067
--.15(ve s)-.25 H .767(hell e).15 F .767(xits, unless the shell option)
--.15 F F1(execfail)3.266 E F0 .766
-(is enabled, in which case it returns f)3.266 F 3.266(ailure. An)-.1 F
-(interacti)144 542.4 Q 1.518 -.15(ve s)-.25 H 1.218(hell returns f).15 F
-1.219(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.719
-(cuted. If).15 F F2(command)3.919 E F0 1.219(is not speci\214ed, an)
-4.489 F(y)-.15 E .134(redirections tak)144 554.4 R 2.634(ee)-.1 G -.25
-(ff)-2.634 G .134(ect in the current shell, and the return status is 0.)
-.25 F .134(If there is a redirection error)5.134 F(,)-.4 E
-(the return status is 1.)144 566.4 Q F1(exit)108 583.2 Q F0([)2.5 E F2
-(n)A F0 6.29(]C)C .095(ause the shell to e)-6.29 F .095
-(xit with a status of)-.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E F2(n)
-2.955 E F0 .096(is omitted, the e)2.835 F .096
-(xit status is that of the last command)-.15 F -.15(exe)144 595.2 S 2.5
-(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15
-G(cuted before the shell terminates.).15 E F1(export)108 612 Q F0([)2.5
-E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5 E F0([=)A F2(wor)A(d)-.37 E
-F0(]] ...)A F1(export \255p)108 624 Q F0 .257(The supplied)144 636 R F2
-(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F
-.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15
-(xe)-.15 G(cuted).15 E 2.626(commands. If)144 648 R(the)2.626 E F1<ad66>
-2.626 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2
-(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2
-(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .127(n, or if the)
-.15 F F1<ad70>144 660 Q F0 .66
-(option is supplied, a list of all names that are e)3.16 F .659
-(xported in this shell is printed.)-.15 F(The)5.659 E F1<ad6e>3.159 E F0
-(option)3.159 E 1.586(causes the e)144 672 R 1.586
+(ginning of)-.15 F .499(the zeroth ar)144 518.4 R .499(gument passed to)
+-.18 F F2(command)2.999 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2
+(lo)2.999 E(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.5 E F1<ad63>3 E F0
+.5(option causes)3 F F2(com-)3.2 E(mand)144 530.4 Q F0 .639(to be e)
+3.909 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138
+(vironment. If)-.4 F F1<ad61>3.138 E F0 .638
+(is supplied, the shell passes)3.138 F F2(name)3.498 E F0 .638(as the)
+3.318 F 1.077(zeroth ar)144 542.4 R 1.077(gument to the e)-.18 F -.15
+(xe)-.15 G 1.077(cuted command.).15 F(If)6.077 E F2(command)3.777 E F0
+1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077(cuted for some reason, a)
+.15 F(non-interacti)144 554.4 Q .618 -.15(ve s)-.25 H .318(hell e).15 F
+.318(xits, unless the shell option)-.15 F F1(execfail)2.817 E F0 .317
+(is enabled, in which case it returns f)2.817 F(ail-)-.1 E 2.505
+(ure. An)144 566.4 R(interacti)2.505 E .305 -.15(ve s)-.25 H .005
+(hell returns f).15 F .005(ailure if the \214le cannot be e)-.1 F -.15
+(xe)-.15 G 2.505(cuted. If).15 F F2(command)2.705 E F0 .005
+(is not speci\214ed,)3.275 F(an)144 578.4 Q 3.037(yr)-.15 G .537
+(edirections tak)-3.037 F 3.036(ee)-.1 G -.25(ff)-3.036 G .536
+(ect in the current shell, and the return status is 0.).25 F .536
+(If there is a redirection)5.536 F(error)144 590.4 Q 2.5(,t)-.4 G
+(he return status is 1.)-2.5 E F1(exit)108 607.2 Q F0([)2.5 E F2(n)A F0
+6.29(]C)C .095(ause the shell to e)-6.29 F .095(xit with a status of)
+-.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E F2(n)2.955 E F0 .096
+(is omitted, the e)2.835 F .096(xit status is that of the last command)
+-.15 F -.15(exe)144 619.2 S 2.5(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5
+E F0(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E
+F1(export)108 636 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5
+E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 648 Q F0
+.257(The supplied)144 660 R F2(names)3.117 E F0 .257(are mark)3.027 F
+.257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257
+(vironment of subsequently e)-.4 F -.15(xe)-.15 G(cuted).15 E 2.626
+(commands. If)144 672 R(the)2.626 E F1<ad66>2.626 E F0 .127
+(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2(names)2.987 E
+F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2(names)2.987 E
+F0 .127(are gi)2.897 F -.15(ve)-.25 G .127(n, or if the).15 F F1<ad70>
+144 684 Q F0 .66(option is supplied, a list of all names that are e)3.16
+F .659(xported in this shell is printed.)-.15 F(The)5.659 E F1<ad6e>
+3.159 E F0(option)3.159 E 1.586(causes the e)144 696 R 1.586
 (xport property to be remo)-.15 F -.15(ve)-.15 G 4.086(df).15 G 1.586
 (rom each)-4.086 F F2(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G
-1.587(ariable name is follo)-4.336 F 1.587(wed by)-.25 F(=)144 684 Q F2
+1.587(ariable name is follo)-4.336 F 1.587(wed by)-.25 F(=)144 708 Q F2
 (wor)A(d)-.37 E F0 2.804(,t)C .304(he v)-2.804 F .304(alue of the v)-.25
 F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1
 (export)5.304 E F0 .304(returns an e)2.804 F .303
 (xit status of 0 unless an in)-.15 F -.25(va)-.4 G(lid).25 E .293
-(option is encountered, one of the)144 696 R F2(names)2.793 E F0 .293
+(option is encountered, one of the)144 720 R F2(names)2.793 E F0 .293
 (is not a v)2.793 F .293(alid shell v)-.25 F .293(ariable name, or)-.25
-F F1<ad66>2.793 E F0 .294(is supplied with a)2.793 F F2(name)144.36 708
-Q F0(that is not a function.)2.68 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(50)185.115 E 0 Cg EP
+F F1<ad66>2.793 E F0 .294(is supplied with a)2.793 F(GNU Bash-3.2)72 768
+Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(50)185.545 E 0 Cg EP
 %%Page: 51 51
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(fc)108 84 Q F0([)2.5 E F1<ad65>A/F2 10
-/Times-Italic@0 SF(ename)2.5 E F0 2.5(][)C F1(\255nlr)-2.5 E F0 2.5(][)C
-F2<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)
-108 96 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2
-(cmd)-2.5 E F0(])A .478(Fix Command.)144 108 R .478
-(In the \214rst form, a range of commands from)5.478 F F2<8c72>4.888 E
-(st)-.1 E F0(to)3.658 E F2(last)3.068 E F0 .477
-(is selected from the his-)3.658 F .881(tory list.)144 120 R F2 -.45(Fi)
-5.881 G -.1(rs).45 G(t).1 E F0(and)4.061 E F2(last)3.471 E F0 .882
+-.35 E/F1 10/Times-Italic@0 SF(name)144.36 84 Q F0
+(that is not a function.)2.68 E/F2 10/Times-Bold@0 SF(fc)108 100.8 Q F0
+([)2.5 E F2<ad65>A F1(ename)2.5 E F0 2.5(][)C F2(\255nlr)-2.5 E F0 2.5
+(][)C F1<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F1(last)-2.5 E F0(])A F2
+(fc \255s)108 112.8 Q F0([)2.5 E F1(pat)A F0(=)A F1 -.37(re)C(p).37 E F0
+2.5(][)C F1(cmd)-2.5 E F0(])A .478(Fix Command.)144 124.8 R .478
+(In the \214rst form, a range of commands from)5.478 F F1<8c72>4.888 E
+(st)-.1 E F0(to)3.658 E F1(last)3.068 E F0 .477
+(is selected from the his-)3.658 F .881(tory list.)144 136.8 R F1 -.45
+(Fi)5.881 G -.1(rs).45 G(t).1 E F0(and)4.061 E F1(last)3.471 E F0 .882
 (may be speci\214ed as a string \(to locate the last command be)4.062 F
 .882(ginning with)-.15 F .797(that string\) or as a number \(an inde)144
-132 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F
+148.8 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F
 -.05(ga)-.15 G(ti).05 E 1.097 -.15(ve n)-.25 H .796(umber is used as an)
-.15 F(of)144 144 Q .276(fset from the current command number\).)-.25 F
-(If)5.276 E F2(last)2.866 E F0 .277
+.15 F(of)144 160.8 Q .276(fset from the current command number\).)-.25 F
+(If)5.276 E F1(last)2.866 E F0 .277
 (is not speci\214ed it is set to the current command)3.456 F .093
-(for listing \(so that)144 156 R/F3 10/Courier@0 SF .092
+(for listing \(so that)144 172.8 R/F3 10/Courier@0 SF .092
 (fc \255l \25510)2.592 F F0 .092(prints the last 10 commands\) and to)
-2.592 F F2<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72>
+2.592 F F1<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F1<8c72>
 4.502 E(st)-.1 E F0 .092(is not)3.272 F
-(speci\214ed it is set to the pre)144 168 Q
-(vious command for editing and \25516 for listing.)-.25 E(The)144 192 Q
-F1<ad6e>2.522 E F0 .022
+(speci\214ed it is set to the pre)144 184.8 Q
+(vious command for editing and \25516 for listing.)-.25 E(The)144 208.8
+Q F2<ad6e>2.522 E F0 .022
 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E
-F1<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
-(rses the order of).15 F .438(the commands.)144 204 R .438(If the)5.438
-F F1<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
+F2<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
+(rses the order of).15 F .438(the commands.)144 220.8 R .438(If the)
+5.438 F F2<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
 (n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E
-.334(the editor gi)144 216 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E F2
-(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835(do)
-.1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835 F
-(If)5.335 E F2(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G
-(n,).15 E .631(the v)144 228 R .631(alue of the)-.25 F/F4 9/Times-Bold@0
-SF(FCEDIT)3.131 E F0 -.25(va)2.881 G .631(riable is used, and the v).25
-F .631(alue of)-.25 F F4(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F4
-(FCEDIT)3.13 E F0 .63(is not set.)2.88 F .63(If nei-)5.63 F .95(ther v)
-144 240 R .95(ariable is set,)-.25 F F2(vi)5.116 E F0 .95(is used.)5.116
-F .951(When editing is complete, the edited commands are echoed and)5.95
-F -.15(exe)144 252 S(cuted.).15 E .04(In the second form,)144 276 R F2
+.334(the editor gi)144 232.8 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E
+F1(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835
+(do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835
+F(If)5.335 E F1(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G
+(n,).15 E .631(the v)144 244.8 R .631(alue of the)-.25 F/F4 9
+/Times-Bold@0 SF(FCEDIT)3.131 E F0 -.25(va)2.881 G .631
+(riable is used, and the v).25 F .631(alue of)-.25 F F4(EDIT)3.131 E(OR)
+-.162 E F0(if)2.881 E F4(FCEDIT)3.13 E F0 .63(is not set.)2.88 F .63
+(If nei-)5.63 F .95(ther v)144 256.8 R .95(ariable is set,)-.25 F F1(vi)
+5.116 E F0 .95(is used.)5.116 F .951
+(When editing is complete, the edited commands are echoed and)5.95 F
+-.15(exe)144 268.8 S(cuted.).15 E .04(In the second form,)144 292.8 R F1
 (command)2.54 E F0 .04(is re-e)2.54 F -.15(xe)-.15 G .039
-(cuted after each instance of).15 F F2(pat)2.539 E F0 .039
-(is replaced by)2.539 F F2 -.37(re)2.539 G(p).37 E F0 5.039(.A)C(useful)
--2.5 E .406(alias to use with this is)144 288 R F3 .406(r='fc \255s')
+(cuted after each instance of).15 F F1(pat)2.539 E F0 .039
+(is replaced by)2.539 F F1 -.37(re)2.539 G(p).37 E F0 5.039(.A)C(useful)
+-2.5 E .406(alias to use with this is)144 304.8 R F3 .406(r='fc \255s')
 2.906 F F0 2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F3
 6.406(rc)2.906 G(c)-6.406 E F0 .406(runs the last command be)2.906 F
-.407(ginning with)-.15 F F3(cc)144 300 Q F0(and typing)2.5 E F3(r)2.5 E
-F0(re-e)2.5 E -.15(xe)-.15 G(cutes the last command.).15 E .142
-(If the \214rst form is used, the return v)144 324 R .142
+.407(ginning with)-.15 F F3(cc)144 316.8 Q F0(and typing)2.5 E F3(r)2.5
+F0(re-e)2.5 E -.15(xe)-.15 G(cutes the last command.).15 E .142
+(If the \214rst form is used, the return v)144 340.8 R .142
 (alue is 0 unless an in)-.25 F -.25(va)-.4 G .142
-(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322
-E F2(last)2.732 E F0 .454(specify history lines out of range.)144 336 R
-.454(If the)5.454 F F1<ad65>2.954 E F0 .454
+(lid option is encountered or).25 F F1<8c72>4.552 E(st)-.1 E F0(or)3.322
+E F1(last)2.732 E F0 .454(specify history lines out of range.)144 352.8
+R .454(If the)5.454 F F2<ad65>2.954 E F0 .454
 (option is supplied, the return v)2.954 F .455(alue is the v)-.25 F .455
-(alue of the)-.25 F .788(last command e)144 348 R -.15(xe)-.15 G .788
+(alue of the)-.25 F .788(last command e)144 364.8 R -.15(xe)-.15 G .788
 (cuted or f).15 F .787
 (ailure if an error occurs with the temporary \214le of commands.)-.1 F
 .787(If the)5.787 F 1.135
 (second form is used, the return status is that of the command re-e)144
-360 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F2(cmd)3.836 E F0 1.136
-(does not)4.406 F(specify a v)144 372 Q
-(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E
-(ailure.)-.1 E F1(fg)108 388.8 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)
-144 400.8 Q F2(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413
+376.8 R -.15(xe)-.15 G 1.136(cuted, unless).15 F F1(cmd)3.836 E F0 1.136
+(does not)4.406 F(specify a v)144 388.8 Q
+(alid history line, in which case)-.25 E F2(fc)2.5 E F0(returns f)2.5 E
+(ailure.)-.1 E F2(fg)108 405.6 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume)
+144 417.6 Q F1(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413
 (ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413
-(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0
-1.413(is not present, the)4.223 F(shell')144 412.8 Q 3.116(sn)-.55 G
-.616(otion of the)-3.116 F F2(curr)3.116 E .616(ent job)-.37 F F0 .617
+(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1(jobspec)5.653 E F0
+1.413(is not present, the)4.223 F(shell')144 429.6 Q 3.116(sn)-.55 G
+.616(otion of the)-3.116 F F1(curr)3.116 E .616(ent job)-.37 F F0 .617
 (is used.)3.116 F .617(The return v)5.617 F .617
-(alue is that of the command placed into the)-.25 F(fore)144 424.8 Q
+(alue is that of the command placed into the)-.25 F(fore)144 441.6 Q
 .363(ground, or f)-.15 F .363
 (ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .362
-(hen run with job control enabled, if)-2.862 F F2(jobspec)145.74 436.8 Q
-F0 .004(does not specify a v)2.814 F .004(alid job or)-.25 F F2(jobspec)
+(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 453.6 Q
+F0 .004(does not specify a v)2.814 F .004(alid job or)-.25 F F1(jobspec)
 4.244 E F0 .004(speci\214es a job that w)2.814 F .004
-(as started without job control.)-.1 F F1(getopts)108 453.6 Q F2
-(optstring name)2.5 E F0([)2.5 E F2(ar)A(gs)-.37 E F0(])A F1(getopts)144
-465.6 Q F0 .793
-(is used by shell procedures to parse positional parameters.)3.294 F F2
+(as started without job control.)-.1 F F2(getopts)108 470.4 Q F1
+(optstring name)2.5 E F0([)2.5 E F1(ar)A(gs)-.37 E F0(])A F2(getopts)144
+482.4 Q F0 .793
+(is used by shell procedures to parse positional parameters.)3.294 F F1
 (optstring)6.023 E F0 .793(contains the option)3.513 F .149
-(characters to be recognized; if a character is follo)144 477.6 R .15
+(characters to be recognized; if a character is follo)144 494.4 R .15
 (wed by a colon, the option is e)-.25 F .15(xpected to ha)-.15 F .45
--.15(ve a)-.2 H(n).15 E(ar)144 489.6 Q .579
+-.15(ve a)-.2 H(n).15 E(ar)144 506.4 Q .579
 (gument, which should be separated from it by white space.)-.18 F .578
 (The colon and question mark char)5.579 F(-)-.2 E 1.665
-(acters may not be used as option characters.)144 501.6 R 1.665
-(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts)
+(acters may not be used as option characters.)144 518.4 R 1.665
+(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts)
 4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .797
-(option in the shell v)144 513.6 R(ariable)-.25 E F2(name)3.297 E F0
-3.297(,i).18 G(nitializing)-3.297 E F2(name)3.657 E F0 .797
+(option in the shell v)144 530.4 R(ariable)-.25 E F1(name)3.297 E F0
+3.297(,i).18 G(nitializing)-3.297 E F1(name)3.657 E F0 .797
 (if it does not e)3.477 F .796(xist, and the inde)-.15 F 3.296(xo)-.15 G
-3.296(ft)-3.296 G .796(he ne)-3.296 F(xt)-.15 E(ar)144 525.6 Q .085
+3.296(ft)-3.296 G .796(he ne)-3.296 F(xt)-.15 E(ar)144 542.4 Q .085
 (gument to be processed into the v)-.18 F(ariable)-.25 E F4(OPTIND)2.585
 E/F5 9/Times-Roman@0 SF(.)A F4(OPTIND)4.585 E F0 .085
 (is initialized to 1 each time the shell)2.335 F .846
-(or a shell script is in)144 537.6 R -.2(vo)-.4 G -.1(ke).2 G 3.345
-(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F1
+(or a shell script is in)144 554.4 R -.2(vo)-.4 G -.1(ke).2 G 3.345
+(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F2
 (getopts)3.345 E F0 .845(places that ar)3.345 F(gument)-.18 E .803
-(into the v)144 549.6 R(ariable)-.25 E F4(OPT)3.303 E(ARG)-.81 E F5(.)A
+(into the v)144 566.4 R(ariable)-.25 E F4(OPT)3.303 E(ARG)-.81 E F5(.)A
 F0 .803(The shell does not reset)5.303 F F4(OPTIND)3.303 E F0 .804
 (automatically; it must be manually)3.054 F .294
-(reset between multiple calls to)144 561.6 R F1(getopts)2.793 E F0 .293
+(reset between multiple calls to)144 578.4 R F2(getopts)2.793 E F0 .293
 (within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F
-2.793(ws)-.25 G .293(et of parameters)-2.793 F(is to be used.)144 573.6
-Q 2.043(When the end of options is encountered,)144 597.6 R F1(getopts)
+2.793(ws)-.25 G .293(et of parameters)-2.793 F(is to be used.)144 590.4
+Q 2.043(When the end of options is encountered,)144 614.4 R F2(getopts)
 4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.044
-(alue greater than zero.)-.25 F F1(OPTIND)144 609.6 Q F0
+(alue greater than zero.)-.25 F F2(OPTIND)144 626.4 Q F0
 (is set to the inde)2.5 E 2.5(xo)-.15 G 2.5(ft)-2.5 G
-(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0
-(is set to ?.)2.5 E F1(getopts)144 633.6 Q F0 2.393
+(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F2(name)2.5 E F0
+(is set to ?.)2.5 E F2(getopts)144 650.4 Q F0 2.393
 (normally parses the positional parameters, b)4.893 F 2.392
 (ut if more ar)-.2 F 2.392(guments are gi)-.18 F -.15(ve)-.25 G 4.892
-(ni).15 G(n)-4.892 E F2(ar)4.892 E(gs)-.37 E F0(,).27 E F1(getopts)144
-645.6 Q F0(parses those instead.)2.5 E F1(getopts)144 669.6 Q F0 1.165
+(ni).15 G(n)-4.892 E F1(ar)4.892 E(gs)-.37 E F0(,).27 E F2(getopts)144
+662.4 Q F0(parses those instead.)2.5 E F2(getopts)144 686.4 Q F0 1.165
 (can report errors in tw)3.665 F 3.665(ow)-.1 G 3.665(ays. If)-3.765 F
-1.165(the \214rst character of)3.665 F F2(optstring)3.895 E F0 1.166
-(is a colon,)3.886 F F2(silent)4.006 E F0(error)4.346 E 1.264
-(reporting is used.)144 681.6 R 1.263
+1.165(the \214rst character of)3.665 F F1(optstring)3.895 E F0 1.166
+(is a colon,)3.886 F F1(silent)4.006 E F0(error)4.346 E 1.264
+(reporting is used.)144 698.4 R 1.263
 (In normal operation diagnostic messages are printed when in)6.263 F
 -.25(va)-.4 G 1.263(lid options or).25 F .393(missing option ar)144
-693.6 R .393(guments are encountered.)-.18 F .394(If the v)5.394 F
+710.4 R .393(guments are encountered.)-.18 F .394(If the v)5.394 F
 (ariable)-.25 E F4(OPTERR)2.894 E F0 .394
-(is set to 0, no error messages)2.644 F(will be displayed, e)144 705.6 Q
+(is set to 0, no error messages)2.644 F(will be displayed, e)144 722.4 Q
 -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E
-F2(optstring)2.73 E F0(is not a colon.)2.72 E .667(If an in)144 729.6 R
--.25(va)-.4 G .667(lid option is seen,).25 F F1(getopts)3.167 E F0 .667
-(places ? into)3.167 F F2(name)3.527 E F0 .666
-(and, if not silent, prints an error message)3.347 F(GNU Bash-3.2)72 768
-Q(2006 September 28)135.125 E(51)185.115 E 0 Cg EP
+F1(optstring)2.73 E F0(is not a colon.)2.72 E(GNU Bash-3.2)72 768 Q
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(51)185.545 E 0 Cg EP
 %%Page: 52 52
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E .399(and unsets)144 84 R/F1 9/Times-Bold@0 SF(OPT)2.899 E(ARG)
--.81 E/F2 9/Times-Roman@0 SF(.)A F0(If)4.899 E/F3 10/Times-Bold@0 SF
-(getopts)2.899 E F0 .399
-(is silent, the option character found is placed in)2.899 F F1(OPT)2.899
-E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 96 Q
-1.242(If a required ar)144 120 R 1.242(gument is not found, and)-.18 F
-F3(getopts)3.741 E F0 1.241(is not silent, a question mark \()3.741 F F3
+-.35 E .667(If an in)144 84 R -.25(va)-.4 G .667(lid option is seen,).25
+F/F1 10/Times-Bold@0 SF(getopts)3.167 E F0 .667(places ? into)3.167 F/F2
+10/Times-Italic@0 SF(name)3.527 E F0 .666
+(and, if not silent, prints an error message)3.347 F .399(and unsets)144
+96 R/F3 9/Times-Bold@0 SF(OPT)2.899 E(ARG)-.81 E/F4 9/Times-Roman@0 SF
+(.)A F0(If)4.899 E F1(getopts)2.899 E F0 .399
+(is silent, the option character found is placed in)2.899 F F3(OPT)2.899
+E(ARG)-.81 E F0 .4(and no)2.65 F(diagnostic message is printed.)144 108
+Q 1.242(If a required ar)144 132 R 1.242(gument is not found, and)-.18 F
+F1(getopts)3.741 E F0 1.241(is not silent, a question mark \()3.741 F F1
 (?).833 E F0 3.741(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F
-/F4 10/Times-Italic@0 SF(name)144 132 Q F0(,).18 E F1(OPT)2.734 E(ARG)
--.81 E F0 .234(is unset, and a diagnostic message is printed.)2.484 F
-(If)5.234 E F3(getopts)2.734 E F0 .235(is silent, then a colon \()2.734
-F F3(:).833 E F0(\)).833 E(is placed in)144 144 Q F4(name)2.86 E F0(and)
-2.68 E F1(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)
-2.25 E F3(getopts)144 168 Q F0 .902
+F2(name)144 144 Q F0(,).18 E F3(OPT)2.734 E(ARG)-.81 E F0 .234
+(is unset, and a diagnostic message is printed.)2.484 F(If)5.234 E F1
+(getopts)2.734 E F0 .235(is silent, then a colon \()2.734 F F1(:).833 E
+F0(\)).833 E(is placed in)144 156 Q F2(name)2.86 E F0(and)2.68 E F3(OPT)
+2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F1
+(getopts)144 180 Q F0 .902
 (returns true if an option, speci\214ed or unspeci\214ed, is found.)
 3.402 F .902(It returns f)5.902 F .901(alse if the end of)-.1 F
-(options is encountered or an error occurs.)144 180 Q F3(hash)108 196.8
-Q F0([)2.5 E F3(\255lr)A F0 2.5(][)C F3<ad70>-2.5 E F4(\214lename)2.5 E
-F0 2.5(][)C F3(\255dt)-2.5 E F0 2.5(][)C F4(name)-2.5 E F0(])A -.15(Fo)
-144 208.8 S 3.554(re).15 G(ach)-3.554 E F4(name)3.554 E F0 3.554(,t).18
+(options is encountered or an error occurs.)144 192 Q F1(hash)108 208.8
+Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E F2(\214lename)2.5 E
+F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A -.15(Fo)
+144 220.8 S 3.554(re).15 G(ach)-3.554 E F2(name)3.554 E F0 3.554(,t).18
 G 1.054(he full \214le name of the command is determined by searching t\
-he directories in)-3.554 F F3($P)144 220.8 Q -.95(AT)-.74 G(H).95 E F0
-.35(and remembered.)2.85 F .35(If the)5.35 F F3<ad70>2.85 E F0 .349
-(option is supplied, no path search is performed, and)2.849 F F4
+he directories in)-3.554 F F1($P)144 232.8 Q -.95(AT)-.74 G(H).95 E F0
+.35(and remembered.)2.85 F .35(If the)5.35 F F1<ad70>2.85 E F0 .349
+(option is supplied, no path search is performed, and)2.849 F F2
 (\214lename)4.759 E F0 .452
-(is used as the full \214le name of the command.)144 232.8 R(The)5.452 E
-F3<ad72>2.952 E F0 .452(option causes the shell to for)2.952 F .453
-(get all remem-)-.18 F .593(bered locations.)144 244.8 R(The)5.593 E F3
+(is used as the full \214le name of the command.)144 244.8 R(The)5.452 E
+F1<ad72>2.952 E F0 .452(option causes the shell to for)2.952 F .453
+(get all remem-)-.18 F .593(bered locations.)144 256.8 R(The)5.593 E F1
 <ad64>3.093 E F0 .593(option causes the shell to for)3.093 F .592
-(get the remembered location of each)-.18 F F4(name)3.092 E F0(.)A .02
-(If the)144 256.8 R F3<ad74>2.52 E F0 .02
-(option is supplied, the full pathname to which each)2.52 F F4(name)
+(get the remembered location of each)-.18 F F2(name)3.092 E F0(.)A .02
+(If the)144 268.8 R F1<ad74>2.52 E F0 .02
+(option is supplied, the full pathname to which each)2.52 F F2(name)
 2.521 E F0 .021(corresponds is printed.)2.521 F .021(If multi-)5.021 F
-(ple)144 268.8 Q F4(name)3.704 E F0(ar)3.704 E 1.204
-(guments are supplied with)-.18 F F3<ad74>3.703 E F0 3.703(,t)C(he)
--3.703 E F4(name)3.703 E F0 1.203
-(is printed before the hashed full pathname.)3.703 F(The)144 280.8 Q F3
+(ple)144 280.8 Q F2(name)3.704 E F0(ar)3.704 E 1.204
+(guments are supplied with)-.18 F F1<ad74>3.703 E F0 3.703(,t)C(he)
+-3.703 E F2(name)3.703 E F0 1.203
+(is printed before the hashed full pathname.)3.703 F(The)144 292.8 Q F1
 <ad6c>3.215 E F0 .715(option causes output to be displayed in a format \
 that may be reused as input.)3.215 F .716(If no ar)5.716 F(gu-)-.18 E
-1.184(ments are gi)144 292.8 R -.15(ve)-.25 G 1.184(n, or if only).15 F
-F3<ad6c>3.684 E F0 1.183
+1.184(ments are gi)144 304.8 R -.15(ve)-.25 G 1.184(n, or if only).15 F
+F1<ad6c>3.684 E F0 1.183
 (is supplied, information about remembered commands is printed.)3.684 F
-(The return status is true unless a)144 304.8 Q F4(name)2.86 E F0
+(The return status is true unless a)144 316.8 Q F2(name)2.86 E F0
 (is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25
-E F3(help)108 321.6 Q F0([)2.5 E F3<ad73>A F0 2.5(][)C F4(pattern)-2.5 E
-F0(])A .866(Display helpful information about b)144 333.6 R .867
-(uiltin commands.)-.2 F(If)5.867 E F4(pattern)4.617 E F0 .867
-(is speci\214ed,)3.607 F F3(help)3.367 E F0(gi)3.367 E -.15(ve)-.25 G
+E F1(help)108 333.6 Q F0([)2.5 E F1<ad73>A F0 2.5(][)C F2(pattern)-2.5 E
+F0(])A .866(Display helpful information about b)144 345.6 R .867
+(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .867
+(is speci\214ed,)3.607 F F1(help)3.367 E F0(gi)3.367 E -.15(ve)-.25 G
 3.367(sd).15 G(etailed)-3.367 E .307(help on all commands matching)144
-345.6 R F4(pattern)2.807 E F0 2.807(;o).24 G .307
+357.6 R F2(pattern)2.807 E F0 2.807(;o).24 G .307
 (therwise help for all the b)-2.807 F .306
-(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 357.6
-R(The)5.596 E F3<ad73>3.096 E F0 .596
+(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 369.6
+R(The)5.596 E F1<ad73>3.096 E F0 .596
 (option restricts the information displayed to a short usage synopsis.)
 3.096 F(The)5.596 E(return status is 0 unless no command matches)144
-369.6 Q F4(pattern)2.5 E F0(.).24 E F3(history [)108 386.4 Q F4(n)A F3
-(])A(history \255c)108 398.4 Q(history \255d)108 410.4 Q F4(of)2.5 E
-(fset)-.18 E F3(history \255anrw)108 422.4 Q F0([)2.5 E F4(\214lename)A
-F0(])A F3(history \255p)108 434.4 Q F4(ar)2.5 E(g)-.37 E F0([)2.5 E F4
-(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F3(history \255s)108 446.4 Q F4(ar)
-2.5 E(g)-.37 E F0([)2.5 E F4(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)
-144 458.4 S .752
+381.6 Q F2(pattern)2.5 E F0(.).24 E F1(history [)108 398.4 Q F2(n)A F1
+(])A(history \255c)108 410.4 Q(history \255d)108 422.4 Q F2(of)2.5 E
+(fset)-.18 E F1(history \255anrw)108 434.4 Q F0([)2.5 E F2(\214lename)A
+F0(])A F1(history \255p)108 446.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2
+(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 458.4 Q F2(ar)
+2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)
+144 470.4 S .752
 (th no options, display the command history list with line numbers.).4 F
-.752(Lines listed with a)5.752 F F3(*)3.251 E F0(ha)3.251 E -.15(ve)-.2
-G 1.23(been modi\214ed.)144 470.4 R 1.23(An ar)6.23 F 1.23(gument of)
--.18 F F4(n)4.09 E F0 1.231(lists only the last)3.97 F F4(n)4.091 E F0
-3.731(lines. If)3.971 F 1.231(the shell v)3.731 F(ariable)-.25 E F3
-(HISTTIME-)3.731 E(FORMA)144 482.4 Q(T)-.95 E F0 .25
-(is set and not null, it is used as a format string for)2.75 F F4
+.752(Lines listed with a)5.752 F F1(*)3.251 E F0(ha)3.251 E -.15(ve)-.2
+G 1.23(been modi\214ed.)144 482.4 R 1.23(An ar)6.23 F 1.23(gument of)
+-.18 F F2(n)4.09 E F0 1.231(lists only the last)3.97 F F2(n)4.091 E F0
+3.731(lines. If)3.971 F 1.231(the shell v)3.731 F(ariable)-.25 E F1
+(HISTTIME-)3.731 E(FORMA)144 494.4 Q(T)-.95 E F0 .25
+(is set and not null, it is used as a format string for)2.75 F F2
 (strftime)2.749 E F0 .249(\(3\) to display the time stamp)B .378
-(associated with each displayed history entry)144 494.4 R 5.378(.N)-.65
+(associated with each displayed history entry)144 506.4 R 5.378(.N)-.65
 G 2.878(oi)-5.378 G(nterv)-2.878 E .379
 (ening blank is printed between the format-)-.15 F .815
-(ted time stamp and the history line.)144 506.4 R(If)5.814 E F4
+(ted time stamp and the history line.)144 518.4 R(If)5.814 E F2
 (\214lename)3.314 E F0 .814
 (is supplied, it is used as the name of the history)3.314 F
-(\214le; if not, the v)144 518.4 Q(alue of)-.25 E F1(HISTFILE)2.5 E F0
+(\214le; if not, the v)144 530.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0
 (is used.)2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H
-(he follo).15 E(wing meanings:)-.25 E F3<ad63>144 530.4 Q F0
-(Clear the history list by deleting all the entries.)25.86 E F3<ad64>144
-542.4 Q F4(of)2.5 E(fset)-.18 E F0(Delete the history entry at position)
-180 554.4 Q F4(of)2.5 E(fset)-.18 E F0(.)A F3<ad61>144 566.4 Q F0 .598
+(he follo).15 E(wing meanings:)-.25 E F1<ad63>144 542.4 Q F0
+(Clear the history list by deleting all the entries.)25.86 E F1<ad64>144
+554.4 Q F2(of)2.5 E(fset)-.18 E F0(Delete the history entry at position)
+180 566.4 Q F2(of)2.5 E(fset)-.18 E F0(.)A F1<ad61>144 578.4 Q F0 .598
 (Append the `)25.3 F(`ne)-.74 E(w')-.25 E 3.098('h)-.74 G .598
 (istory lines \(history lines entered since the be)-3.098 F .599
-(ginning of the current)-.15 F F3(bash)180 578.4 Q F0
-(session\) to the history \214le.)2.5 E F3<ad6e>144 590.4 Q F0 .854(Rea\
+(ginning of the current)-.15 F F1(bash)180 590.4 Q F0
+(session\) to the history \214le.)2.5 E F1<ad6e>144 602.4 Q F0 .854(Rea\
 d the history lines not already read from the history \214le into the c\
 urrent history list.)24.74 F .772
-(These are lines appended to the history \214le since the be)180 602.4 R
-.773(ginning of the current)-.15 F F3(bash)3.273 E F0(ses-)3.273 E
-(sion.)180 614.4 Q F3<ad72>144 626.4 Q F0(Read the contents of the hist\
-ory \214le and use them as the current history)25.86 E(.)-.65 E F3<ad77>
-144 638.4 Q F0(Write the current history to the history \214le, o)23.08
+(These are lines appended to the history \214le since the be)180 614.4 R
+.773(ginning of the current)-.15 F F1(bash)3.273 E F0(ses-)3.273 E
+(sion.)180 626.4 Q F1<ad72>144 638.4 Q F0(Read the contents of the hist\
+ory \214le and use them as the current history)25.86 E(.)-.65 E F1<ad77>
+144 650.4 Q F0(Write the current history to the history \214le, o)23.08
 E -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
-(ontents.)-2.5 E F3<ad70>144 650.4 Q F0 .626
-(Perform history substitution on the follo)24.74 F(wing)-.25 E F4(ar)
+(ontents.)-2.5 E F1<ad70>144 662.4 Q F0 .626
+(Perform history substitution on the follo)24.74 F(wing)-.25 E F2(ar)
 3.125 E(gs)-.37 E F0 .625(and display the result on the standard)3.125 F
-2.975(output. Does)180 662.4 R .475
-(not store the results in the history list.)2.975 F(Each)5.475 E F4(ar)
+2.975(output. Does)180 674.4 R .475
+(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
 2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
-(normal history e)180 674.4 Q(xpansion.)-.15 E F3<ad73>144 686.4 Q F0
-.363(Store the)26.41 F F4(ar)3.193 E(gs)-.37 E F0 .363
+(normal history e)180 686.4 Q(xpansion.)-.15 E F1<ad73>144 698.4 Q F0
+.363(Store the)26.41 F F2(ar)3.193 E(gs)-.37 E F0 .363
 (in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362
-(he last command in the history list is)-5.363 F(remo)180 698.4 Q -.15
-(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F4(ar)2.83 E(gs)-.37 E F0
-(are added.)2.77 E .28(If the)144 715.2 R F3(HISTTIMEFORMA)2.78 E(T)-.95
+(he last command in the history list is)-5.363 F(remo)180 710.4 Q -.15
+(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0
+(are added.)2.77 E .28(If the)144 727.2 R F1(HISTTIMEFORMA)2.78 E(T)-.95
 E F0 .28
 (is set, the time stamp information associated with each history entry)
-2.78 F .216(is written to the history \214le.)144 727.2 R .216
-(The return v)5.216 F .216(alue is 0 unless an in)-.25 F -.25(va)-.4 G
-.216(lid option is encountered, an error).25 F(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(52)185.115 E 0 Cg EP
+2.78 F(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27)
+.15 E(52)185.545 E 0 Cg EP
 %%Page: 53 53
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E .422(occurs while reading or writing the history \214le, an in)
-144 84 R -.25(va)-.4 G(lid).25 E/F1 10/Times-Italic@0 SF(of)2.922 E
-(fset)-.18 E F0 .422(is supplied as an ar)2.922 F .422(gument to)-.18 F
-/F2 10/Times-Bold@0 SF<ad64>2.922 E F0(,)A(or the history e)144 96 Q
+-.35 E .216(is written to the history \214le.)144 84 R .216
+(The return v)5.216 F .216(alue is 0 unless an in)-.25 F -.25(va)-.4 G
+.216(lid option is encountered, an error).25 F .422
+(occurs while reading or writing the history \214le, an in)144 96 R -.25
+(va)-.4 G(lid).25 E/F1 10/Times-Italic@0 SF(of)2.922 E(fset)-.18 E F0
+.422(is supplied as an ar)2.922 F .422(gument to)-.18 F/F2 10
+/Times-Bold@0 SF<ad64>2.922 E F0(,)A(or the history e)144 108 Q
 (xpansion supplied as an ar)-.15 E(gument to)-.18 E F2<ad70>2.5 E F0 -.1
-(fa)2.5 G(ils.).1 E F2(jobs)108 112.8 Q F0([)2.5 E F2(\255lnprs)A F0 2.5
-(][)C F1(jobspec)A F0(... ])2.5 E F2(jobs \255x)108 124.8 Q F1(command)
+(fa)2.5 G(ils.).1 E F2(jobs)108 124.8 Q F0([)2.5 E F2(\255lnprs)A F0 2.5
+(][)C F1(jobspec)A F0(... ])2.5 E F2(jobs \255x)108 136.8 Q F1(command)
 2.5 E F0([)2.5 E F1(ar)2.5 E(gs)-.37 E F0(... ])2.5 E
-(The \214rst form lists the acti)144 136.8 Q .3 -.15(ve j)-.25 H 2.5
+(The \214rst form lists the acti)144 148.8 Q .3 -.15(ve j)-.25 H 2.5
 (obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F2<ad6c>144 148.8 Q F0
+(wing meanings:)-.25 E F2<ad6c>144 160.8 Q F0
 (List process IDs in addition to the normal information.)27.52 E F2
-<ad70>144 160.8 Q F0(List only the process ID of the job')24.74 E 2.5
-(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad6e>144 172.8 Q F0
+<ad70>144 172.8 Q F0(List only the process ID of the job')24.74 E 2.5
+(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad6e>144 184.8 Q F0
 .194(Display information only about jobs that ha)24.74 F .494 -.15(ve c)
 -.2 H .193(hanged status since the user w).15 F .193(as last noti-)-.1 F
-(\214ed of their status.)180 184.8 Q F2<ad72>144 196.8 Q F0
-(Restrict output to running jobs.)25.86 E F2<ad73>144 208.8 Q F0
-(Restrict output to stopped jobs.)26.41 E(If)144 225.6 Q F1(jobspec)
+(\214ed of their status.)180 196.8 Q F2<ad72>144 208.8 Q F0
+(Restrict output to running jobs.)25.86 E F2<ad73>144 220.8 Q F0
+(Restrict output to stopped jobs.)26.41 E(If)144 237.6 Q F1(jobspec)
 4.553 E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313
 (n, output is restricted to information about that job).15 F 5.314(.T)
--.4 G .314(he return status is 0 unless)-5.314 F(an in)144 237.6 Q -.25
+-.4 G .314(he return status is 0 unless)-5.314 F(an in)144 249.6 Q -.25
 (va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25
-E F1(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 254.4 R F2
+E F1(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 266.4 R F2
 <ad78>2.895 E F0 .394(option is supplied,)2.894 F F2(jobs)2.894 E F0
 .394(replaces an)2.894 F(y)-.15 E F1(jobspec)4.634 E F0 .394(found in)
 3.204 F F1(command)3.094 E F0(or)3.664 E F1(ar)3.224 E(gs)-.37 E F0 .394
-(with the corre-)3.164 F(sponding process group ID, and e)144 266.4 Q
+(with the corre-)3.164 F(sponding process group ID, and e)144 278.4 Q
 -.15(xe)-.15 G(cutes).15 E F1(command)2.7 E F0(passing it)3.27 E F1(ar)
 2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E
-F2(kill)108 283.2 Q F0([)2.5 E F2<ad73>A F1(sigspec)2.5 E F0(|)2.5 E F2
+F2(kill)108 295.2 Q F0([)2.5 E F2<ad73>A F1(sigspec)2.5 E F0(|)2.5 E F2
 <ad6e>2.5 E F1(signum)2.5 E F0(|)2.5 E F2<ad>2.5 E F1(sigspec)A F0 2.5
 (][)C F1(pid)-2.5 E F0(|)2.5 E F1(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F2
-(kill \255l)108 295.2 Q F0([)2.5 E F1(sigspec)A F0(|)2.5 E F1 -.2(ex)2.5
-G(it_status).2 E F0(])A .119(Send the signal named by)144 307.2 R F1
+(kill \255l)108 307.2 Q F0([)2.5 E F1(sigspec)A F0(|)2.5 E F1 -.2(ex)2.5
+G(it_status).2 E F0(])A .119(Send the signal named by)144 319.2 R F1
 (sigspec)2.959 E F0(or)2.929 E F1(signum)2.959 E F0 .119
 (to the processes named by)2.939 F F1(pid)3.87 E F0(or)3.39 E F1
 (jobspec)2.62 E F0(.).31 E F1(sigspec)5.46 E F0(is)2.93 E .319
-(either a case-insensiti)144 319.2 R .619 -.15(ve s)-.25 H .319
+(either a case-insensiti)144 331.2 R .619 -.15(ve s)-.25 H .319
 (ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.819 E F0 .318
 (\(with or without the)2.569 F F3(SIG)2.818 E F0 .318
-(pre\214x\) or a signal)2.568 F(number;)144 331.2 Q F1(signum)4.188 E F0
+(pre\214x\) or a signal)2.568 F(number;)144 343.2 Q F1(signum)4.188 E F0
 1.349(is a signal number)4.168 F 6.349(.I)-.55 G(f)-6.349 E F1(sigspec)
 4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0
-1.349(is assumed.)3.599 F(An)6.349 E(ar)144 343.2 Q .523(gument of)-.18
+1.349(is assumed.)3.599 F(An)6.349 E(ar)144 355.2 Q .523(gument of)-.18
 F F2<ad6c>3.023 E F0 .523(lists the signal names.)3.023 F .523(If an)
 5.523 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when)
 .18 F F2<ad6c>3.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523
-(n, the names).15 F .28(of the signals corresponding to the ar)144 355.2
+(n, the names).15 F .28(of the signals corresponding to the ar)144 367.2
 R .28(guments are listed, and the return status is 0.)-.18 F(The)5.28 E
-F1 -.2(ex)2.78 G(it_status).2 E F0(ar)144 367.2 Q .378(gument to)-.18 F
+F1 -.2(ex)2.78 G(it_status).2 E F0(ar)144 379.2 Q .378(gument to)-.18 F
 F2<ad6c>2.878 E F0 .378
 (is a number specifying either a signal number or the e)2.878 F .377
-(xit status of a process termi-)-.15 F .593(nated by a signal.)144 379.2
+(xit status of a process termi-)-.15 F .593(nated by a signal.)144 391.2
 R F2(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F
 .593(as successfully sent, or f)-.1 F .594(alse if an error)-.1 F
-(occurs or an in)144 391.2 Q -.25(va)-.4 G(lid option is encountered.)
-.25 E F2(let)108 408 Q F1(ar)2.5 E(g)-.37 E F0([)2.5 E F1(ar)A(g)-.37 E
-F0(...])2.5 E(Each)144 420 Q F1(ar)3.965 E(g)-.37 E F0 1.135
+(occurs or an in)144 403.2 Q -.25(va)-.4 G(lid option is encountered.)
+.25 E F2(let)108 420 Q F1(ar)2.5 E(g)-.37 E F0([)2.5 E F1(ar)A(g)-.37 E
+F0(...])2.5 E(Each)144 432 Q F1(ar)3.965 E(g)-.37 E F0 1.135
 (is an arithmetic e)3.855 F 1.134(xpression to be e)-.15 F -.25(va)-.25
 G 1.134(luated \(see).25 F F3 1.134(ARITHMETIC EV)3.634 F(ALU)-1.215 E
 -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(\).)A F0 1.134(If the)
-5.634 F(last)144 432 Q F1(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G
+5.634 F(last)144 444 Q F1(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G
 (luates to 0,).25 E F2(let)2.5 E F0(returns 1; 0 is returned otherwise.)
-2.5 E F2(local)108 448.8 Q F0([)2.5 E F1(option)A F0 2.5(][)C F1(name)
--2.5 E F0([=)A F1(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 460.8 S
+2.5 E F2(local)108 460.8 Q F0([)2.5 E F1(option)A F0 2.5(][)C F1(name)
+-2.5 E F0([=)A F1(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 472.8 S
 2.56(re).15 G .06(ach ar)-2.56 F .06(gument, a local v)-.18 F .06
 (ariable named)-.25 F F1(name)2.92 E F0 .06(is created, and assigned)
 2.74 F F1(value)2.56 E F0 5.06(.T).18 G(he)-5.06 E F1(option)2.56 E F0
-.06(can be)2.56 F(an)144 472.8 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653
+.06(can be)2.56 F(an)144 484.8 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653
 (he options accepted by)-3.153 F F2(declar)3.153 E(e)-.18 E F0 5.652(.W)
 C(hen)-5.652 E F2(local)3.152 E F0 .652
 (is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144
-484.8 Q F1(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861
+496.8 Q F1(name)3.72 E F0 .86(to ha)3.54 F 1.16 -.15(ve a v)-.2 H .861
 (isible scope restricted to that function and its children.).15 F -.4
-(Wi)5.861 G .861(th no operands,).4 F F2(local)144 496.8 Q F0 1.165
+(Wi)5.861 G .861(th no operands,).4 F F2(local)144 508.8 Q F0 1.165
 (writes a list of local v)3.665 F 1.165
 (ariables to the standard output.)-.25 F 1.165(It is an error to use)
 6.165 F F2(local)3.664 E F0 1.164(when not)3.664 F .232
-(within a function.)144 508.8 R .233(The return status is 0 unless)5.232
+(within a function.)144 520.8 R .233(The return status is 0 unless)5.232
 F F2(local)2.733 E F0 .233(is used outside a function, an in)2.733 F
 -.25(va)-.4 G(lid).25 E F1(name)3.093 E F0(is)2.913 E(supplied, or)144
-520.8 Q F1(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F2
-(logout)108 537.6 Q F0(Exit a login shell.)9.33 E F2(popd)108 554.4 Q F0
+532.8 Q F1(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F2
+(logout)108 549.6 Q F0(Exit a login shell.)9.33 E F2(popd)108 566.4 Q F0
 <5bad>2.5 E F2(n)A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C<ad>-2.5 E F1
-(n)A F0(])A(Remo)144 566.4 Q -.15(ve)-.15 G 2.8(se).15 G .3
+(n)A F0(])A(Remo)144 578.4 Q -.15(ve)-.15 G 2.8(se).15 G .3
 (ntries from the directory stack.)-2.8 F -.4(Wi)5.299 G .299(th no ar).4
 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 G .299
 (he top directory from the)-2.799 F 1.478(stack, and performs a)144
-578.4 R F2(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479
+590.4 R F2(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479
 (op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.479
 (uments, if supplied, ha).18 F 1.779 -.15(ve t)-.2 H 1.479(he follo).15
-F(wing)-.25 E(meanings:)144 590.4 Q F2(+)144 602.4 Q F1(n)A F0(Remo)25.3
-E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F1(n)2.64 E F0 .14
-(th entry counting from the left of the list sho)B .14(wn by)-.25 F F2
-(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
-614.4 S 2.5(re).15 G(xample:)-2.65 E/F5 10/Courier@0 SF(popd +0)2.5 E F0
-(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
--.65 E F5(popd +1)2.5 E F0(the second.)2.5 E F2<ad>144 626.4 Q F1(n)A F0
-(Remo)25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F1(n)3.759 E F0
-1.259(th entry counting from the right of the list sho)B 1.26(wn by)-.25
-F F2(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180
-638.4 R(or e)-.15 E(xample:)-.15 E F5(popd -0)2.5 E F0(remo)2.5 E -.15
-(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F5(popd -1)2.5
-E F0(the ne)2.5 E(xt to last.)-.15 E F2<ad6e>144 650.4 Q F0 .551
+F(wing)-.25 E(meanings:)144 602.4 Q F2<ad6e>144 614.4 Q F0 .551
 (Suppresses the normal change of directory when remo)24.74 F .551
 (ving directories from the stack, so)-.15 F
-(that only the stack is manipulated.)180 662.4 Q .643(If the)144 679.2 R
-F2(popd)3.143 E F0 .643(command is successful, a)3.143 F F2(dirs)3.143 E
-F0 .644(is performed as well, and the return status is 0.)3.143 F F2
-(popd)5.644 E F0 .416(returns f)144 691.2 R .416(alse if an in)-.1 F
--.25(va)-.4 G .415
+(that only the stack is manipulated.)180 626.4 Q F2(+)144 638.4 Q F1(n)A
+F0(Remo)25.3 E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F1(n)2.64 E F0
+.14(th entry counting from the left of the list sho)B .14(wn by)-.25 F
+F2(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
+650.4 S 2.5(re).15 G(xample:)-2.65 E/F5 10/Courier@0 SF(popd +0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
+-.65 E F5(popd +1)2.5 E F0(the second.)2.5 E F2<ad>144 662.4 Q F1(n)A F0
+(Remo)25.3 E -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F1(n)3.76 E F0
+1.259(th entry counting from the right of the list sho)B 1.259(wn by)
+-.25 F F2(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F 2.5
+(zero. F)180 674.4 R(or e)-.15 E(xample:)-.15 E F5(popd -0)2.5 E F0
+(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65
+E F5(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .643(If the)144
+691.2 R F2(popd)3.143 E F0 .643(command is successful, a)3.143 F F2
+(dirs)3.143 E F0 .644(is performed as well, and the return status is 0.)
+3.143 F F2(popd)5.644 E F0 .416(returns f)144 703.2 R .416
+(alse if an in)-.1 F -.25(va)-.4 G .415
 (lid option is encountered, the directory stack is empty).25 F 2.915
 (,an)-.65 G(on-e)-2.915 E .415(xistent direc-)-.15 F
-(tory stack entry is speci\214ed, or the directory change f)144 703.2 Q
-(ails.)-.1 E(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(53)
-185.115 E 0 Cg EP
+(tory stack entry is speci\214ed, or the directory change f)144 715.2 Q
+(ails.)-.1 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G
+(mber 27).15 E(53)185.545 E 0 Cg EP
 %%Page: 54 54
 %%BeginPageSetup
 BP
@@ -6333,29 +6362,28 @@ F2(var)2.904 E F0 .404(rather than being printed to the)2.904 F
 .15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .034(alue or null string,)
 -.25 F(as appropriate, had been supplied.)144 276 Q(The return v)5 E
 (alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd)
-108 292.8 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C F2(dir)-2.5 E F0(])A F1
-(pushd)108 304.8 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0
-2.5(][)C<ad>-2.5 E F2(n)A F0(])A .64(Adds a directory to the top of the\
- directory stack, or rotates the stack, making the ne)144 316.8 R 3.139
-(wt)-.25 G .639(op of the)-3.139 F 1.315(stack the current w)144 328.8 R
+108 292.8 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0 2.5(][)C
+<ad>-2.5 E F2(n)A F0(])A F1(pushd)108 304.8 Q F0([)2.5 E F1<ad6e>A F0
+2.5(][)C F2(dir)-2.5 E F0(])A .64(Adds a directory to the top of the di\
+rectory stack, or rotates the stack, making the ne)144 316.8 R 3.139(wt)
+-.25 G .639(op of the)-3.139 F 1.315(stack the current w)144 328.8 R
 1.315(orking directory)-.1 F 6.315(.W)-.65 G 1.315(ith no ar)-6.715 F
 1.315(guments, e)-.18 F 1.316(xchanges the top tw)-.15 F 3.816(od)-.1 G
 1.316(irectories and)-3.816 F .872
 (returns 0, unless the directory stack is empty)144 340.8 R 5.871(.A)
 -.65 G -.18(rg)-5.871 G .871(uments, if supplied, ha).18 F 1.171 -.15
 (ve t)-.2 H .871(he follo).15 F .871(wing mean-)-.25 F(ings:)144 352.8 Q
-F1(+)144 364.8 Q F2(n)A F0 1.267(Rotates the stack so that the)25.3 F F2
-(n)3.767 E F0 1.268
-(th directory \(counting from the left of the list sho)B 1.268(wn by)
--.25 F F1(dirs)180 376.8 Q F0 2.5(,s)C
-(tarting with zero\) is at the top.)-2.5 E F1<ad>144 388.8 Q F2(n)A F0
+F1<ad6e>144 364.8 Q F0 .902(Suppresses the normal change of directory w\
+hen adding directories to the stack, so that)24.74 F
+(only the stack is manipulated.)180 376.8 Q F1(+)144 388.8 Q F2(n)A F0
+1.268(Rotates the stack so that the)25.3 F F2(n)3.768 E F0 1.267
+(th directory \(counting from the left of the list sho)B 1.267(wn by)
+-.25 F F1(dirs)180 400.8 Q F0 2.5(,s)C
+(tarting with zero\) is at the top.)-2.5 E F1<ad>144 412.8 Q F2(n)A F0
 .92(Rotates the stack so that the)25.3 F F2(n)3.42 E F0 .92
 (th directory \(counting from the right of the list sho)B .92(wn by)-.25
-F F1(dirs)180 400.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
--2.5 E F1<ad6e>144 412.8 Q F0 .902(Suppresses the normal change of dire\
-ctory when adding directories to the stack, so that)24.74 F
-(only the stack is manipulated.)180 424.8 Q F2(dir)144.35 436.8 Q F0
-(Adds)23.98 E F2(dir)2.85 E F0
+F F1(dirs)180 424.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
+-2.5 E F2(dir)144.35 436.8 Q F0(Adds)23.98 E F2(dir)2.85 E F0
 (to the directory stack at the top, making it the ne)3.23 E 2.5(wc)-.25
 G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .489(If the)144 453.6
 R F1(pushd)2.989 E F0 .489(command is successful, a)2.989 F F1(dirs)
@@ -6409,8 +6437,8 @@ H 1.891(pecial meaning for the ne).15 F 1.89
 -.25 E F2(aname)3.55 E F0 3.55(,s).18 G 1.05(tarting at 0.)-3.55 F F2
 (aname)180.33 703.2 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5 -.25
 (ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F2(name)2.5 E F0(ar)2.5
-E(guments are ignored.)-.18 E(GNU Bash-3.2)72 768 Q(2006 September 28)
-135.125 E(54)185.115 E 0 Cg EP
+E(guments are ignored.)-.18 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(54)185.545 E 0 Cg EP
 %%Page: 55 55
 %%BeginPageSetup
 BP
@@ -6530,210 +6558,213 @@ F0 .54(Automatically mark v)29.3 F .539
 -.15 G 4.193(\)e).15 G 1.693(xits with a)-4.343 F .011(non-zero status.)
 184 703.2 R .011(The shell does not e)5.011 F .011
 (xit if the command that f)-.15 F .012(ails is part of the command)-.1 F
-.624(list immediately follo)184 715.2 R .624(wing a)-.25 F F1(while)
-3.124 E F0(or)3.124 E F1(until)3.124 E F0 -.1(ke)3.124 G(yw)-.05 E .624
-(ord, part of the test in an)-.1 F F2(if)3.134 E F0(statement,)5.084 E
-.425(part of a)184 727.2 R F1(&&)2.925 E F0(or)2.925 E/F5 10/Symbol SF
-<efef>2.926 E F0 .426(list, or if the command')2.926 F 2.926(sr)-.55 G
-.426(eturn v)-2.926 F .426(alue is being in)-.25 F -.15(ve)-.4 G .426
-(rted via).15 F F1(!)2.926 E F0 5.426(.A)C(trap)-2.5 E(GNU Bash-3.2)72
-768 Q(2006 September 28)135.125 E(55)185.115 E 0 Cg EP
+.719(list immediately follo)184 715.2 R .719(wing a)-.25 F F1(while)
+3.219 E F0(or)3.219 E F1(until)3.219 E F0 -.1(ke)3.219 G(yw)-.05 E .719
+(ord, part of the test in an)-.1 F F1(if)3.218 E F0(statement,)3.218 E
+1.163(part of a)184 727.2 R F1(&&)3.664 E F0(or)3.664 E/F5 10/Symbol SF
+<efef>3.664 E F0 1.164(list, an)3.664 F 3.664(yc)-.15 G 1.164
+(ommand in a pipeline b)-3.664 F 1.164(ut the last, or if the command')
+-.2 F(s)-.55 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15(ve)-.15 G
+(mber 27).15 E(55)185.545 E 0 Cg EP
 %%Page: 56 56
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E(on)184 84 Q/F1 10/Times-Bold@0 SF(ERR)2.5 E F0 2.5(,i)C 2.5(fs)
--2.5 G(et, is e)-2.5 E -.15(xe)-.15 G(cuted before the shell e).15 E
-(xits.)-.15 E F1<ad66>144 96 Q F0(Disable pathname e)30.97 E(xpansion.)
--.15 E F1<ad68>144 108 Q F0 2.239
-(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G 2.238
-(re look)-4.738 F 2.238(ed up for e)-.1 F -.15(xe)-.15 G 4.738
-(cution. This).15 F(is)4.738 E(enabled by def)184 120 Q(ault.)-.1 E F1
-<ad6b>144 132 Q F0 .513(All ar)28.74 F .514
+-.35 E .7(return v)184 84 R .7(alue is being in)-.25 F -.15(ve)-.4 G .7
+(rted via).15 F/F1 10/Times-Bold@0 SF(!)3.2 E F0 5.7(.A)C .699(trap on)
+-2.501 F F1(ERR)3.199 E F0 3.199(,i)C 3.199(fs)-3.199 G .699(et, is e)
+-3.199 F -.15(xe)-.15 G .699(cuted before the shell).15 F -.15(ex)184 96
+S(its.).15 E F1<ad66>144 108 Q F0(Disable pathname e)30.97 E(xpansion.)
+-.15 E F1<ad68>144 120 Q F0 2.238
+(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G 2.239
+(re look)-4.738 F 2.239(ed up for e)-.1 F -.15(xe)-.15 G 4.739
+(cution. This).15 F(is)4.739 E(enabled by def)184 132 Q(ault.)-.1 E F1
+<ad6b>144 144 Q F0 .514(All ar)28.74 F .514
 (guments in the form of assignment statements are placed in the en)-.18
-F .514(vironment for a)-.4 F
-(command, not just those that precede the command name.)184 144 Q F1
-<ad6d>144 156 Q F0 .149(Monitor mode.)25.97 F .149
-(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
-.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .636
-(on systems that support it \(see)184 168 R/F2 9/Times-Bold@0 SF .636
+F .513(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 156 Q F1
+<ad6d>144 168 Q F0 .148(Monitor mode.)25.97 F .148
+(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F
+.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .637
+(on systems that support it \(see)184 180 R/F2 9/Times-Bold@0 SF .636
 (JOB CONTR)3.136 F(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136
-(\). Background).15 F .637(processes run in a)3.136 F .642
-(separate process group and a line containing their e)184 180 R .641
-(xit status is printed upon their com-)-.15 F(pletion.)184 192 Q F1
-<ad6e>144 204 Q F0 .652(Read commands b)28.74 F .652(ut do not e)-.2 F
--.15(xe)-.15 G .652(cute them.).15 F .653
-(This may be used to check a shell script for)5.652 F(syntax errors.)184
-216 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
-F1<ad6f>144 228 Q/F3 10/Times-Italic@0 SF(option\255name)2.5 E F0(The)
-184 240 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5 E
-(wing:)-.25 E F1(allexport)184 252 Q F0(Same as)224 264 Q F1<ad61>2.5 E
-F0(.)A F1(braceexpand)184 276 Q F0(Same as)224 288 Q F1<ad42>2.5 E F0(.)
-A F1(emacs)184 300 Q F0 .089
+(\). Background).15 F .636(processes run in a)3.136 F .641
+(separate process group and a line containing their e)184 192 R .642
+(xit status is printed upon their com-)-.15 F(pletion.)184 204 Q F1
+<ad6e>144 216 Q F0 .653(Read commands b)28.74 F .653(ut do not e)-.2 F
+-.15(xe)-.15 G .653(cute them.).15 F .652
+(This may be used to check a shell script for)5.653 F(syntax errors.)184
+228 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
+F1<ad6f>144 240 Q/F3 10/Times-Italic@0 SF(option\255name)2.5 E F0(The)
+184 252 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5 E
+(wing:)-.25 E F1(allexport)184 264 Q F0(Same as)224 276 Q F1<ad61>2.5 E
+F0(.)A F1(braceexpand)184 288 Q F0(Same as)224 300 Q F1<ad42>2.5 E F0(.)
+A F1(emacs)184 312 Q F0 .089
 (Use an emacs-style command line editing interf)13.9 F 2.589(ace. This)
 -.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95
-(when the shell is interacti)224 312 R -.15(ve)-.25 G 3.45(,u).15 G .95
+(when the shell is interacti)224 324 R -.15(ve)-.25 G 3.45(,u).15 G .95
 (nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E
-F0(option.)224 324 Q F1(errtrace)184 336 Q F0(Same as)5.03 E F1<ad45>2.5
-E F0(.)A F1(functrace)184 348 Q F0(Same as)224 360 Q F1<ad54>2.5 E F0(.)
-A F1(err)184 372 Q(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5 E F0(.)A
-F1(hashall)184 384 Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1
-(histexpand)184 396 Q F0(Same as)224 408 Q F1<ad48>2.5 E F0(.)A F1
-(history)184 420 Q F0 .587(Enable command history)10 F 3.087(,a)-.65 G
+F0(option.)224 336 Q F1(errtrace)184 348 Q F0(Same as)5.03 E F1<ad45>2.5
+E F0(.)A F1(functrace)184 360 Q F0(Same as)224 372 Q F1<ad54>2.5 E F0(.)
+A F1(err)184 384 Q(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5 E F0(.)A
+F1(hashall)184 396 Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1
+(histexpand)184 408 Q F0(Same as)224 420 Q F1<ad48>2.5 E F0(.)A F1
+(history)184 432 Q F0 .586(Enable command history)10 F 3.087(,a)-.65 G
 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder)
 .15 E F2(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF(.)A F0
-.587(This option is)5.087 F(on by def)224 432 Q(ault in interacti)-.1 E
-.3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 444 Q(eeof)-.18 E F0 1.656
-(The ef)224 456 R 1.656(fect is as if the shell command)-.25 F/F5 10
-/Courier@0 SF(IGNOREEOF=10)4.157 E F0 1.657(had been e)4.157 F -.15(xe)
--.15 G(cuted).15 E(\(see)224 468 Q F1(Shell V)2.5 E(ariables)-.92 E F0
-(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1 -.1(ke)184 480 S(yw).1 E(ord)-.1
-E F0(Same as)224 492 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 504 Q F0
-(Same as)5.56 E F1<ad6d>2.5 E F0(.)A F1(noclob)184 516 Q(ber)-.1 E F0
-(Same as)224 528 Q F1<ad43>2.5 E F0(.)A F1(noexec)184 540 Q F0(Same as)
-11.12 E F1<ad6e>2.5 E F0(.)A F1(noglob)184 552 Q F0(Same as)11.1 E F1
+.587(This option is)5.087 F(on by def)224 444 Q(ault in interacti)-.1 E
+.3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 456 Q(eeof)-.18 E F0 1.657
+(The ef)224 468 R 1.657(fect is as if the shell command)-.25 F/F5 10
+/Courier@0 SF(IGNOREEOF=10)4.156 E F0 1.656(had been e)4.156 F -.15(xe)
+-.15 G(cuted).15 E(\(see)224 480 Q F1(Shell V)2.5 E(ariables)-.92 E F0
+(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1 -.1(ke)184 492 S(yw).1 E(ord)-.1
+E F0(Same as)224 504 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 516 Q F0
+(Same as)5.56 E F1<ad6d>2.5 E F0(.)A F1(noclob)184 528 Q(ber)-.1 E F0
+(Same as)224 540 Q F1<ad43>2.5 E F0(.)A F1(noexec)184 552 Q F0(Same as)
+11.12 E F1<ad6e>2.5 E F0(.)A F1(noglob)184 564 Q F0(Same as)11.1 E F1
 <ad66>2.5 E F0(.)A F1(nolog)5 E F0(Currently ignored.)2.5 E F1(notify)
-184 564 Q F0(Same as)15 E F1<ad62>2.5 E F0(.)A F1(nounset)184 576 Q F0
-(Same as)6.66 E F1<ad75>2.5 E F0(.)A F1(onecmd)184 588 Q F0(Same as)6.67
-E F1<ad74>2.5 E F0(.)A F1(ph)184 600 Q(ysical)-.15 E F0(Same as)5.14 E
-F1<ad50>2.5 E F0(.)A F1(pipefail)184 612 Q F0 1.03(If set, the return v)
-7.77 F 1.029(alue of a pipeline is the v)-.25 F 1.029
-(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 624 R
-1.136
+184 576 Q F0(Same as)15 E F1<ad62>2.5 E F0(.)A F1(nounset)184 588 Q F0
+(Same as)6.66 E F1<ad75>2.5 E F0(.)A F1(onecmd)184 600 Q F0(Same as)6.67
+E F1<ad74>2.5 E F0(.)A F1(ph)184 612 Q(ysical)-.15 E F0(Same as)5.14 E
+F1<ad50>2.5 E F0(.)A F1(pipefail)184 624 Q F0 1.029
+(If set, the return v)7.77 F 1.029(alue of a pipeline is the v)-.25 F
+1.03(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 636
+1.136
 (xit with a non-zero status, or zero if all commands in the pipeline)
--.15 F -.15(ex)224 636 S(it successfully).15 E 5(.T)-.65 G
-(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 648 Q F0
-2.091(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
+-.15 F -.15(ex)224 648 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 660 Q F0
+2.09(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
 2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091
-(fers from the)-.25 F(POSIX standard to match the standard \()224 660 Q
-F3(posix mode)A F0(\).)A F1(pri)184 672 Q(vileged)-.1 E F0(Same as)224
-684 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 696 S(rbose).1 E F0(Same as)
-7.33 E F1<ad76>2.5 E F0(.)A F1(vi)184 708 Q F0
-(Use a vi-style command line editing interf)32.22 E(ace.)-.1 E
-(GNU Bash-3.2)72 768 Q(2006 September 28)135.125 E(56)185.115 E 0 Cg EP
+(fers from the)-.25 F(POSIX standard to match the standard \()224 672 Q
+F3(posix mode)A F0(\).)A F1(pri)184 684 Q(vileged)-.1 E F0(Same as)224
+696 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 708 S(rbose).1 E F0(Same as)
+7.33 E F1<ad76>2.5 E F0(.)A(GNU Bash-3.2)72 768 Q(2006 No)135.555 E -.15
+(ve)-.15 G(mber 27).15 E(56)185.545 E 0 Cg EP
 %%Page: 57 57
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(xtrace)184 84 Q F0(Same as)13.35 E F1<ad78>
-2.5 E F0(.)A(If)184 102 Q F1<ad6f>3.052 E F0 .552(is supplied with no)
-3.052 F/F2 10/Times-Italic@0 SF(option\255name)3.053 E F0 3.053(,t)C
-.553(he v)-3.053 F .553(alues of the current options are printed.)-.25 F
-(If)5.553 E F1(+o)184 114 Q F0 1.072(is supplied with no)3.572 F F2
-(option\255name)3.572 E F0 3.572(,a)C 1.071(series of)-.001 F F1(set)
-3.571 E F0 1.071(commands to recreate the current)3.571 F
-(option settings is displayed on the standard output.)184 126 Q F1<ad70>
-144 138 Q F0 -.45(Tu)28.74 G 1.071(rn on).45 F F2(privile)4.821 E -.1
-(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F
+-.35 E/F1 10/Times-Bold@0 SF(vi)184 84 Q F0
+(Use a vi-style command line editing interf)32.22 E(ace.)-.1 E F1
+(xtrace)184 96 Q F0(Same as)13.35 E F1<ad78>2.5 E F0(.)A(If)184 114 Q F1
+<ad6f>3.053 E F0 .553(is supplied with no)3.053 F/F2 10/Times-Italic@0
+SF(option\255name)3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552
+(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184
+126 Q F0 1.071(is supplied with no)3.571 F F2(option\255name)3.571 E F0
+3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072
+(commands to recreate the current)3.572 F
+(option settings is displayed on the standard output.)184 138 Q F1<ad70>
+144 150 Q F0 -.45(Tu)28.74 G 1.072(rn on).45 F F2(privile)4.822 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
 /F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)
--.27 E F0 1.072(\214les are not pro-)3.322 F 1.705
-(cessed, shell functions are not inherited from the en)184 150 R 1.705
-(vironment, and the)-.4 F F3(SHELLOPTS)4.205 E F0 -.25(va)184 162 S .018
+-.27 E F0 1.071(\214les are not pro-)3.322 F 1.705
+(cessed, shell functions are not inherited from the en)184 162 R 1.705
+(vironment, and the)-.4 F F3(SHELLOPTS)4.206 E F0 -.25(va)184 174 S .019
 (riable, if it appears in the en).25 F .019(vironment, is ignored.)-.4 F
-.019(If the shell is started with the ef)5.019 F(fec-)-.25 E(ti)184 174
-Q 1.159 -.15(ve u)-.25 H .859
+.018(If the shell is started with the ef)5.019 F(fec-)-.25 E(ti)184 186
+Q 1.158 -.15(ve u)-.25 H .859
 (ser \(group\) id not equal to the real user \(group\) id, and the).15 F
-F1<ad70>3.359 E F0 .858(option is not sup-)3.359 F .293
-(plied, these actions are tak)184 186 R .293(en and the ef)-.1 F(fecti)
+F1<ad70>3.359 E F0 .859(option is not sup-)3.359 F .294
+(plied, these actions are tak)184 198 R .293(en and the ef)-.1 F(fecti)
 -.25 E .593 -.15(ve u)-.25 H .293(ser id is set to the real user id.).15
-F .294(If the)5.294 F F1<ad70>2.794 E F0 1.196
-(option is supplied at startup, the ef)184 198 R(fecti)-.25 E 1.495 -.15
-(ve u)-.25 H 1.195(ser id is not reset.).15 F -.45(Tu)6.195 G 1.195
-(rning this option of).45 F(f)-.25 E(causes the ef)184 210 Q(fecti)-.25
+F .293(If the)5.293 F F1<ad70>2.793 E F0 1.195
+(option is supplied at startup, the ef)184 210 R(fecti)-.25 E 1.495 -.15
+(ve u)-.25 H 1.195(ser id is not reset.).15 F -.45(Tu)6.196 G 1.196
+(rning this option of).45 F(f)-.25 E(causes the ef)184 222 Q(fecti)-.25
 E .3 -.15(ve u)-.25 H
 (ser and group ids to be set to the real user and group ids.).15 E F1
-<ad74>144 222 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 G
-(cuting one command.).15 E F1<ad75>144 234 Q F0 -.35(Tr)28.74 G .444
+<ad74>144 234 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 G
+(cuting one command.).15 E F1<ad75>144 246 Q F0 -.35(Tr)28.74 G .445
 (eat unset v).35 F .444
 (ariables as an error when performing parameter e)-.25 F 2.944
-(xpansion. If)-.15 F -.15(ex)2.945 G .445(pansion is).15 F .52
-(attempted on an unset v)184 246 R .519
+(xpansion. If)-.15 F -.15(ex)2.944 G .444(pansion is).15 F .519
+(attempted on an unset v)184 258 R .519
 (ariable, the shell prints an error message, and, if not interacti)-.25
-F -.15(ve)-.25 G(,).15 E -.15(ex)184 258 S(its with a non-zero status.)
-.15 E F1<ad76>144 270 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
--.15 G(re read.)-2.5 E F1<ad78>144 282 Q F0 .315(After e)29.3 F .315
+F -.15(ve)-.25 G(,).15 E -.15(ex)184 270 S(its with a non-zero status.)
+.15 E F1<ad76>144 282 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
+-.15 G(re read.)-2.5 E F1<ad78>144 294 Q F0 .315(After e)29.3 F .315
 (xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25(fo)
 2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E
-F1(select)2.815 E F0(command,)2.815 E 1.236(or arithmetic)184 294 R F1
+F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184 306 R F1
 -.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F 1.236
 (xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E/F4 9/Times-Roman@0
 SF(,)A F0(follo)3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184
-306 Q(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E
-F1<ad42>144 318 Q F0 2.578(The shell performs brace e)27.63 F 2.578
+318 Q(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E
+F1<ad42>144 330 Q F0 2.579(The shell performs brace e)27.63 F 2.578
 (xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E
--.15(ve)-.15 G 5.079(\). This).15 F 2.579(is on by)5.079 F(def)184 330 Q
-(ault.)-.1 E F1<ad43>144 342 Q F0 .214(If set,)27.08 F F1(bash)2.714 E
-F0 .214(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
+-.15(ve)-.15 G 5.078(\). This).15 F 2.578(is on by)5.078 F(def)184 342 Q
+(ault.)-.1 E F1<ad43>144 354 Q F0 .213(If set,)27.08 F F1(bash)2.713 E
+F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
 (xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
-2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F
-3.053(tors. This)184 354 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
+3.054(tors. This)184 366 R .553(may be o)3.053 F -.15(ve)-.15 G .553
 (rridden when creating output \214les by using the redirection opera-)
-.15 F(tor)184 366 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
-<ad45>144 378 Q F0 .104(If set, an)27.63 F 2.604(yt)-.15 G .104(rap on)
--2.604 F F1(ERR)2.604 E F0 .103
-(is inherited by shell functions, command substitutions, and com-)2.604
-F .838(mands e)184 390 R -.15(xe)-.15 G .838(cuted in a subshell en).15
-F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839
-(trap is normally not inherited in)3.339 F(such cases.)184 402 Q F1
-<ad48>144 414 Q F0(Enable)26.52 E F1(!)3.032 E F0 .532
-(style history substitution.)5.532 F .531(This option is on by def)5.532
-F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 426 Q -.15
-(ve)-.25 G(.).15 E F1<ad50>144 438 Q F0 1.164
+.15 F(tor)184 378 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 390 Q F0 .103(If set, an)27.63 F 2.603(yt)-.15 G .103(rap on)
+-2.603 F F1(ERR)2.603 E F0 .104
+(is inherited by shell functions, command substitutions, and com-)2.603
+F .839(mands e)184 402 R -.15(xe)-.15 G .839(cuted in a subshell en).15
+F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
+(trap is normally not inherited in)3.338 F(such cases.)184 414 Q F1
+<ad48>144 426 Q F0(Enable)26.52 E F1(!)3.031 E F0 .531
+(style history substitution.)5.531 F .531(This option is on by def)5.531
+F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 438 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 450 Q F0 1.165
 (If set, the shell does not follo)28.19 F 3.664(ws)-.25 G 1.164
-(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.165
-(cuting commands such as).15 F F1(cd)3.665 E F0 2.822
-(that change the current w)184 450 R 2.822(orking directory)-.1 F 7.822
-(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.821
-(ysical directory structure)-.05 F 2.685(instead. By)184 462 R(def)2.685
+(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.164
+(cuting commands such as).15 F F1(cd)3.664 E F0 2.821
+(that change the current w)184 462 R 2.822(orking directory)-.1 F 7.822
+(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.822
+(ysical directory structure)-.05 F 2.686(instead. By)184 474 R(def)2.686
 E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186
 (ws the logical chain of directories when performing com-)-.25 F
-(mands which change the current directory)184 474 Q(.)-.65 E F1<ad54>144
-486 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(mands which change the current directory)184 486 Q(.)-.65 E F1<ad54>144
+498 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
 (DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89
 (are inherited by shell functions, command)3.39 F 1.932
-(substitutions, and commands e)184 498 R -.15(xe)-.15 G 1.932
+(substitutions, and commands e)184 510 R -.15(xe)-.15 G 1.932
 (cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E
-(UG)-.1 E F0(and)4.432 E F1(RETURN)184 510 Q F0
-(traps are normally not inherited in such cases.)2.5 E F1<adad>144 522 Q
-F0 .401(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401
+(UG)-.1 E F0(and)4.432 E F1(RETURN)184 522 Q F0
+(traps are normally not inherited in such cases.)2.5 E F1<adad>144 534 Q
+F0 .4(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401
 (his option, then the positional parameters are unset.)-2.901 F
-(Otherwise,)5.4 E(the positional parameters are set to the)184 534 Q F2
-(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G
+(Otherwise,)5.401 E(the positional parameters are set to the)184 546 Q
+F2(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G
 (ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E F0(.)A F1<ad>144
-546 Q F0 1.944(Signal the end of options, cause all remaining)34.3 F F2
-(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.445(ea)-4.444 G
-1.945(ssigned to the positional)-4.445 F 3.446(parameters. The)184 558 R
-F1<ad78>3.446 E F0(and)3.446 E F1<ad76>3.446 E F0 .945
-(options are turned of)3.446 F 3.445(f. If)-.25 F .945(there are no)
-3.445 F F2(ar)3.445 E(g)-.37 E F0 .945(s, the positional)B
-(parameters remain unchanged.)184 570 Q .425(The options are of)144
-586.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
+558 Q F0 1.945(Signal the end of options, cause all remaining)34.3 F F2
+(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.444(ea)-4.444 G
+1.944(ssigned to the positional)-4.444 F 3.445(parameters. The)184 570 R
+F1<ad78>3.445 E F0(and)3.445 E F1<ad76>3.445 E F0 .945
+(options are turned of)3.445 F 3.445(f. If)-.25 F .946(there are no)
+3.445 F F2(ar)3.446 E(g)-.37 E F0 .946(s, the positional)B
+(parameters remain unchanged.)184 582 Q .425(The options are of)144
+598.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
 (ault unless otherwise noted.)-.1 F .425
-(Using + rather than \255 causes these options)5.425 F .178
-(to be turned of)144 598.8 R 2.678(f. The)-.25 F .178
+(Using + rather than \255 causes these options)5.425 F .177
+(to be turned of)144 610.8 R 2.677(f. The)-.25 F .178
 (options can also be speci\214ed as ar)2.678 F .178(guments to an in)
--.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066
-(current set of options may be found in)144 610.8 R F1<24ad>2.566 E F0
+-.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066
+(current set of options may be found in)144 622.8 R F1<24ad>2.566 E F0
 5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066
-(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F
-(is encountered.)144 622.8 Q F1(shift)108 639.6 Q F0([)2.5 E F2(n)A F0
-(])A .429(The positional parameters from)144 651.6 R F2(n)2.929 E F0
-.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G
-.428(rameters represented by the num-).15 F(bers)144 663.6 Q F1($#)2.582
-E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082
-(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga)
--.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to)
-.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06
-(is 0, no parameters are changed.)144 675.6 R(If)5.06 E F2(n)2.92 E F0
+(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F
+(is encountered.)144 634.8 Q F1(shift)108 651.6 Q F0([)2.5 E F2(n)A F0
+(])A .428(The positional parameters from)144 663.6 R F2(n)2.928 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
+.429(rameters represented by the num-).15 F(bers)144 675.6 Q F1($#)2.583
+E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
+(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
+-.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
+.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
+(is 0, no parameters are changed.)144 687.6 R(If)5.06 E F2(n)2.92 E F0
 .06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F
 (If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56
-(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 687.6 R
-.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0
-.144(is greater than)2.884 F F1($#)2.644 E F0
-(or less than zero; otherwise 0.)144 699.6 Q(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(57)185.115 E 0 Cg EP
+(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 699.6 R
+.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
+.143(is greater than)2.883 F F1($#)2.643 E F0
+(or less than zero; otherwise 0.)144 711.6 Q(GNU Bash-3.2)72 768 Q
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(57)185.545 E 0 Cg EP
 %%Page: 58 58
 %%BeginPageSetup
 BP
@@ -6746,58 +6777,58 @@ E F0(...])2.5 E -.8(To)144 96 S .222(ggle the v).8 F .222(alues of v)
 5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1<ad70>2.722
 E F0 .721(option, a list of all settable options is displayed, with an \
 indication of whether or not each is set.)144 108 R(The)144 120 Q F1
-<ad70>2.828 E F0 .327(option causes output to be displayed in a form th\
-at may be reused as input.)2.828 F .327(Other options)5.327 F(ha)144 132
+<ad70>2.827 E F0 .327(option causes output to be displayed in a form th\
+at may be reused as input.)2.827 F .328(Other options)5.328 F(ha)144 132
 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad73>144
 144 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5 E F0(.)A F1<ad75>144
 156 Q F0(Disable \(unset\) each)24.74 E F2(optname)2.5 E F0(.)A F1<ad71>
 144 168 Q F0 .003(Suppresses normal output \(quiet mode\); the return s\
-tatus indicates whether the)24.74 F F2(optname)2.504 E F0(is)2.504 E
-.256(set or unset.)180 180 R .256(If multiple)5.256 F F2(optname)2.756 E
-F0(ar)2.756 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
-(ith)-2.756 E F1<ad71>2.756 E F0 2.755(,t)C .255
-(he return status is zero if)-2.755 F(all)180 192 Q F2(optnames)2.5 E F0
+tatus indicates whether the)24.74 F F2(optname)2.503 E F0(is)2.503 E
+.255(set or unset.)180 180 R .255(If multiple)5.255 F F2(optname)2.755 E
+F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
+(ith)-2.756 E F1<ad71>2.756 E F0 2.756(,t)C .256
+(he return status is zero if)-2.756 F(all)180 192 Q F2(optnames)2.5 E F0
 (are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 204 Q F0
 (Restricts the v)25.3 E(alues of)-.25 E F2(optname)2.5 E F0
 (to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5
-E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .127(If either)144 220.8 R F1
-<ad73>2.627 E F0(or)2.627 E F1<ad75>2.627 E F0 .127(is used with no)
+E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .128(If either)144 220.8 R F1
+<ad73>2.628 E F0(or)2.628 E F1<ad75>2.628 E F0 .127(is used with no)
 2.627 F F2(optname)2.627 E F0(ar)2.627 E .127
-(guments, the display is limited to those options which)-.18 F 1.024
-(are set or unset, respecti)144 232.8 R -.15(ve)-.25 G(ly).15 E 6.024
-(.U)-.65 G 1.024(nless otherwise noted, the)-6.024 F F1(shopt)3.523 E F0
-1.023(options are disabled \(unset\) by)3.523 F(def)144 244.8 Q(ault.)
+(guments, the display is limited to those options which)-.18 F 1.023
+(are set or unset, respecti)144 232.8 R -.15(ve)-.25 G(ly).15 E 6.023
+(.U)-.65 G 1.024(nless otherwise noted, the)-6.023 F F1(shopt)3.524 E F0
+1.024(options are disabled \(unset\) by)3.524 F(def)144 244.8 Q(ault.)
 -.1 E 1.544(The return status when listing options is zero if all)144
-261.6 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)
-4.045 F .696
+261.6 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)
+4.044 F .696
 (When setting or unsetting options, the return status is zero unless an)
-144 273.6 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695
+144 273.6 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696
 (alid shell)-.25 F(option.)144 285.6 Q(The list of)144 302.4 Q F1(shopt)
-2.5 E F0(options is:)2.5 E F1(cdable_v)144 320.4 Q(ars)-.1 E F0 .155
-(If set, an ar)184 332.4 R .155(gument to the)-.18 F F1(cd)2.655 E F0
--.2(bu)2.655 G .156
+2.5 E F0(options is:)2.5 E F1(cdable_v)144 320.4 Q(ars)-.1 E F0 .156
+(If set, an ar)184 332.4 R .156(gument to the)-.18 F F1(cd)2.656 E F0
+-.2(bu)2.656 G .155
 (iltin command that is not a directory is assumed to be the).2 F
 (name of a v)184 344.4 Q(ariable whose v)-.25 E
 (alue is the directory to change to.)-.25 E F1(cdspell)144 356.4 Q F0
 1.055
 (If set, minor errors in the spelling of a directory component in a)
-10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
-(corrected. The)184 368.4 R 1.487(errors check)3.987 F 1.487
-(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
--.4 G(nd)-3.988 E .552(one character too man)184 380.4 R 4.352 -.65
+10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
+(corrected. The)184 368.4 R 1.488(errors check)3.988 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.987(,a)
+-.4 G(nd)-3.987 E .552(one character too man)184 380.4 R 4.352 -.65
 (y. I)-.15 H 3.052(fac).65 G .552
 (orrection is found, the corrected \214le name is printed, and)-3.052 F
 (the command proceeds.)184 392.4 Q
 (This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
-.15 E F1(checkhash)144 404.4 Q F0 2.079(If set,)184 416.4 R F1(bash)
-4.579 E F0 2.079(checks that a command found in the hash table e)4.579 F
-2.08(xists before trying to)-.15 F -.15(exe)184 428.4 S(cute it.).15 E
+.15 E F1(checkhash)144 404.4 Q F0 2.08(If set,)184 416.4 R F1(bash)4.58
+E F0 2.079(checks that a command found in the hash table e)4.58 F 2.079
+(xists before trying to)-.15 F -.15(exe)184 428.4 S(cute it.).15 E
 (If a hashed command no longer e)5 E
 (xists, a normal path search is performed.)-.15 E F1(checkwinsize)144
-440.4 Q F0 .797(If set,)184 452.4 R F1(bash)3.297 E F0 .797
-(checks the windo)3.297 F 3.297(ws)-.25 G .796
-(ize after each command and, if necessary)-3.297 F 3.296(,u)-.65 G .796
-(pdates the)-3.296 F -.25(va)184 464.4 S(lues of).25 E/F3 9/Times-Bold@0
+440.4 Q F0 .796(If set,)184 452.4 R F1(bash)3.296 E F0 .796
+(checks the windo)3.296 F 3.296(ws)-.25 G .797
+(ize after each command and, if necessary)-3.296 F 3.297(,u)-.65 G .797
+(pdates the)-3.297 F -.25(va)184 464.4 S(lues of).25 E/F3 9/Times-Bold@0
 SF(LINES)2.5 E F0(and)2.25 E F3(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF(.)A
 F1(cmdhist)144 476.4 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
 (attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202
@@ -6807,51 +6838,51 @@ F1(cmdhist)144 476.4 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165
 (includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i)
 -.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F
-(xpansion.)-.15 E F1(execfail)144 512.4 Q F0 1.386
-(If set, a non-interacti)7.79 F 1.686 -.15(ve s)-.25 H 1.386
+(xpansion.)-.15 E F1(execfail)144 512.4 Q F0 1.387
+(If set, a non-interacti)7.79 F 1.687 -.15(ve s)-.25 H 1.386
 (hell will not e).15 F 1.386(xit if it cannot e)-.15 F -.15(xe)-.15 G
-1.387(cute the \214le speci\214ed as an).15 F(ar)184 524.4 Q
+1.386(cute the \214le speci\214ed as an).15 F(ar)184 524.4 Q
 (gument to the)-.18 E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E
 (An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15
 E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 536.4 Q
-F0 .717(If set, aliases are e)184 548.4 R .717(xpanded as described abo)
+F0 .716(If set, aliases are e)184 548.4 R .717(xpanded as described abo)
 -.15 F 1.017 -.15(ve u)-.15 H(nder).15 E F3(ALIASES)3.217 E F4(.)A F0
-.716(This option is enabled)5.217 F(by def)184 560.4 Q
+.717(This option is enabled)5.217 F(by def)184 560.4 Q
 (ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144
 572.4 Q(ug)-.2 E F0(If set, beha)184 584.4 Q
 (vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184
-596.4 Q F0(The)28.5 E F1<ad46>4.25 E F0 1.75(option to the)4.25 F F1
+596.4 Q F0(The)28.5 E F1<ad46>4.251 E F0 1.751(option to the)4.251 F F1
 (declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751
 (iltin displays the source \214le name and line).2 F
 (number corresponding to each function name supplied as an ar)220 608.4
 Q(gument.)-.18 E F1(2.)184 620.4 Q F0 1.667(If the command run by the)
 28.5 F F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167
 F 1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220
-632.4 Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 644.4 Q F0 .84
-(If the command run by the)28.5 F F1(DEB)3.34 E(UG)-.1 E F0 .841
-(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15
+632.4 Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 644.4 Q F0 .841
+(If the command run by the)28.5 F F1(DEB)3.341 E(UG)-.1 E F0 .841
+(trap returns a v)3.341 F .84(alue of 2, and the shell is)-.25 F -.15
 (exe)220 656.4 S .488
 (cuting in a subroutine \(a shell function or a shell script e).15 F
 -.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1
 (sour)220 668.4 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1
 -.18(re)2.5 G(tur).18 E(n)-.15 E F0(is simulated.)2.5 E F1 26(4. B)184
-680.4 R(ASH_ARGC)-.3 E F0(and)3.775 E F1 -.3(BA)3.775 G(SH_ARGV).3 E F0
-1.276(are updated as described in their descrip-)3.775 F(tions abo)220
+680.4 R(ASH_ARGC)-.3 E F0(and)3.776 E F1 -.3(BA)3.776 G(SH_ARGV).3 E F0
+1.275(are updated as described in their descrip-)3.776 F(tions abo)220
 692.4 Q -.15(ve)-.15 G(.).15 E F1(5.)184 704.4 Q F0 1.359
 (Function tracing is enabled:)28.5 F 1.359
 (command substitution, shell functions, and sub-)6.359 F(shells in)220
 716.4 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F2
 (command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0
 (and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(58)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(58)185.545 E 0 Cg EP
 %%Page: 59 59
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(6.)184 84 Q F0 .804
-(Error tracing is enabled:)28.5 F .805
-(command substitution, shell functions, and subshells)5.804 F(in)220 96
+-.35 E/F1 10/Times-Bold@0 SF(6.)184 84 Q F0 .805
+(Error tracing is enabled:)28.5 F .804
+(command substitution, shell functions, and subshells)5.805 F(in)220 96
 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F2 10
 /Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1
 (ERR)2.5 E(OR)-.3 E F0(trap.)2.5 E F1(extglob)144 108 Q F0 .4
@@ -6864,42 +6895,42 @@ E F0(")A F2(string)A F0 4.973("q)C 2.473(uoting is performed within)
 -4.973 F F1(${)4.973 E F2(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G
 (pansions).15 E(enclosed in double quotes.)184 156 Q
 (This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 168 Q F0
-1.425(If set, patterns which f)7.77 F 1.425
-(ail to match \214lenames during pathname e)-.1 F 1.424
+1.424(If set, patterns which f)7.77 F 1.425
+(ail to match \214lenames during pathname e)-.1 F 1.425
 (xpansion result in an)-.15 F -.15(ex)184 180 S(pansion error).15 E(.)
 -.55 E F1 -.25(fo)144 192 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
 .585(If set, the suf)184 204 R<8c78>-.25 E .585(es speci\214ed by the)
 -.15 F F1(FIGNORE)3.085 E F0 .585(shell v)3.085 F .585(ariable cause w)
 -.25 F .585(ords to be ignored)-.1 F .32(when performing w)184 216 R .32
 (ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32
-(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.329
-(pletions. See)184 228 R/F3 9/Times-Bold@0 SF .829(SHELL V)3.329 F
-(ARIABLES)-1.215 E F0(abo)3.079 E 1.129 -.15(ve f)-.15 H .83
-(or a description of).15 F F1(FIGNORE)3.33 E F0 5.83(.T)C .83
-(his option)-5.83 F(is enabled by def)184 240 Q(ault.)-.1 E F1
+(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.33
+(pletions. See)184 228 R/F3 9/Times-Bold@0 SF .83(SHELL V)3.33 F
+(ARIABLES)-1.215 E F0(abo)3.08 E 1.13 -.15(ve f)-.15 H .829
+(or a description of).15 F F1(FIGNORE)3.329 E F0 5.829(.T)C .829
+(his option)-5.829 F(is enabled by def)184 240 Q(ault.)-.1 E F1
 (gnu_errfmt)144 252 Q F0(If set, shell error messages are written in th\
 e standard GNU error message format.)184 264 Q F1(histappend)144 276 Q
-F0 .384
+F0 .383
 (If set, the history list is appended to the \214le named by the v)184
-288 R .383(alue of the)-.25 F F1(HISTFILE)2.883 E F0 -.25(va)2.883 G
+288 R .384(alue of the)-.25 F F1(HISTFILE)2.884 E F0 -.25(va)2.884 G
 (ri-).25 E(able when the shell e)184 300 Q(xits, rather than o)-.15 E
 -.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 312 Q(eedit)-.18
-E F0 .575(If set, and)184 324 R F1 -.18(re)3.075 G(adline).18 E F0 .575
-(is being used, a user is gi)3.075 F -.15(ve)-.25 G 3.075(nt).15 G .576
-(he opportunity to re-edit a f)-3.075 F .576(ailed his-)-.1 F
-(tory substitution.)184 336 Q F1(histv)144 348 Q(erify)-.1 E F0 .403
+E F0 .576(If set, and)184 324 R F1 -.18(re)3.076 G(adline).18 E F0 .575
+(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 G .575
+(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F
+(tory substitution.)184 336 Q F1(histv)144 348 Q(erify)-.1 E F0 .402
 (If set, and)184 360 R F1 -.18(re)2.903 G(adline).18 E F0 .403
 (is being used, the results of history substitution are not immediately)
-2.903 F .661(passed to the shell parser)184 372 R 5.661(.I)-.55 G .662
-(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
-G(adline).18 E F0(editing)3.162 E -.2(bu)184 384 S -.25(ff).2 G(er).25 E
+2.903 F .662(passed to the shell parser)184 372 R 5.662(.I)-.55 G .661
+(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161
+G(adline).18 E F0(editing)3.161 E -.2(bu)184 384 S -.25(ff).2 G(er).25 E
 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1
-(hostcomplete)144 396 Q F0 1.182(If set, and)184 408 R F1 -.18(re)3.682
-G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
-(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
-420 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
-(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
-F3(READLINE)3.881 E F0(abo)184 432 Q -.15(ve)-.15 G 2.5(\). This).15 F
+(hostcomplete)144 396 Q F0 1.181(If set, and)184 408 R F1 -.18(re)3.681
+G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182
+(will attempt to perform hostname completion)3.682 F 1.381(when a w)184
+420 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E
+F3(READLINE)3.88 E F0(abo)184 432 Q -.15(ve)-.15 G 2.5(\). This).15 F
 (is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 444 Q F0(If set,)
 184 456 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E F0
 (to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e)
@@ -6909,83 +6940,83 @@ F3(READLINE)3.881 E F0(abo)184 432 Q -.15(ve)-.15 G 2.5(\). This).15 F
 (ord and all remaining characters on)-.1 F .967
 (that line to be ignored in an interacti)184 492 R 1.267 -.15(ve s)-.25
 H .967(hell \(see).15 F F3(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
-G 3.467(\). This).15 F .968(option is)3.468 F(enabled by def)184 504 Q
-(ault.)-.1 E F1(lithist)144 516 Q F0 .655(If set, and the)15.55 F F1
-(cmdhist)3.155 E F0 .654(option is enabled, multi-line commands are sa)
-3.154 F -.15(ve)-.2 G 3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)
--3.154 F(with embedded ne)184 528 Q
+G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 504 Q
+(ault.)-.1 E F1(lithist)144 516 Q F0 .654(If set, and the)15.55 F F1
+(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa)
+3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)
+-3.155 F(with embedded ne)184 528 Q
 (wlines rather than using semicolon separators where possible.)-.25 E F1
 (login_shell)144 540 Q F0 .486
 (The shell sets this option if it is started as a login shell \(see)184
-552 R F3(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)2.737 E -.15(ve)
--.15 G 2.987(\). The).15 F -.25(va)184 564 S(lue may not be changed.).25
-E F1(mailwar)144 576 Q(n)-.15 E F0 .815(If set, and a \214le that)184
-588 R F1(bash)3.315 E F0 .814
-(is checking for mail has been accessed since the last time it)3.315 F
+552 R F3(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve)
+-.15 G 2.986(\). The).15 F -.25(va)184 564 S(lue may not be changed.).25
+E F1(mailwar)144 576 Q(n)-.15 E F0 .814(If set, and a \214le that)184
+588 R F1(bash)3.314 E F0 .815
+(is checking for mail has been accessed since the last time it)3.314 F
 -.1(wa)184 600 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
 (`The mail in)-.74 E F2(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i)
 -.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1(no_empty_cmd_completion)144 612
-Q F0 .145(If set, and)184 624 R F1 -.18(re)2.645 G(adline).18 E F0 .145
-(is being used,)2.645 F F1(bash)2.646 E F0 .146
-(will not attempt to search the)2.646 F F1 -.74(PA)2.646 G(TH)-.21 E F0
-.146(for possible)2.646 F
+Q F0 .146(If set, and)184 624 R F1 -.18(re)2.646 G(adline).18 E F0 .146
+(is being used,)2.646 F F1(bash)2.646 E F0 .145
+(will not attempt to search the)2.646 F F1 -.74(PA)2.645 G(TH)-.21 E F0
+.145(for possible)2.645 F
 (completions when completion is attempted on an empty line.)184 636 Q F1
-(nocaseglob)144 648 Q F0 .437(If set,)184 660 R F1(bash)2.937 E F0 .436
-(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25
-H .436(ashion when performing pathname).05 F -.15(ex)184 672 S
+(nocaseglob)144 648 Q F0 .436(If set,)184 660 R F1(bash)2.936 E F0 .436
+(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)-.25
+H .437(ashion when performing pathname).05 F -.15(ex)184 672 S
 (pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E
--.15(ve)-.15 G(\).).15 E F1(nocasematch)144 684 Q F0 1.193(If set,)184
-696 R F1(bash)3.693 E F0 1.194(matches patterns in a case\255insensiti)
-3.693 F 1.494 -.15(ve f)-.25 H 1.194(ashion when performing matching).05
+-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 684 Q F0 1.194(If set,)184
+696 R F1(bash)3.694 E F0 1.194(matches patterns in a case\255insensiti)
+3.694 F 1.493 -.15(ve f)-.25 H 1.193(ashion when performing matching).05
 F(while e)184 708 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5
 E F1([[)2.5 E F0(conditional commands.)2.5 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(59)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(59)185.545 E 0 Cg EP
 %%Page: 60 60
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(nullglob)144 84 Q F0 .855(If set,)184 96 R
-F1(bash)3.355 E F0(allo)3.355 E .855
-(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.354 G .854
-(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G 3.354(\)t).15 G(o)
--3.354 E -.15(ex)184 108 S(pand to a null string, rather than themselv)
-.15 E(es.)-.15 E F1(pr)144 120 Q(ogcomp)-.18 E F0 .676
+-.35 E/F1 10/Times-Bold@0 SF(nullglob)144 84 Q F0 .854(If set,)184 96 R
+F1(bash)3.354 E F0(allo)3.354 E .855
+(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.355 G .855
+(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G 3.355(\)t).15 G(o)
+-3.355 E -.15(ex)184 108 S(pand to a null string, rather than themselv)
+.15 E(es.)-.15 E F1(pr)144 120 Q(ogcomp)-.18 E F0 .677
 (If set, the programmable completion f)184 132 R .677(acilities \(see)
--.1 F F1(Pr)3.177 E .677(ogrammable Completion)-.18 F F0(abo)3.177 E
+-.1 F F1(Pr)3.176 E .676(ogrammable Completion)-.18 F F0(abo)3.176 E
 -.15(ve)-.15 G(\)).15 E(are enabled.)184 144 Q
 (This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 156 Q(omptv)
--.18 E(ars)-.1 E F0 1.448(If set, prompt strings under)184 168 R 1.448
-(go parameter e)-.18 F 1.447(xpansion, command substitution, arithmetic)
--.15 F -.15(ex)184 180 S .17(pansion, and quote remo).15 F -.25(va)-.15
+-.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 168 R 1.448
+(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic)
+-.15 F -.15(ex)184 180 S .171(pansion, and quote remo).15 F -.25(va)-.15
 G 2.67(la).25 G .17(fter being e)-2.67 F .17(xpanded as described in)
--.15 F/F2 9/Times-Bold@0 SF(PR)2.671 E(OMPTING)-.27 E F0(abo)2.421 E
--.15(ve)-.15 G(.).15 E(This option is enabled by def)184 192 Q(ault.)-.1
-F1 -.18(re)144 204 S(stricted_shell).18 E F0 1.069
+-.15 F/F2 9/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15
+(ve)-.15 G(.).15 E(This option is enabled by def)184 192 Q(ault.)-.1 E
+F1 -.18(re)144 204 S(stricted_shell).18 E F0 1.069
 (The shell sets this option if it is started in restricted mode \(see)
 184 216 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 228 Q 4.178
 (w\). The)-.25 F -.25(va)4.178 G 1.678(lue may not be changed.).25 F
 1.678(This is not reset when the startup \214les are)6.678 F -.15(exe)
 184 240 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E
 -.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E
-F1(shift_v)144 252 Q(erbose)-.1 E F0 .502(If set, the)184 264 R F1
-(shift)3.002 E F0 -.2(bu)3.002 G .501
-(iltin prints an error message when the shift count e).2 F .501
+F1(shift_v)144 252 Q(erbose)-.1 E F0 .501(If set, the)184 264 R F1
+(shift)3.001 E F0 -.2(bu)3.001 G .501
+(iltin prints an error message when the shift count e).2 F .502
 (xceeds the number)-.15 F(of positional parameters.)184 276 Q F1(sour)
-144 288 Q(cepath)-.18 E F0 .77(If set, the)184 300 R F1(sour)3.27 E(ce)
--.18 E F0(\()3.27 E F1(.)A F0 3.27(\)b)C .77(uiltin uses the v)-3.47 F
-.771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771
-(to \214nd the directory containing the)3.021 F
-(\214le supplied as an ar)184 312 Q 2.5(gument. This)-.18 F
-(option is enabled by def)2.5 E(ault.)-.1 E F1(xpg_echo)144 324 Q F0
-(If set, the)184 336 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E
-(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend)
-108 348 Q F0([)2.5 E F1<ad66>A F0(])A .493(Suspend the e)144 360 R -.15
-(xe)-.15 G .493(cution of this shell until it recei).15 F -.15(ve)-.25 G
-2.992(sa).15 G F2(SIGCONT)A F0 2.992(signal. The)2.742 F F1<ad66>2.992 E
-F0 .492(option says not to)2.992 F .758
+144 288 Q(cepath)-.18 E F0 .771(If set, the)184 300 R F1(sour)3.271 E
+(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
+-3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77
+(to \214nd the directory containing the)3.02 F(\214le supplied as an ar)
+184 312 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.)
+-.1 E F1(xpg_echo)144 324 Q F0(If set, the)184 336 Q F1(echo)2.5 E F0
+-.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15
+E(ault.)-.1 E F1(suspend)108 348 Q F0([)2.5 E F1<ad66>A F0(])A .492
+(Suspend the e)144 360 R -.15(xe)-.15 G .492
+(cution of this shell until it recei).15 F -.15(ve)-.25 G 2.992(sa).15 G
+F2(SIGCONT).001 E F0 2.993(signal. The)2.743 F F1<ad66>2.993 E F0 .493
+(option says not to)2.993 F .759
 (complain if this is a login shell; just suspend an)144 372 R(yw)-.15 E
-(ay)-.1 E 5.758(.T)-.65 G .759
+(ay)-.1 E 5.758(.T)-.65 G .758
 (he return status is 0 unless the shell is a)-5.758 F(login shell and)
 144 384 Q F1<ad66>2.5 E F0
 (is not supplied, or if job control is not enabled.)2.5 E F1(test)108
@@ -6993,15 +7024,15 @@ F0 .492(option says not to)2.992 F .758
 (ex)2.5 G(pr).2 E F1(])2.5 E F0 1.15
 (Return a status of 0 or 1 depending on the e)6.77 F -.25(va)-.25 G 1.15
 (luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)3.65 G
-(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.187
+(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.188
 (operator and operand must be a separate ar)144 420 R 3.688
-(gument. Expressions)-.18 F 1.188(are composed of the primaries)3.688 F
-1.89(described abo)144 432 R 2.19 -.15(ve u)-.15 H(nder).15 E F2
-(CONDITION)4.39 E 1.89(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
-F1(test)6.39 E F0 1.889(does not accept an)4.389 F 4.389(yo)-.15 G 1.889
-(ptions, nor)-4.389 F(does it accept and ignore an ar)144 444 Q
+(gument. Expressions)-.18 F 1.187(are composed of the primaries)3.688 F
+1.889(described abo)144 432 R 2.189 -.15(ve u)-.15 H(nder).15 E F2
+(CONDITION)4.389 E 1.889(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
+F1(test)6.389 E F0 1.89(does not accept an)4.389 F 4.39(yo)-.15 G 1.89
+(ptions, nor)-4.39 F(does it accept and ignore an ar)144 444 Q
 (gument of)-.18 E F1<adad>2.5 E F0(as signifying the end of options.)2.5
-E .785(Expressions may be combined using the follo)144 462 R .786
+E .786(Expressions may be combined using the follo)144 462 R .785
 (wing operators, listed in decreasing order of prece-)-.25 F(dence.)144
 474 Q F1(!)144 486 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G(ue if).35
 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\()144 498 Q F3
@@ -7024,44 +7055,45 @@ F0 -.25(eva)2.5 G(luate conditional e).25 E
 E 2.5(2a)144 640.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
 180 652.8 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
 F .37(xpression is true if and only if the second ar)-.15 F .37
-(gument is null.)-.18 F .38(If the \214rst ar)180 664.8 R .38
-(gument is one of the unary conditional operators listed abo)-.18 F .679
--.15(ve u)-.15 H(nder).15 E F2(CONDI-)2.879 E(TION)180 676.8 Q .552
+(gument is null.)-.18 F .379(If the \214rst ar)180 664.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .68
+-.15(ve u)-.15 H(nder).15 E F2(CONDI-)2.88 E(TION)180 676.8 Q .553
 (AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552
 (xpression is true if the unary test is true.)-.15 F .552
 (If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 688.8 Q
 (alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
 (xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 700.8 S -.18(rg)-2.5 G
-(uments).18 E .024(If the second ar)180 712.8 R .023
+(uments).18 E .023(If the second ar)180 712.8 R .023
 (gument is one of the binary conditional operators listed abo)-.18 F
-.323 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.523 E(DITION)180 724.8 Q
-1.477(AL EXPRESSIONS)-.18 F F4(,)A F0 1.477(the result of the e)3.727 F
+.324 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.524 E(DITION)180 724.8 Q
+1.478(AL EXPRESSIONS)-.18 F F4(,)A F0 1.477(the result of the e)3.727 F
 1.477(xpression is the result of the binary test)-.15 F(GNU Bash-3.2)72
-768 Q(2006 September 28)135.125 E(60)185.115 E 0 Cg EP
+768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(60)185.545 E 0 Cg
+EP
 %%Page: 61 61
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E .398(using the \214rst and third ar)180 84 R .398
-(guments as operands.)-.18 F .398(If the \214rst ar)5.398 F .397
-(gument is)-.18 F/F1 10/Times-Bold@0 SF(!)2.897 E F0 2.897(,t)C .397
-(he v)-2.897 F .397(alue is the)-.25 F(ne)180 96 Q -.05(ga)-.15 G .262
+-.35 E .397(using the \214rst and third ar)180 84 R .397
+(guments as operands.)-.18 F .398(If the \214rst ar)5.398 F .398
+(gument is)-.18 F/F1 10/Times-Bold@0 SF(!)2.898 E F0 2.898(,t)C .398
+(he v)-2.898 F .398(alue is the)-.25 F(ne)180 96 Q -.05(ga)-.15 G .263
 (tion of the tw).05 F(o-ar)-.1 E .262
 (gument test using the second and third ar)-.18 F 2.762(guments. If)-.18
-F .263(the \214rst ar)2.762 F(gu-)-.18 E .206(ment is e)180 108 R
-(xactly)-.15 E F1(\()2.706 E F0 .205(and the third ar)2.706 F .205
-(gument is e)-.18 F(xactly)-.15 E F1(\))2.705 E F0 2.705(,t)C .205
-(he result is the one-ar)-2.705 F .205(gument test of)-.18 F 1.17
-(the second ar)180 120 R 3.67(gument. Otherwise,)-.18 F 1.171(the e)
+F .262(the \214rst ar)2.762 F(gu-)-.18 E .205(ment is e)180 108 R
+(xactly)-.15 E F1(\()2.705 E F0 .205(and the third ar)2.705 F .205
+(gument is e)-.18 F(xactly)-.15 E F1(\))2.705 E F0 2.705(,t)C .206
+(he result is the one-ar)-2.705 F .206(gument test of)-.18 F 1.171
+(the second ar)180 120 R 3.671(gument. Otherwise,)-.18 F 1.171(the e)
 3.671 F 1.171(xpression is f)-.15 F 3.671(alse. The)-.1 F F1<ad61>3.671
-E F0(and)3.671 E F1<ad6f>3.671 E F0 1.171(operators are)3.671 F
+E F0(and)3.671 E F1<ad6f>3.67 E F0 1.17(operators are)3.67 F
 (considered binary operators in this case.)180 132 Q 2.5(4a)144 144 S
--.18(rg)-2.5 G(uments).18 E .385(If the \214rst ar)180 156 R .385
-(gument is)-.18 F F1(!)2.885 E F0 2.885(,t)C .385(he result is the ne)
--2.885 F -.05(ga)-.15 G .384(tion of the three-ar).05 F .384(gument e)
--.18 F .384(xpression com-)-.15 F 1.647(posed of the remaining ar)180
-168 R 4.147(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.648
+-.18(rg)-2.5 G(uments).18 E .384(If the \214rst ar)180 156 R .384
+(gument is)-.18 F F1(!)2.884 E F0 2.885(,t)C .385(he result is the ne)
+-2.885 F -.05(ga)-.15 G .385(tion of the three-ar).05 F .385(gument e)
+-.18 F .385(xpression com-)-.15 F 1.648(posed of the remaining ar)180
+168 R 4.147(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.647
 (xpression is parsed and e)-.15 F -.25(va)-.25 G(luated).25 E
 (according to precedence using the rules listed abo)180 180 Q -.15(ve)
 -.15 G(.).15 E 2.5(5o)144 192 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18
@@ -7072,52 +7104,53 @@ nt the accumulated user and system times for the shell and for processe\
 s run from the shell.)13.23 F(The return status is 0.)144 244.8 Q F1
 (trap)108 261.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E/F2 10
 /Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...])2.5 E
-.703(The command)144 273.6 R F2(ar)3.533 E(g)-.37 E F0 .703
-(is to be read and e)3.423 F -.15(xe)-.15 G .702
-(cuted when the shell recei).15 F -.15(ve)-.25 G 3.202(ss).15 G
-(ignal\(s\))-3.202 E F2(sigspec)3.202 E F0 5.702(.I).31 G(f)-5.702 E F2
-(ar)3.532 E(g)-.37 E F0(is)3.422 E .608(absent \(and there is a single)
+.702(The command)144 273.6 R F2(ar)3.532 E(g)-.37 E F0 .702
+(is to be read and e)3.422 F -.15(xe)-.15 G .702
+(cuted when the shell recei).15 F -.15(ve)-.25 G 3.203(ss).15 G
+(ignal\(s\))-3.203 E F2(sigspec)3.203 E F0 5.703(.I).31 G(f)-5.703 E F2
+(ar)3.533 E(g)-.37 E F0(is)3.423 E .609(absent \(and there is a single)
 144 285.6 R F2(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F1<ad>3.108 E
 F0 3.108(,e)C .608
 (ach speci\214ed signal is reset to its original disposition)-3.108 F
-.659(\(the v)144 297.6 R .659(alue it had upon entrance to the shell\).)
--.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .658
+.658(\(the v)144 297.6 R .658(alue it had upon entrance to the shell\).)
+-.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .659
 (is the null string the signal speci\214ed by each)3.378 F F2(sigspec)
-144.34 309.6 Q F0 .58(is ignored by the shell and by the commands it in)
-3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F2(ar)3.411 E(g)-.37 E
-F0 .581(is not present and)3.301 F F1<ad70>3.081 E F0(has)3.081 E 1.215
+144.34 309.6 Q F0 .581
+(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G
+-.1(ke).2 G 3.08(s. If).1 F F2(ar)3.41 E(g)-.37 E F0 .58
+(is not present and)3.3 F F1<ad70>3.08 E F0(has)3.08 E 1.214
 (been supplied, then the trap commands associated with each)144 321.6 R
-F2(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214
+F2(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215
 F(gu-)-.18 E .86(ments are supplied or if only)144 333.6 R F1<ad70>3.36
 E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
 (prints the list of commands associated with each)3.36 F 2.83
 (signal. The)144 345.6 R F1<ad6c>2.83 E F0 .33(option causes the shell \
-to print a list of signal names and their corresponding num-)2.83 F 4.31
-(bers. Each)144 357.6 R F2(sigspec)4.65 E F0 1.811
-(is either a signal name de\214ned in <)4.62 F F2(signal.h)A F0 1.811
-(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E .745
+to print a list of signal names and their corresponding num-)2.83 F
+4.311(bers. Each)144 357.6 R F2(sigspec)4.651 E F0 1.811
+(is either a signal name de\214ned in <)4.621 F F2(signal.h)A F0 1.81
+(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E .745
 (names are case insensiti)144 369.6 R 1.045 -.15(ve a)-.25 H .745
 (nd the SIG pre\214x is optional.).15 F .745(If a)5.745 F F2(sigspec)
 3.585 E F0(is)3.555 E/F3 9/Times-Bold@0 SF(EXIT)3.245 E F0 .745
-(\(0\) the command)2.995 F F2(ar)144.33 381.6 Q(g)-.37 E F0 1.629(is e)
-4.349 F -.15(xe)-.15 G 1.629(cuted on e).15 F 1.63(xit from the shell.)
+(\(0\) the command)2.995 F F2(ar)144.33 381.6 Q(g)-.37 E F0 1.63(is e)
+4.35 F -.15(xe)-.15 G 1.63(cuted on e).15 F 1.63(xit from the shell.)
 -.15 F 1.63(If a)6.63 F F2(sigspec)4.47 E F0(is)4.44 E F3(DEB)4.13 E(UG)
--.09 E/F4 9/Times-Roman@0 SF(,)A F0 1.63(the command)3.88 F F2(ar)4.46 E
-(g)-.37 E F0 1.63(is e)4.35 F -.15(xe)-.15 G(cuted).15 E 1.207(before e)
-144 393.6 R -.15(ve)-.25 G(ry).15 E F2 1.207(simple command)3.707 F F0
-(,)A F2(for)3.707 E F0(command,)3.706 E F2(case)3.706 E F0(command,)
-3.706 E F2(select)3.706 E F0 1.206(command, e)3.706 F -.15(ve)-.25 G
-1.206(ry arithmetic).15 F F2(for)144 405.6 Q F0 .412
-(command, and before the \214rst command e)2.912 F -.15(xe)-.15 G .412
-(cutes in a shell function \(see).15 F F3 .413(SHELL GRAMMAR)2.912 F F0
-(abo)144 417.6 Q -.15(ve)-.15 G 2.666(\). Refer).15 F .166
-(to the description of the)2.666 F F1(extdeb)2.666 E(ug)-.2 E F0 .166
+-.09 E/F4 9/Times-Roman@0 SF(,)A F0 1.629(the command)3.88 F F2(ar)4.459
+E(g)-.37 E F0 1.629(is e)4.349 F -.15(xe)-.15 G(cuted).15 E 1.206
+(before e)144 393.6 R -.15(ve)-.25 G(ry).15 E F2 1.206(simple command)
+3.706 F F0(,)A F2(for)3.706 E F0(command,)3.706 E F2(case)3.706 E F0
+(command,)3.706 E F2(select)3.707 E F0 1.207(command, e)3.707 F -.15(ve)
+-.25 G 1.207(ry arithmetic).15 F F2(for)144 405.6 Q F0 .412
+(command, and before the \214rst command e)2.913 F -.15(xe)-.15 G .412
+(cutes in a shell function \(see).15 F F3 .412(SHELL GRAMMAR)2.912 F F0
+(abo)144 417.6 Q -.15(ve)-.15 G 2.665(\). Refer).15 F .166
+(to the description of the)2.665 F F1(extdeb)2.666 E(ug)-.2 E F0 .166
 (option to the)2.666 F F1(shopt)2.666 E F0 -.2(bu)2.666 G .166
-(iltin for details of its ef).2 F(fect)-.25 E .508(on the)144 429.6 R F1
-(DEB)3.008 E(UG)-.1 E F0 3.008(trap. If)3.008 F(a)3.008 E F2(sigspec)
+(iltin for details of its ef).2 F(fect)-.25 E .509(on the)144 429.6 R F1
+(DEB)3.009 E(UG)-.1 E F0 3.009(trap. If)3.009 F(a)3.009 E F2(sigspec)
 3.348 E F0(is)3.318 E F3(ERR)3.008 E F4(,)A F0 .508(the command)2.758 F
-F2(ar)3.338 E(g)-.37 E F0 .509(is e)3.228 F -.15(xe)-.15 G .509
-(cuted whene).15 F -.15(ve)-.25 G 3.009(ras).15 G .509(imple com-)-3.009
+F2(ar)3.338 E(g)-.37 E F0 .508(is e)3.228 F -.15(xe)-.15 G .508
+(cuted whene).15 F -.15(ve)-.25 G 3.008(ras).15 G .508(imple com-)-3.008
 F 2.506(mand has a non\255zero e)144 441.6 R 2.506
 (xit status, subject to the follo)-.15 F 2.506(wing conditions.)-.25 F
 (The)7.506 E F3(ERR)5.006 E F0 2.506(trap is not)4.756 F -.15(exe)144
@@ -7127,67 +7160,68 @@ F 2.506(mand has a non\255zero e)144 441.6 R 2.506
 (ke)144 465.6 S(yw)-.05 E .936(ord, part of the test in an)-.1 F F2(if)
 3.446 E F0 .936(statement, part of a)5.396 F F1(&&)3.436 E F0(or)3.436 E
 /F5 10/Symbol SF<efef>3.436 E F0 .936(list, or if the command')3.436 F
-3.436(sr)-.55 G(eturn)-3.436 E -.25(va)144 477.6 S 1.094
+3.436(sr)-.55 G(eturn)-3.436 E -.25(va)144 477.6 S 1.095
 (lue is being in).25 F -.15(ve)-.4 G 1.094(rted via).15 F F1(!)3.594 E
 F0 6.094(.T)C 1.094(hese are the same conditions obe)-6.094 F 1.094
-(yed by the)-.15 F F1(err)3.594 E(exit)-.18 E F0 3.595(option. If)3.594
-F(a)3.595 E F2(sigspec)144.34 489.6 Q F0(is)3.349 E F3(RETURN)3.039 E F4
-(,)A F0 .539(the command)2.789 F F2(ar)3.368 E(g)-.37 E F0 .538(is e)
+(yed by the)-.15 F F1(err)3.594 E(exit)-.18 E F0 3.594(option. If)3.594
+F(a)3.594 E F2(sigspec)144.34 489.6 Q F0(is)3.348 E F3(RETURN)3.038 E F4
+(,)A F0 .538(the command)2.788 F F2(ar)3.368 E(g)-.37 E F0 .538(is e)
 3.258 F -.15(xe)-.15 G .538
 (cuted each time a shell function or a script e).15 F -.15(xe)-.15 G
-(cuted).15 E .505(with the)144 501.6 R F1(.)3.005 E F0(or)3.005 E F1
-(sour)3.005 E(ce)-.18 E F0 -.2(bu)3.005 G .505(iltins \214nishes e).2 F
--.15(xe)-.15 G 3.006(cuting. Signals).15 F .506
-(ignored upon entry to the shell cannot be)3.006 F .704
-(trapped or reset.)144 513.6 R -.35(Tr)5.704 G .704
+(cuted).15 E .506(with the)144 501.6 R F1(.)3.006 E F0(or)3.006 E F1
+(sour)3.006 E(ce)-.18 E F0 -.2(bu)3.006 G .506(iltins \214nishes e).2 F
+-.15(xe)-.15 G 3.006(cuting. Signals).15 F .505
+(ignored upon entry to the shell cannot be)3.006 F .703
+(trapped or reset.)144 513.6 R -.35(Tr)5.703 G .704
 (apped signals that are not being ignored are reset to their original v)
-.35 F .703(alues in a)-.25 F .224(child process when it is created.)144
+.35 F .704(alues in a)-.25 F .224(child process when it is created.)144
 525.6 R .224(The return status is f)5.224 F .224(alse if an)-.1 F(y)-.15
-E F2(sigspec)3.064 E F0 .224(is in)3.034 F -.25(va)-.4 G .225
-(lid; otherwise).25 F F1(trap)2.725 E F0(returns true.)144 537.6 Q F1
+E F2(sigspec)3.064 E F0 .224(is in)3.034 F -.25(va)-.4 G .224
+(lid; otherwise).25 F F1(trap)2.724 E F0(returns true.)144 537.6 Q F1
 (type)108 554.4 Q F0([)2.5 E F1(\255aftpP)A F0(])A F2(name)2.5 E F0([)
-2.5 E F2(name)A F0(...])2.5 E -.4(Wi)144 566.4 S .174
-(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F2(name)
-3.034 E F0 -.1(wo)2.854 G .173
-(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F
-F1<ad74>144 578.4 Q F0 .842(option is used,)3.342 F F1(type)3.342 E F0
+2.5 E F2(name)A F0(...])2.5 E -.4(Wi)144 566.4 S .173
+(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F2(name)
+3.033 E F0 -.1(wo)2.853 G .174
+(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F
+F1<ad74>144 578.4 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0
 .843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E
 F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0
-(,).24 E F2 -.2(bu)3.343 G(iltin).2 E F0 3.343(,o).24 G(r)-3.343 E F2
-(\214le)5.253 E F0(if)3.523 E F2(name)144.36 590.4 Q F0 .087
-(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087
-(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15
-(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2
-(name)2.946 E F0 .086(is not)2.766 F .118
+(,).24 E F2 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F2
+(\214le)5.252 E F0(if)3.522 E F2(name)144.36 590.4 Q F0 .086
+(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086
+(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15
+(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F2
+(name)2.947 E F0 .087(is not)2.767 F .119
 (found, then nothing is printed, and an e)144 602.4 R .118
-(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F
-F1<ad70>2.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855
+(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F
+F1<ad70>2.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0 .855
 (either returns the name of the disk \214le that w)144 614.4 R .855
 (ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0
-.855(were speci\214ed as a com-)3.535 F .64(mand name, or nothing if)144
-626.4 R/F6 10/Courier@0 SF .64(type -t name)3.14 F F0 -.1(wo)3.14 G .641
-(uld not return).1 F F2(\214le)3.141 E F0 5.641(.T).18 G(he)-5.641 E F1
-<ad50>3.141 E F0 .641(option forces a)3.141 F F3 -.666(PA)3.141 G(TH)
--.189 E F0 .113(search for each)144 638.4 R F2(name)2.613 E F0 2.613(,e)
-C -.15(ve)-2.863 G 2.613(ni).15 G(f)-2.613 E F6 .113(type -t name)2.613
-F F0 -.1(wo)2.613 G .113(uld not return).1 F F2(\214le)2.613 E F0 5.113
-(.I).18 G 2.613(fa)-5.113 G .112(command is hashed,)-.001 F F1<ad70>
-2.612 E F0(and)144 650.4 Q F1<ad50>2.944 E F0 .444(print the hashed v)
-2.944 F .444(alue, not necessarily the \214le that appears \214rst in)
--.25 F F3 -.666(PA)2.945 G(TH)-.189 E F4(.)A F0 .445(If the)4.945 F F1
-<ad61>2.945 E F0(option)2.945 E .265(is used,)144 662.4 R F1(type)2.765
-E F0 .265(prints all of the places that contain an e)2.765 F -.15(xe)
--.15 G .265(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18 G .265
-(his includes aliases)-5.265 F .426(and functions, if and only if the)
+.855(were speci\214ed as a com-)3.535 F .641(mand name, or nothing if)
+144 626.4 R/F6 10/Courier@0 SF .641(type -t name)3.141 F F0 -.1(wo)3.141
+G .641(uld not return).1 F F2(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E
+F1<ad50>3.14 E F0 .64(option forces a)3.14 F F3 -.666(PA)3.14 G(TH)-.189
+E F0 .112(search for each)144 638.4 R F2(name)2.612 E F0 2.612(,e)C -.15
+(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F6 .113(type -t name)2.613 F F0
+-.1(wo)2.613 G .113(uld not return).1 F F2(\214le)2.613 E F0 5.113(.I)
+.18 G 2.613(fac)-5.113 G .113(ommand is hashed,)-2.613 F F1<ad70>2.613 E
+F0(and)144 650.4 Q F1<ad50>2.945 E F0 .445(print the hashed v)2.945 F
+.444(alue, not necessarily the \214le that appears \214rst in)-.25 F F3
+-.666(PA)2.944 G(TH)-.189 E F4(.)A F0 .444(If the)4.944 F F1<ad61>2.944
+E F0(option)2.944 E .265(is used,)144 662.4 R F1(type)2.765 E F0 .265
+(prints all of the places that contain an e)2.765 F -.15(xe)-.15 G .265
+(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18 G .265
+(his includes aliases)-5.265 F .427(and functions, if and only if the)
 144 674.4 R F1<ad70>2.926 E F0 .426(option is not also used.)2.926 F
-.427(The table of hashed commands is not)5.426 F .549
-(consulted when using)144 686.4 R F1<ad61>3.049 E F0 5.549(.T)C(he)
--5.549 E F1<ad66>3.049 E F0 .548
-(option suppresses shell function lookup, as with the)3.049 F F1
-(command)3.048 E F0 -.2(bu)144 698.4 S(iltin.).2 E F1(type)5 E F0
+.426(The table of hashed commands is not)5.426 F .548
+(consulted when using)144 686.4 R F1<ad61>3.048 E F0 5.548(.T)C(he)
+-5.548 E F1<ad66>3.048 E F0 .549
+(option suppresses shell function lookup, as with the)3.048 F F1
+(command)3.049 E F0 -.2(bu)144 698.4 S(iltin.).2 E F1(type)5 E F0
 (returns true if an)2.5 E 2.5(yo)-.15 G 2.5(ft)-2.5 G(he ar)-2.5 E
 (guments are found, f)-.18 E(alse if none are found.)-.1 E(GNU Bash-3.2)
-72 768 Q(2006 September 28)135.125 E(61)185.115 E 0 Cg EP
+72 768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(61)185.545 E 0
+Cg EP
 %%Page: 62 62
 %%BeginPageSetup
 BP
@@ -7195,26 +7229,26 @@ BP
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
 -.35 E/F1 10/Times-Bold@0 SF(ulimit)108 84 Q F0([)2.5 E F1
 (\255SHacde\214lmnpqrstuvx)A F0([)2.5 E/F2 10/Times-Italic@0 SF(limit)A
-F0(]])A(Pro)144 96 Q .243(vides control o)-.15 F -.15(ve)-.15 G 2.743
-(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244
+F0(]])A(Pro)144 96 Q .244(vides control o)-.15 F -.15(ve)-.15 G 2.744
+(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244
 (ilable to the shell and to processes started by it, on systems).25 F
-.944(that allo)144 108 R 3.444(ws)-.25 G .944(uch control.)-3.444 F(The)
-5.944 E F1<ad48>3.444 E F0(and)3.444 E F1<ad53>3.444 E F0 .943
+.943(that allo)144 108 R 3.443(ws)-.25 G .943(uch control.)-3.443 F(The)
+5.943 E F1<ad48>3.443 E F0(and)3.443 E F1<ad53>3.444 E F0 .944
 (options specify that the hard or soft limit is set for the)3.444 F(gi)
-144 120 Q -.15(ve)-.25 G 2.737(nr).15 G 2.737(esource. A)-2.737 F .238(\
+144 120 Q -.15(ve)-.25 G 2.738(nr).15 G 2.738(esource. A)-2.738 F .238(\
 hard limit cannot be increased once it is set; a soft limit may be incr\
-eased up to)2.738 F .356(the v)144 132 R .356(alue of the hard limit.)
--.25 F .356(If neither)5.356 F F1<ad48>2.856 E F0(nor)2.856 E F1<ad53>
-2.856 E F0 .355(is speci\214ed, both the soft and hard limits are set.)
-2.855 F .402(The v)144 144 R .402(alue of)-.25 F F2(limit)2.992 E F0
+eased up to)2.738 F .355(the v)144 132 R .355(alue of the hard limit.)
+-.25 F .355(If neither)5.355 F F1<ad48>2.855 E F0(nor)2.855 E F1<ad53>
+2.855 E F0 .356(is speci\214ed, both the soft and hard limits are set.)
+2.856 F .402(The v)144 144 R .402(alue of)-.25 F F2(limit)2.992 E F0
 .402(can be a number in the unit speci\214ed for the resource or one of\
- the special v)3.582 F(al-)-.25 E(ues)144 156 Q F1(hard)3.019 E F0(,)A
-F1(soft)3.019 E F0 3.019(,o)C(r)-3.019 E F1(unlimited)3.019 E F0 3.018
+ the special v)3.582 F(al-)-.25 E(ues)144 156 Q F1(hard)3.018 E F0(,)A
+F1(soft)3.018 E F0 3.018(,o)C(r)-3.018 E F1(unlimited)3.018 E F0 3.018
 (,w)C .518
 (hich stand for the current hard limit, the current soft limit, and no)
--3.018 F .353(limit, respecti)144 168 R -.15(ve)-.25 G(ly).15 E 5.353
-(.I)-.65 G(f)-5.353 E F2(limit)2.943 E F0 .353
-(is omitted, the current v)3.533 F .354
+-3.018 F .354(limit, respecti)144 168 R -.15(ve)-.25 G(ly).15 E 5.354
+(.I)-.65 G(f)-5.354 E F2(limit)2.944 E F0 .354
+(is omitted, the current v)3.534 F .353
 (alue of the soft limit of the resource is printed,)-.25 F .37
 (unless the)144 180 R F1<ad48>2.87 E F0 .37(option is gi)2.87 F -.15(ve)
 -.25 G 2.87(n. When).15 F .37
@@ -7232,8 +7266,8 @@ E F1<ad69>144 264 Q F0(The maximum number of pending signals)27.52 E F1
 (ed into memory)-.1 E F1<ad6d>144 288 Q F0
 (The maximum resident set size)21.97 E F1<ad6e>144 300 Q F0 .791(The ma\
 ximum number of open \214le descriptors \(most systems do not allo)24.74
-F 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F(be set\))180
-312 Q F1<ad70>144 324 Q F0
+F 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F(be set\))180 312 Q
+F1<ad70>144 324 Q F0
 (The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1
 <ad71>144 336 Q F0(The maximum number of bytes in POSIX message queues)
 24.74 E F1<ad72>144 348 Q F0(The maximum real-time scheduling priority)
@@ -7247,14 +7281,14 @@ F 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F(be set\))180
 E F0 .343(is gi)3.523 F -.15(ve)-.25 G .343(n, it is the ne).15 F 2.843
 (wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F1<ad61>
 2.843 E F0 .343(option is display only\).)2.843 F .343(If no)5.343 F
-.175(option is gi)144 436.8 R -.15(ve)-.25 G .175(n, then).15 F F1<ad66>
-2.675 E F0 .175(is assumed.)2.675 F -1.11(Va)5.175 G .175
-(lues are in 1024-byte increments, e)1.11 F .176(xcept for)-.15 F F1
-<ad74>2.676 E F0 2.676(,w)C .176(hich is in)-2.676 F(seconds,)144 448.8
-Q F1<ad70>2.698 E F0 2.698(,w)C .198
-(hich is in units of 512-byte blocks, and)-2.698 F F1<ad6e>2.698 E F0
-(and)2.698 E F1<ad75>2.697 E F0 2.697(,w)C .197(hich are unscaled v)
--2.697 F 2.697(alues. The)-.25 F .404(return status is 0 unless an in)
+.176(option is gi)144 436.8 R -.15(ve)-.25 G .176(n, then).15 F F1<ad66>
+2.676 E F0 .175(is assumed.)2.676 F -1.11(Va)5.175 G .175
+(lues are in 1024-byte increments, e)1.11 F .175(xcept for)-.15 F F1
+<ad74>2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 448.8
+Q F1<ad70>2.697 E F0 2.697(,w)C .197
+(hich is in units of 512-byte blocks, and)-2.697 F F1<ad6e>2.698 E F0
+(and)2.698 E F1<ad75>2.698 E F0 2.698(,w)C .198(hich are unscaled v)
+-2.698 F 2.698(alues. The)-.25 F .404(return status is 0 unless an in)
 144 460.8 R -.25(va)-.4 G .404(lid option or ar).25 F .404
 (gument is supplied, or an error occurs while setting)-.18 F 2.5(an)144
 472.8 S .5 -.25(ew l)-2.5 H(imit.).25 E F1(umask)108 489.6 Q F0([)2.5 E
@@ -7264,15 +7298,15 @@ F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A
 (gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\
 therwise it is interpreted as a symbolic mode mask similar to that acce\
 pted by)144 513.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
-525.6 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+525.6 Q F2(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382
 (alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382
 (option causes the mask to be)2.882 F .547
 (printed in symbolic form; the def)144 537.6 R .547
 (ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G
 (he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2
-(mode)144.38 549.6 Q F0 .552
-(is omitted, the output is in a form that may be reused as input.)3.232
-F .551(The return status is 0 if the)5.551 F(mode w)144 561.6 Q
+(mode)144.38 549.6 Q F0 .551
+(is omitted, the output is in a form that may be reused as input.)3.231
+F .552(The return status is 0 if the)5.552 F(mode w)144 561.6 Q
 (as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E
 (gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F1
 (unalias)108 578.4 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C F2(name)-2.5 E F0
@@ -7282,30 +7316,30 @@ F1<ad61>4.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155
 F(remo)144 602.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
 (alue is true unless a supplied)-.25 E F2(name)2.86 E F0
 (is not a de\214ned alias.)2.68 E F1(unset)108 619.2 Q F0<5bad>2.5 E F1
-(fv)A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E -.15(Fo)144 631.2 S 3.107
-(re).15 G(ach)-3.107 E F2(name)3.107 E F0 3.107(,r).18 G(emo)-3.107 E
-.907 -.15(ve t)-.15 H .607(he corresponding v).15 F .607
-(ariable or function.)-.25 F .606(If no options are supplied, or the)
-5.607 F F1<ad76>144 643.2 Q F0 .304(option is gi)2.804 F -.15(ve)-.25 G
-.304(n, each).15 F F2(name)3.164 E F0 .305(refers to a shell v)2.985 F
-2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .305
-(riables may not be unset.).25 F(If)5.305 E F1<ad66>144 655.2 Q F0 .46
-(is speci\214ed, each)2.96 F F2(name)3.32 E F0 .459
-(refers to a shell function, and the function de\214nition is remo)3.14
-F -.15(ve)-.15 G 2.959(d. Each).15 F .902(unset v)144 667.2 R .902
+(fv)A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E -.15(Fo)144 631.2 S 3.106
+(re).15 G(ach)-3.106 E F2(name)3.106 E F0 3.106(,r).18 G(emo)-3.106 E
+.906 -.15(ve t)-.15 H .606(he corresponding v).15 F .607
+(ariable or function.)-.25 F .607(If no options are supplied, or the)
+5.607 F F1<ad76>144 643.2 Q F0 .305(option is gi)2.805 F -.15(ve)-.25 G
+.305(n, each).15 F F2(name)3.165 E F0 .305(refers to a shell v)2.985 F
+2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .304
+(riables may not be unset.).25 F(If)5.304 E F1<ad66>144 655.2 Q F0 .459
+(is speci\214ed, each)2.959 F F2(name)3.319 E F0 .459
+(refers to a shell function, and the function de\214nition is remo)3.139
+F -.15(ve)-.15 G 2.96(d. Each).15 F .903(unset v)144 667.2 R .903
 (ariable or function is remo)-.25 F -.15(ve)-.15 G 3.402(df).15 G .902
-(rom the en)-3.402 F .903(vironment passed to subsequent commands.)-.4 F
-(If)5.903 E(an)144 679.2 Q 4.285(yo)-.15 G(f)-4.285 E/F3 9/Times-Bold@0
-SF(RANDOM)4.285 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
+(rom the en)-3.402 F .902(vironment passed to subsequent commands.)-.4 F
+(If)5.902 E(an)144 679.2 Q 4.284(yo)-.15 G(f)-4.284 E/F3 9/Times-Bold@0
+SF(RANDOM)4.284 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
 (LINENO)4.035 E F4(,)A F3(HISTCMD)4.035 E F4(,)A F3(FUNCN)4.035 E(AME)
 -.18 E F4(,)A F3(GR)4.035 E(OUPS)-.27 E F4(,)A F0(or)4.035 E F3(DIRST)
-4.284 E -.495(AC)-.81 G(K).495 E F0(are)4.034 E .328(unset, the)144
-691.2 R 2.828(yl)-.15 G .328(ose their special properties, e)-2.828 F
+4.285 E -.495(AC)-.81 G(K).495 E F0(are)4.035 E .329(unset, the)144
+691.2 R 2.829(yl)-.15 G .328(ose their special properties, e)-2.829 F
 -.15(ve)-.25 G 2.828(ni).15 G 2.828(ft)-2.828 G(he)-2.828 E 2.828(ya)
--.15 G .328(re subsequently reset.)-2.828 F .328(The e)5.328 F .329
+-.15 G .328(re subsequently reset.)-2.828 F .328(The e)5.328 F .328
 (xit status is true)-.15 F(unless a)144 703.2 Q F2(name)2.86 E F0
-(is readonly)2.68 E(.)-.65 E(GNU Bash-3.2)72 768 Q(2006 September 28)
-135.125 E(62)185.115 E 0 Cg EP
+(is readonly)2.68 E(.)-.65 E(GNU Bash-3.2)72 768 Q(2006 No)135.555 E
+-.15(ve)-.15 G(mber 27).15 E(62)185.545 E 0 Cg EP
 %%Page: 63 63
 %%BeginPageSetup
 BP
@@ -7314,25 +7348,25 @@ BP
 -.35 E/F1 10/Times-Bold@0 SF(wait)108 84 Q F0([)2.5 E/F2 10
 /Times-Italic@0 SF 2.5(n.)C(..)-2.5 E F0(])A -.8(Wa)144 96 S .288
 (it for each speci\214ed process and return its termination status.).8 F
-(Each)5.288 E F2(n)3.148 E F0 .287(may be a process ID or a)3.028 F .722
+(Each)5.288 E F2(n)3.148 E F0 .288(may be a process ID or a)3.028 F .722
 (job speci\214cation; if a job spec is gi)144 108 R -.15(ve)-.25 G .722
 (n, all processes in that job').15 F 3.222(sp)-.55 G .722(ipeline are w)
--3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E F2(n)3.583 E F0
-(is)3.463 E 1.266(not gi)144 120 R -.15(ve)-.25 G 1.266
-(n, all currently acti).15 F 1.566 -.15(ve c)-.25 H 1.265
-(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.265
-(nd the return status is zero.)-3.765 F(If)6.265 E F2(n)4.125 E F0 .456
+-3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E F2(n)3.582 E F0
+(is)3.462 E 1.265(not gi)144 120 R -.15(ve)-.25 G 1.265
+(n, all currently acti).15 F 1.565 -.15(ve c)-.25 H 1.265
+(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.266
+(nd the return status is zero.)-3.765 F(If)6.266 E F2(n)4.126 E F0 .457
 (speci\214es a non-e)144 132 R .457
 (xistent process or job, the return status is 127.)-.15 F .457
 (Otherwise, the return status is the)5.457 F -.15(ex)144 144 S
 (it status of the last process or job w).15 E(aited for)-.1 E(.)-.55 E
 /F3 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 160.8 Q F0(If)108 172.8 Q
-F1(bash)4.397 E F0 1.897(is started with the name)4.397 F F1(rbash)4.397
-E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F1<ad72>4.397 E F0 1.896
-(option is supplied at in)4.397 F -.2(vo)-.4 G 1.896
-(cation, the shell becomes).2 F 3.445(restricted. A)108 184.8 R .945
-(restricted shell is used to set up an en)3.445 F .946
-(vironment more controlled than the standard shell.)-.4 F(It)5.946 E
+F1(bash)4.396 E F0 1.896(is started with the name)4.396 F F1(rbash)4.397
+E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F1<ad72>4.397 E F0 1.897
+(option is supplied at in)4.397 F -.2(vo)-.4 G 1.897
+(cation, the shell becomes).2 F 3.446(restricted. A)108 184.8 R .945
+(restricted shell is used to set up an en)3.446 F .945
+(vironment more controlled than the standard shell.)-.4 F(It)5.945 E
 (beha)108 196.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F1
 (bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E
 (wing are disallo)-.25 E(wed or not performed:)-.25 E 32.5<8363>108
@@ -7346,7 +7380,7 @@ E F1 -.3(BA)2.5 G(SH_ENV).3 E F0 32.5<8373>108 247.2 S
 (iltin command).2 E 32.5<8353>108 280.8 S .351
 (pecifying a \214lename containing a slash as an ar)-32.5 F .351
 (gument to the)-.18 F F1<ad70>2.851 E F0 .351(option to the)2.851 F F1
-(hash)2.851 E F0 -.2(bu)2.851 G .351(iltin com-).2 F(mand)144 292.8 Q
+(hash)2.852 E F0 -.2(bu)2.852 G .352(iltin com-).2 F(mand)144 292.8 Q
 32.5<8369>108 309.6 S(mporting function de\214nitions from the shell en)
 -32.5 E(vironment at startup)-.4 E 32.5<8370>108 326.4 S(arsing the v)
 -32.5 E(alue of)-.25 E F1(SHELLOPTS)2.5 E F0(from the shell en)2.5 E
@@ -7366,8 +7400,8 @@ S(urning of)-32.5 E 2.5(fr)-.25 G(estricted mode with)-2.5 E F1(set +r)
 (These restrictions are enforced after an)108 444 Q 2.5(ys)-.15 G
 (tartup \214les are read.)-2.5 E 1.566
 (When a command that is found to be a shell script is e)108 460.8 R -.15
-(xe)-.15 G 1.567(cuted \(see).15 F/F4 9/Times-Bold@0 SF 1.567
-(COMMAND EXECUTION)4.067 F F0(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1
+(xe)-.15 G 1.566(cuted \(see).15 F/F4 9/Times-Bold@0 SF 1.566
+(COMMAND EXECUTION)4.066 F F0(abo)3.816 E -.15(ve)-.15 G(\),).15 E F1
 (rbash)108 472.8 Q F0(turns of)2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H
 (estrictions in the shell spa).15 E(wned to e)-.15 E -.15(xe)-.15 G
 (cute the script.).15 E F3(SEE ALSO)72 489.6 Q F2(Bash Refer)108 501.6 Q
@@ -7391,7 +7425,7 @@ Q(o\214le)-.45 E F0(The personal initialization \214le, e)144 662.4 Q
 (gout)-.1 E F0(The indi)144 710.4 Q
 (vidual login shell cleanup \214le, e)-.25 E -.15(xe)-.15 G
 (cuted when a login shell e).15 E(xits)-.15 E(GNU Bash-3.2)72 768 Q
-(2006 September 28)135.125 E(63)185.115 E 0 Cg EP
+(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(63)185.545 E 0 Cg EP
 %%Page: 64 64
 %%BeginPageSetup
 BP
@@ -7404,21 +7438,21 @@ S(THORS).548 E F0(Brian F)108 124.8 Q(ox, Free Softw)-.15 E(are F)-.1 E
 (oundation)-.15 E(bfox@gnu.or)108 136.8 Q(g)-.18 E(Chet Rame)108 153.6 Q
 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)
 -2.5 E -.15(ve)-.25 G(rsity).15 E(chet@po.cwru.edu)108 165.6 Q F2 -.11
-(BU)72 182.4 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .568
+(BU)72 182.4 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .567
 (If you \214nd a b)108 194.4 R .568(ug in)-.2 F/F3 10/Times-Bold@0 SF
 (bash,)3.068 E F0 .568(you should report it.)3.068 F .568
 (But \214rst, you should mak)5.568 F 3.068(es)-.1 G .568
-(ure that it really is a b)-3.068 F .567(ug, and)-.2 F 5.625
+(ure that it really is a b)-3.068 F .568(ug, and)-.2 F 5.626
 (that it appears in the latest v)108 206.4 R 5.625(ersion of)-.15 F F3
-(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626
-(ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626
+(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.625
+(ersion is al)-.15 F -.1(wa)-.1 G 5.625(ys a).1 F -.25(va)-.2 G 5.625
 (ilable from).25 F F1(ftp://ftp.gnu.or)108 218.4 Q(g/pub/bash/)-.37 E F0
-(.)A .411(Once you ha)108 235.2 R .711 -.15(ve d)-.2 H .411
-(etermined that a b).15 F .411(ug actually e)-.2 F .411(xists, use the)
--.15 F F1(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41
-(ug report.)-.2 F(If)5.41 E .594(you ha)108 247.2 R .894 -.15(ve a \214)
--.2 H .595(x, you are encouraged to mail that as well!).15 F .595
-(Suggestions and `philosophical' b)5.595 F .595(ug reports may)-.2 F
+(.)A .41(Once you ha)108 235.2 R .71 -.15(ve d)-.2 H .41
+(etermined that a b).15 F .41(ug actually e)-.2 F .411(xists, use the)
+-.15 F F1(bashb)3.181 E(ug)-.2 E F0 .411(command to submit a b)3.131 F
+.411(ug report.)-.2 F(If)5.411 E .595(you ha)108 247.2 R .895 -.15
+(ve a \214)-.2 H .595(x, you are encouraged to mail that as well!).15 F
+.594(Suggestions and `philosophical' b)5.595 F .594(ug reports may)-.2 F
 (be mailed to)108 259.2 Q F1 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0
 (or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3(gnu.bash.b)2.5 E(ug)
 -.2 E F0(.)A(ALL b)108 276 Q(ug reports should include:)-.2 E(The v)108
@@ -7432,31 +7466,32 @@ S(THORS).548 E F0(Brian F)108 124.8 Q(ox, Free Softw)-.15 E(are F)-.1 E
 374.4 Q(ug reports concerning this manual page should be directed to)-.2
 E F1 -.15(ch)2.5 G(et@po.cwru.edu).15 E F0(.).25 E F2 -.11(BU)72 391.2 S
 (GS).11 E F0(It')108 403.2 Q 2.5(st)-.55 G(oo big and too slo)-2.5 E
--.65(w.)-.25 G 1.869(There are some subtle dif)108 420 R 1.869
+-.65(w.)-.25 G 1.868(There are some subtle dif)108 420 R 1.868
 (ferences between)-.25 F F3(bash)4.369 E F0 1.869(and traditional v)
-4.369 F 1.869(ersions of)-.15 F F3(sh)4.368 E F0 4.368(,m)C 1.868
-(ostly because of the)-4.368 F/F4 9/Times-Bold@0 SF(POSIX)108 432 Q F0
+4.369 F 1.869(ersions of)-.15 F F3(sh)4.369 E F0 4.369(,m)C 1.869
+(ostly because of the)-4.369 F/F4 9/Times-Bold@0 SF(POSIX)108 432 Q F0
 (speci\214cation.)2.25 E(Aliases are confusing in some uses.)108 448.8 Q
 (Shell b)108 465.6 Q
 (uiltin commands and functions are not stoppable/restartable.)-.2 E
 1.315(Compound commands and command sequences of the form `a ; b ; c' a\
-re not handled gracefully when)108 482.4 R .39
+re not handled gracefully when)108 482.4 R .389
 (process suspension is attempted.)108 494.4 R .389
-(When a process is stopped, the shell immediately e)5.39 F -.15(xe)-.15
-G .389(cutes the ne).15 F .389(xt com-)-.15 F .192
-(mand in the sequence.)108 506.4 R .192(It suf)5.192 F .192(\214ces to \
-place the sequence of commands between parentheses to force it into a)
--.25 F(subshell, which may be stopped as a unit.)108 518.4 Q .956
-(Commands inside of)108 535.2 R F3($\()3.456 E F0(...)A F3(\))A F0 .956
+(When a process is stopped, the shell immediately e)5.389 F -.15(xe)-.15
+G .39(cutes the ne).15 F .39(xt com-)-.15 F .193(mand in the sequence.)
+108 506.4 R .192(It suf)5.193 F .192(\214ces to place the sequence of c\
+ommands between parentheses to force it into a)-.25 F
+(subshell, which may be stopped as a unit.)108 518.4 Q .955
+(Commands inside of)108 535.2 R F3($\()3.455 E F0(...)A F3(\))A F0 .956
 (command substitution are not parsed until substitution is attempted.)
-3.456 F .955(This will)5.955 F .567
+3.455 F .956(This will)5.956 F .567
 (delay error reporting until some time after the command is entered.)108
-547.2 R -.15(Fo)5.567 G 3.067(re).15 G .568
+547.2 R -.15(Fo)5.567 G 3.067(re).15 G .567
 (xample, unmatched parentheses,)-3.217 F -2.15 -.25(ev e)108 559.2 T 2.5
 (ni).25 G(nside shell comments, will result in error messages while the\
  construct is being read.)-2.5 E(Array v)108 576 Q
 (ariables may not \(yet\) be e)-.25 E(xported.)-.15 E(GNU Bash-3.2)72
-768 Q(2006 September 28)135.125 E(64)185.115 E 0 Cg EP
+768 Q(2006 No)135.555 E -.15(ve)-.15 G(mber 27).15 E(64)185.545 E 0 Cg
+EP
 %%Trailer
 end
 %%EOF
index b04fbcf3e6db7b3b92f056ccc73c895ba39d898b..4f1ab956dd11a4e041b8fc341baa6d04592511f2 100644 (file)
 @xrdef{Process Substitution-pg}{22}
 @xrdef{Process Substitution-snt}{Section@tie 3.5.6}
 @xrdef{Word Splitting-title}{Word Splitting}
-@xrdef{Word Splitting-pg}{22}
+@xrdef{Word Splitting-pg}{23}
 @xrdef{Word Splitting-snt}{Section@tie 3.5.7}
 @xrdef{Filename Expansion-title}{Filename Expansion}
 @xrdef{Filename Expansion-pg}{23}
 @xrdef{Filename Expansion-snt}{Section@tie 3.5.8}
 @xrdef{Pattern Matching-title}{Pattern Matching}
-@xrdef{Pattern Matching-pg}{23}
+@xrdef{Pattern Matching-pg}{24}
 @xrdef{Pattern Matching-snt}{Section@tie 3.5.8.1}
 @xrdef{Quote Removal-title}{Quote Removal}
 @xrdef{Quote Removal-pg}{25}
 @xrdef{Command Search and Execution-pg}{29}
 @xrdef{Command Search and Execution-snt}{Section@tie 3.7.2}
 @xrdef{Command Execution Environment-title}{Command Execution Environment}
-@xrdef{Command Execution Environment-pg}{29}
+@xrdef{Command Execution Environment-pg}{30}
 @xrdef{Command Execution Environment-snt}{Section@tie 3.7.3}
 @xrdef{Environment-title}{Environment}
-@xrdef{Environment-pg}{30}
+@xrdef{Environment-pg}{31}
 @xrdef{Environment-snt}{Section@tie 3.7.4}
 @xrdef{Exit Status-title}{Exit Status}
 @xrdef{Exit Status-pg}{31}
index 83484e2f109bfb15f031863657913e214bd7eba4..bd34933b6ac7b7376153ba789fed625f624dd9b7 100644 (file)
 \entry{expansion, arithmetic}{22}{expansion, arithmetic}
 \entry{arithmetic expansion}{22}{arithmetic expansion}
 \entry{process substitution}{22}{process substitution}
-\entry{word splitting}{22}{word splitting}
+\entry{word splitting}{23}{word splitting}
 \entry{expansion, filename}{23}{expansion, filename}
 \entry{expansion, pathname}{23}{expansion, pathname}
 \entry{filename expansion}{23}{filename expansion}
 \entry{pathname expansion}{23}{pathname expansion}
-\entry{pattern matching}{23}{pattern matching}
-\entry{matching, pattern}{23}{matching, pattern}
+\entry{pattern matching}{24}{pattern matching}
+\entry{matching, pattern}{24}{matching, pattern}
 \entry{redirection}{25}{redirection}
 \entry{command expansion}{28}{command expansion}
 \entry{command execution}{29}{command execution}
 \entry{command search}{29}{command search}
-\entry{execution environment}{29}{execution environment}
-\entry{environment}{30}{environment}
+\entry{execution environment}{30}{execution environment}
+\entry{environment}{31}{environment}
 \entry{exit status}{31}{exit status}
 \entry{signal handling}{31}{signal handling}
 \entry{shell script}{32}{shell script}
index 1a1e0a971f54b99a46d8848a4d49472e69f3f336..b3546d261af497bba835d6d01d70c3d5a74f6920 100644 (file)
 \entry {directory stack}{77}
 \initial {E}
 \entry {editing command lines}{89}
-\entry {environment}{30}
+\entry {environment}{31}
 \entry {evaluation, arithmetic}{74}
 \entry {event designators}{117}
-\entry {execution environment}{29}
+\entry {execution environment}{30}
 \entry {exit status}{3, 31}
 \entry {expansion}{17}
 \entry {expansion, arithmetic}{22}
@@ -79,7 +79,7 @@
 \entry {localization}{7}
 \entry {login shell}{69}
 \initial {M}
-\entry {matching, pattern}{23}
+\entry {matching, pattern}{24}
 \entry {metacharacter}{3}
 \initial {N}
 \entry {name}{3}
@@ -93,7 +93,7 @@
 \entry {parameters, positional}{15}
 \entry {parameters, special}{16}
 \entry {pathname expansion}{23}
-\entry {pattern matching}{23}
+\entry {pattern matching}{24}
 \entry {pipeline}{8}
 \entry {POSIX}{3}
 \entry {POSIX Mode}{80}
 \entry {variables, readline}{93}
 \initial {W}
 \entry {word}{4}
-\entry {word splitting}{22}
+\entry {word splitting}{23}
 \initial {Y}
 \entry {yanking text}{91}
index 0b147f83cee5345390db62aa96018cb28b131621..d32d3cb4d0e2f8b71bd47ad877654ad1e0892c3e 100644 (file)
Binary files a/doc/bashref.dvi and b/doc/bashref.dvi differ
index a75477708a0f941a73c6dec493dedec449ff8929..8dd91bbe39a459154382c0a607bf64adb56f57a2 100644 (file)
@@ -1,6 +1,6 @@
 <HTML>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on September, 28  2006 by texi2html 1.64 -->
+<!-- Created on December, 12  2006 by texi2html 1.64 -->
 <!-- 
 Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
             Karl Berry  <karl@freefriends.org>
@@ -33,10 +33,10 @@ Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 <H1>Bash Reference Manual</H1></P><P>
 
 This text is a brief description of the features that are present in
-the Bash shell (version 3.2, 28 September 2006).
+the Bash shell (version 3.2, 27 November 2006).
 </P><P>
 
-This is Edition 3.2, last updated 28 September 2006,
+This is Edition 3.2, last updated 27 November 2006,
 of <CITE>The GNU Bash Reference Manual</CITE>,
 for <CODE>Bash</CODE>, Version 3.2.
 </P><P>
@@ -176,7 +176,7 @@ 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 GNU utilities.  The programming
-language features allow these utilitites to be combined.
+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 <TT>`/bin'</TT>, allowing users
@@ -334,7 +334,7 @@ group ID.
 
 <DT><CODE>process group ID</CODE>
 <DD><A NAME="IDX14"></A>
-A unique identifer that represents a <CODE>process group</CODE>
+A unique identifier that represents a <CODE>process group</CODE>
 during its lifetime.
 <P>
 
@@ -1236,7 +1236,7 @@ The list of words following <CODE>in</CODE> 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</VAR>'</SAMP> is omitted, the positional parameters are printed,
-as if <SAMP>`in "$@"'</SAMP> had been specifed.
+as if <SAMP>`in "$@"'</SAMP> had been specified.
 The <CODE>PS3</CODE> 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
@@ -1865,7 +1865,7 @@ This mechanism is similar to
 <VAR>filename expansion</VAR> (see section <A HREF="bashref.html#SEC35">3.5.8 Filename Expansion</A>),
 but the file names generated need not exist.
 Patterns to be brace expanded take the form of an optional <VAR>preamble</VAR>,
-followed by either a series of comma-separated strings or a sequnce expression
+followed by either a series of comma-separated strings or a seqeunce expression
 between a pair of braces,
 followed by an optional <VAR>postscript</VAR>.
 The preamble is prefixed to each string contained within the braces, and
@@ -2139,13 +2139,17 @@ index of the specified array.
 Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the <SAMP>`:-'</SAMP> expansion.
 Substring indexing is zero-based unless the positional parameters
-are used, in which case the indexing starts at 1.
+are used, in which case the indexing starts at 1 by default.
+If <VAR>offset</VAR> is 0, and the positional parameters are used, <CODE>$@</CODE> is
+prefixed to the list.
 </P><P>
 
 <DT><CODE>${!<VAR>prefix</VAR>*}</CODE>
 <DD><DT><CODE>${!<VAR>prefix</VAR>@}</CODE>
 <DD>Expands to the names of variables whose names begin with <VAR>prefix</VAR>,
 separated by the first character of the <CODE>IFS</CODE> special variable.
+When <SAMP>`@'</SAMP> is used and the expansion appears within double quotes, each
+variable name expands to a separate word.
 <P>
 
 <DT><CODE>${!<VAR>name</VAR>[@]}</CODE>
@@ -3713,7 +3717,7 @@ zero.
 </pre></td></tr></table>If <VAR>command</VAR>
 is supplied, it replaces the shell without creating a new process.
 If the <SAMP>`-l'</SAMP> option is supplied, the shell places a dash at the
-beginning of the zeroth arg passed to <VAR>command</VAR>.
+beginning of the zeroth argument passed to <VAR>command</VAR>.
 This is what the <CODE>login</CODE> program does.
 The <SAMP>`-c'</SAMP> option causes <VAR>command</VAR> to be executed with an empty
 environment.
@@ -4133,7 +4137,7 @@ 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 (see section <A HREF="bashref.html#SEC99">8.3 Readline Init File</A>),
+Readline initialization file (see section <A HREF="bashref.html#SEC99">8.3 Readline Init File</A>),
 but each binding or command must be passed as a separate argument;  e.g.,
 <SAMP>`"\C-x\C-r":re-read-init-file'</SAMP>.
 Options, if supplied, have the following meanings:
@@ -4328,7 +4332,10 @@ the environment.
 </DL>
 <P>
 
-Using <SAMP>`+'</SAMP> instead of <SAMP>`-'</SAMP> turns off the attribute instead.
+Using <SAMP>`+'</SAMP> instead of <SAMP>`-'</SAMP> turns off the attribute instead,
+with the exceptions that <SAMP>`+a'</SAMP>
+may not be used to destroy an array variable and <SAMP>`+r'</SAMP> will not
+remove the readonly attribute.
 When used in a function, <CODE>declare</CODE> makes each <VAR>name</VAR> local,
 as with the <CODE>local</CODE> command.  If a variable name is followed by
 =<VAR>value</VAR>, the value of the variable is set to <VAR>value</VAR>.
@@ -5106,10 +5113,11 @@ immediately, rather than before printing the next primary prompt.
 <DT><CODE>-e</CODE>
 <DD>Exit immediately if a simple command (see section <A HREF="bashref.html#SEC16">3.2.1 Simple Commands</A>) exits
 with a non-zero status, unless the command that fails is part of the
-command list immediately following a <CODE>while</CODE> or <CODE>until</CODE>
-keyword, part of the test in an <CODE>if</CODE> statement,
-part of a <CODE>&#38;&#38;</CODE> or <CODE>||</CODE> list, or if the command's return
-status is being inverted using <CODE>!</CODE>.
+command list immediately following a <CODE>while</CODE> or <CODE>until</CODE> keyword,
+part of the test in an <CODE>if</CODE> statement,
+part of a <CODE>&#38;&#38;</CODE> or <CODE>||</CODE> list,
+any command in a pipeline but the last,
+or if the command's return status is being inverted using <CODE>!</CODE>.
 A trap on <CODE>ERR</CODE>, if set, is executed before the shell exits.
 <P>
 
@@ -5848,7 +5856,7 @@ 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 is "main".
+The bottom-most element is <CODE>"main"</CODE>.
 This variable exists only when a shell function is executing.
 Assignments to <CODE>FUNCNAME</CODE> have no effect and return an error status.
 If <CODE>FUNCNAME</CODE> is unset, it loses its special properties, even if
@@ -6302,7 +6310,7 @@ if input does not arrive after <CODE>TMOUT</CODE> seconds when input is coming
 from a terminal.
 <P>
 
-In an interative shell, the value is interpreted as
+In an interactive shell, the value is interpreted as
 the number of seconds to wait for input after issuing the primary
 prompt when the shell is interactive.
 Bash terminates after that number of seconds if input does
@@ -6415,7 +6423,7 @@ Equivalent to <SAMP>`-D'</SAMP> except for the output format.
 <P>
 
 <DT><CODE>--help</CODE>
-<DD>Display a usage message on standard output and exit sucessfully.
+<DD>Display a usage message on standard output and exit successfully.
 <P>
 
 <DT><CODE>--init-file <VAR>filename</VAR></CODE>
@@ -6582,7 +6590,7 @@ in the script.  If no commands are executed, the exit status is 0.
 <!--docid::SEC66::-->
 <P>
 
-This section describs how Bash executes its 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 file names as described above under
 Tilde Expansion (see section <A HREF="bashref.html#SEC29">3.5.2 Tilde Expansion</A>).
@@ -6765,7 +6773,7 @@ the same, but the effective user id is not reset.
 
 An interactive shell
 is one started without non-option arguments, unless <SAMP>`-s'</SAMP> is
-specified, without specifiying the <SAMP>`-c'</SAMP> option, and
+specified, without specifying the <SAMP>`-c'</SAMP> option, and
 whose input and error output are both
 connected to terminals (as determined by <CODE>isatty(3)</CODE>),
 or one started with the <SAMP>`-i'</SAMP> option.
@@ -6902,7 +6910,7 @@ In the absence of any traps, <CODE>SIGINT</CODE> is caught and handled
 
 <LI>
 An interactive login shell sends a <CODE>SIGHUP</CODE> to all jobs on exit
-if the <CODE>hupoxexit</CODE> shell option has been enabled (see section <A HREF="bashref.html#SEC54">3.7.6 Signals</A>).
+if the <CODE>huponexit</CODE> shell option has been enabled (see section <A HREF="bashref.html#SEC54">3.7.6 Signals</A>).
 <P>
 
 <LI>
@@ -7578,7 +7586,7 @@ from the stack, so that only the stack is manipulated.
 
 <A NAME="IDX274"></A>
 <DT><CODE>pushd</CODE>
-<DD><TABLE><tr><td>&nbsp;</td><td class=example><pre>pushd [<VAR>dir</VAR> | <VAR>+N</VAR> | <VAR>-N</VAR>] [-n]
+<DD><TABLE><tr><td>&nbsp;</td><td class=example><pre>pushd [-n] [<VAR>+N</VAR> | <VAR>-N</VAR> | <VAR>dir</VAR> ]
 </pre></td></tr></table><P>
 
 Save the current directory on the top of the directory stack
@@ -7587,6 +7595,9 @@ With no arguments, <CODE>pushd</CODE> exchanges the top two directories.
 </P><P>
 
 <DL COMPACT>
+<DT><CODE>-n</CODE>
+<DD>Suppresses the normal change of directory when adding directories
+to the stack, so that only the stack is manipulated.
 <DT><CODE>+<VAR>N</VAR></CODE>
 <DD>Brings the <VAR>N</VAR>th directory (counting from the left of the
 list printed by <CODE>dirs</CODE>, starting with zero) to the top of
@@ -7595,9 +7606,6 @@ the list by rotating the stack.
 <DD>Brings the <VAR>N</VAR>th directory (counting from the right of the
 list printed by <CODE>dirs</CODE>, starting with zero) to the top of
 the list by rotating the stack.
-<DT><CODE>-n</CODE>
-<DD>Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
 <DT><CODE><VAR>dir</VAR></CODE>
 <DD>Makes the current working directory be the top of the stack, and then
 executes the equivalent of `<CODE>cd</CODE> <VAR>dir</VAR>'.
@@ -15136,7 +15144,7 @@ to permit their use in free software.
 <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="bashref.html#SEC_About"> ? </A>]</TD>
 </TR></TABLE>
 <H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>September, 28  2006</I>
+This document was generated by <I>Chet Ramey</I> on <I>December, 12  2006</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 <P></P>  
@@ -15298,7 +15306,7 @@ the following structure:
 <BR>  
 <FONT SIZE="-1">
 This document was generated
-by <I>Chet Ramey</I> on <I>September, 28  2006</I>
+by <I>Chet Ramey</I> on <I>December, 12  2006</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 
index 3b74eb63deed87021c4d242ba3075f19cdca85a1..a615e60f52a33b255a3ba712c3bcffb07b2e3c21 100644 (file)
@@ -1,11 +1,11 @@
-This is bashref.info, produced by makeinfo version 4.7 from
+This is bashref.info, produced by makeinfo version 4.8 from
 /Users/chet/src/bash/src/doc/bashref.texi.
 
    This text is a brief description of the features that are present in
-the Bash shell (version 3.2, 28 September 2006).
+the Bash shell (version 3.2, 27 November 2006).
 
-   This is Edition 3.2, last updated 28 September 2006, of `The GNU
-Bash Reference Manual', for `Bash', Version 3.2.
+   This is Edition 3.2, last updated 27 November 2006, of `The GNU Bash
+Reference Manual', for `Bash', Version 3.2.
 
    Copyright (C) 1988-2005 Free Software Foundation, Inc.
 
@@ -37,10 +37,10 @@ Bash Features
 *************
 
 This text is a brief description of the features that are present in
-the Bash shell (version 3.2, 28 September 2006).
+the Bash shell (version 3.2, 27 November 2006).
 
-   This is Edition 3.2, last updated 28 September 2006, of `The GNU
-Bash Reference Manual', for `Bash', Version 3.2.
+   This is Edition 3.2, last updated 27 November 2006, of `The GNU Bash
+Reference Manual', for `Bash', Version 3.2.
 
    Bash contains features that appear in other popular shells, and some
 features that only appear in Bash.  Some of the shells that Bash has
@@ -130,7 +130,7 @@ 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 GNU utilities.  The programming language
-features allow these utilitites to be combined.  Files containing
+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
 `/bin', allowing users or groups to establish custom environments to
@@ -232,7 +232,7 @@ These definitions are used throughout the remainder of this manual.
      group ID.
 
 `process group ID'
-     A unique identifer that represents a `process group' during its
+     A unique identifier that represents a `process group' during its
      lifetime.
 
 `reserved word'
@@ -793,7 +793,7 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
      items.  The set of expanded words is printed on the standard error
      output stream, each preceded by a number.  If the `in WORDS' is
      omitted, the positional parameters are printed, as if `in "$@"'
-     had been specifed.  The `PS3' prompt is then displayed and a line
+     had been specified.  The `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
      NAME is set to that word.  If the line is empty, the words and
@@ -1201,7 +1201,7 @@ Brace expansion is a mechanism by which arbitrary strings may be
 generated.  This mechanism is similar to FILENAME EXPANSION (*note
 Filename Expansion::), but the file names generated need not exist.
 Patterns to be brace expanded take the form of an optional PREAMBLE,
-followed by either a series of comma-separated strings or a sequnce
+followed by either a series of comma-separated strings or a seqeunce
 expression between a pair of braces, followed by an optional POSTSCRIPT.
 The preamble is prefixed to each string contained within the braces, and
 the postscript is then appended to each resulting string, expanding left
@@ -1387,12 +1387,16 @@ if the colon is omitted, the operator tests only for existence.
      that a negative offset must be separated from the colon by at least
      one space to avoid being confused with the `:-' expansion.
      Substring indexing is zero-based unless the positional parameters
-     are used, in which case the indexing starts at 1.
+     are used, in which case the indexing starts at 1 by default.  If
+     OFFSET is 0, and the positional parameters are used, `$@' is
+     prefixed to the list.
 
 `${!PREFIX*}'
 `${!PREFIX@}'
      Expands to the names of variables whose names begin with PREFIX,
      separated by the first character of the `IFS' special variable.
+     When `@' is used and the expansion appears within double quotes,
+     each variable name expands to a separate word.
 
 `${!NAME[@]}'
 `${!NAME[*]}'
@@ -2348,11 +2352,11 @@ standard.
           exec [-cl] [-a NAME] [COMMAND [ARGUMENTS]]
      If COMMAND is supplied, it replaces the shell without creating a
      new process.  If the `-l' option is supplied, the shell places a
-     dash at the beginning of the zeroth arg passed to COMMAND.  This
-     is what the `login' program does.  The `-c' option causes COMMAND
-     to be executed with an empty environment.  If `-a' is supplied,
-     the shell passes NAME as the zeroth argument to COMMAND.  If no
-     COMMAND is specified, redirections may be used to affect the
+     dash at the beginning of the zeroth argument passed to COMMAND.
+     This is what the `login' program does.  The `-c' option causes
+     COMMAND to be executed with an empty environment.  If `-a' is
+     supplied, the shell passes NAME as the zeroth argument to COMMAND.
+     If no 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.
 
@@ -2655,7 +2659,7 @@ POSIX standard.
      Display current Readline (*note 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
+     command as it would appear in a Readline initialization file
      (*note Readline Init File::), but each binding or command must be
      passed as a separate argument;  e.g.,
      `"\C-x\C-r":re-read-init-file'.  Options, if supplied, have the
@@ -2799,10 +2803,12 @@ POSIX standard.
           Mark each NAME for export to subsequent commands via the
           environment.
 
-     Using `+' instead of `-' turns off the attribute instead.  When
-     used in a function, `declare' makes each NAME local, as with the
-     `local' command.  If a variable name is followed by =VALUE, the
-     value of the variable is set to VALUE.
+     Using `+' instead of `-' turns off the attribute instead, with the
+     exceptions that `+a' may not be used to destroy an array variable
+     and `+r' will not remove the readonly attribute.  When used in a
+     function, `declare' makes each NAME local, as with the `local'
+     command.  If a variable name is followed by =VALUE, the value of
+     the variable is set to VALUE.
 
      The return status is zero unless an invalid option is encountered,
      an attempt is made to define a function using `-f foo=bar', an
@@ -3402,9 +3408,10 @@ This builtin is so complicated that it deserves its own section.
           Commands::) exits with a non-zero status, unless the command
           that fails is part of the command list immediately following
           a `while' or `until' keyword, part of the test in an `if'
-          statement, part of a `&&' or `||' list, or if the command's
-          return status is being inverted using `!'.  A trap on `ERR',
-          if set, is executed before the shell exits.
+          statement, part of a `&&' or `||' list, any command in a
+          pipeline but the last, or if the command's return status is
+          being inverted using `!'.  A trap on `ERR', if set, is
+          executed before the shell exits.
 
     `-f'
           Disable file name generation (globbing).
@@ -3892,7 +3899,7 @@ Variables::).
      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 is "main".  This variable exists only when a
+     bottom-most element is `"main"'.  This variable exists only when a
      shell function is executing.  Assignments to `FUNCNAME' have no
      effect and return an error status.  If `FUNCNAME' is unset, it
      loses its special properties, even if it is subsequently reset.
@@ -4191,7 +4198,7 @@ Variables::).
      if input does not arrive after `TMOUT' seconds when input is coming
      from a terminal.
 
-     In an interative shell, the value is interpreted as the number of
+     In an interactive shell, the value is interpreted as the number of
      seconds to wait for input after issuing the primary prompt when
      the shell is interactive.  Bash terminates after that number of
      seconds if input does not arrive.
@@ -4261,7 +4268,7 @@ the single-character options to be recognized.
      Equivalent to `-D'.
 
 `--help'
-     Display a usage message on standard output and exit sucessfully.
+     Display a usage message on standard output and exit successfully.
 
 `--init-file FILENAME'
 `--rcfile FILENAME'
@@ -4378,7 +4385,7 @@ File: bashref.info,  Node: Bash Startup Files,  Next: Interactive Shells,  Prev:
 6.2 Bash Startup Files
 ======================
 
-This section describs how Bash executes its startup files.  If any of
+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 file names as described above under Tilde Expansion (*note
 Tilde Expansion::).
@@ -4502,9 +4509,9 @@ File: bashref.info,  Node: What is an Interactive Shell?,  Next: Is this Shell I
 -----------------------------------
 
 An interactive shell is one started without non-option arguments,
-unless `-s' is specified, without specifiying the `-c' option, and
-whose input and error output are both connected to terminals (as
-determined by `isatty(3)'), or one started with the `-i' option.
+unless `-s' is specified, without specifying the `-c' option, and whose
+input and error output are both connected to terminals (as determined
+by `isatty(3)'), or one started with the `-i' option.
 
    An interactive shell generally reads from and writes to a user's
 terminal.
@@ -4581,7 +4588,7 @@ several ways.
      ((*note Signals::).  `SIGINT' will interrupt some shell builtins.
 
  11. An interactive login shell sends a `SIGHUP' to all jobs on exit if
-     the `hupoxexit' shell option has been enabled (*note Signals::).
+     the `huponexit' shell option has been enabled (*note Signals::).
 
  12. The `-n' invocation option is ignored, and `set -n' has no effect
      (*note The Set Builtin::).
@@ -5042,12 +5049,17 @@ File: bashref.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           manipulated.
 
 `pushd'
-          pushd [DIR | +N | -N] [-n]
+          pushd [-n] [+N | -N | DIR ]
 
      Save the current directory on the top of the directory stack and
      then `cd' to DIR.  With no arguments, `pushd' exchanges the top
      two directories.
 
+    `-n'
+          Suppresses the normal change of directory when adding
+          directories to the stack, so that only the stack is
+          manipulated.
+
     `+N'
           Brings the Nth directory (counting from the left of the list
           printed by `dirs', starting with zero) to the top of the list
@@ -5058,11 +5070,6 @@ File: bashref.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           printed by `dirs', starting with zero) to the top of the list
           by rotating the stack.
 
-    `-n'
-          Suppresses the normal change of directory when adding
-          directories to the stack, so that only the stack is
-          manipulated.
-
     `DIR'
           Makes the current working directory be the top of the stack,
           and then executes the equivalent of ``cd' DIR'.  `cd's to DIR.
@@ -8994,8 +9001,8 @@ Index of Shell Builtin Commands
                                                               (line   7)
 * disown:                                Job Control Builtins.
                                                               (line  83)
-* echo:                                  Bash Builtins.       (line 191)
-* enable:                                Bash Builtins.       (line 243)
+* echo:                                  Bash Builtins.       (line 193)
+* enable:                                Bash Builtins.       (line 245)
 * eval:                                  Bourne Shell Builtins.
                                                               (line  63)
 * exec:                                  Bourne Shell Builtins.
@@ -9012,24 +9019,24 @@ Index of Shell Builtin Commands
                                                               (line 103)
 * hash:                                  Bourne Shell Builtins.
                                                               (line 145)
-* help:                                  Bash Builtins.       (line 271)
+* help:                                  Bash Builtins.       (line 273)
 * history:                               Bash History Builtins.
                                                               (line  39)
 * jobs:                                  Job Control Builtins.
                                                               (line  25)
 * kill:                                  Job Control Builtins.
                                                               (line  57)
-* let:                                   Bash Builtins.       (line 280)
-* local:                                 Bash Builtins.       (line 287)
-* logout:                                Bash Builtins.       (line 297)
+* let:                                   Bash Builtins.       (line 282)
+* local:                                 Bash Builtins.       (line 289)
+* logout:                                Bash Builtins.       (line 299)
 * popd:                                  Directory Stack Builtins.
                                                               (line  37)
-* printf:                                Bash Builtins.       (line 301)
+* printf:                                Bash Builtins.       (line 303)
 * pushd:                                 Directory Stack Builtins.
                                                               (line  58)
 * pwd:                                   Bourne Shell Builtins.
                                                               (line 163)
-* read:                                  Bash Builtins.       (line 326)
+* read:                                  Bash Builtins.       (line 328)
 * readonly:                              Bourne Shell Builtins.
                                                               (line 172)
 * return:                                Bourne Shell Builtins.
@@ -9037,8 +9044,8 @@ Index of Shell Builtin Commands
 * set:                                   The Set Builtin.     (line   9)
 * shift:                                 Bourne Shell Builtins.
                                                               (line 200)
-* shopt:                                 Bash Builtins.       (line 387)
-* source:                                Bash Builtins.       (line 618)
+* shopt:                                 Bash Builtins.       (line 389)
+* source:                                Bash Builtins.       (line 620)
 * suspend:                               Job Control Builtins.
                                                               (line  94)
 * test:                                  Bourne Shell Builtins.
@@ -9047,12 +9054,12 @@ Index of Shell Builtin Commands
                                                               (line 278)
 * trap:                                  Bourne Shell Builtins.
                                                               (line 283)
-* type:                                  Bash Builtins.       (line 622)
-* typeset:                               Bash Builtins.       (line 653)
-* ulimit:                                Bash Builtins.       (line 659)
+* type:                                  Bash Builtins.       (line 624)
+* typeset:                               Bash Builtins.       (line 655)
+* ulimit:                                Bash Builtins.       (line 661)
 * umask:                                 Bourne Shell Builtins.
                                                               (line 324)
-* unalias:                               Bash Builtins.       (line 737)
+* unalias:                               Bash Builtins.       (line 739)
 * unset:                                 Bourne Shell Builtins.
                                                               (line 341)
 * wait:                                  Job Control Builtins.
@@ -9524,129 +9531,129 @@ Concept Index
 
 \1f
 Tag Table:
-Node: Top\7f1359
-Node: Introduction\7f3442
-Node: What is Bash?\7f3670
-Node: What is a shell?\7f4783
-Node: Definitions\7f7324
-Node: Basic Shell Features\7f10091
-Node: Shell Syntax\7f11310
-Node: Shell Operation\7f12340
-Node: Quoting\7f13634
-Node: Escape Character\7f14937
-Node: Single Quotes\7f15422
-Node: Double Quotes\7f15770
-Node: ANSI-C Quoting\7f16895
-Node: Locale Translation\7f17851
-Node: Comments\7f18747
-Node: Shell Commands\7f19361
-Node: Simple Commands\7f20127
-Node: Pipelines\7f20758
-Node: Lists\7f22633
-Node: Compound Commands\7f24264
-Node: Looping Constructs\7f25048
-Node: Conditional Constructs\7f27495
-Node: Command Grouping\7f34954
-Node: Shell Functions\7f36403
-Node: Shell Parameters\7f40812
-Node: Positional Parameters\7f43142
-Node: Special Parameters\7f44042
-Node: Shell Expansions\7f47006
-Node: Brace Expansion\7f48931
-Node: Tilde Expansion\7f51256
-Node: Shell Parameter Expansion\7f53607
-Node: Command Substitution\7f61077
-Node: Arithmetic Expansion\7f62410
-Node: Process Substitution\7f63260
-Node: Word Splitting\7f64310
-Node: Filename Expansion\7f65771
-Node: Pattern Matching\7f67907
-Node: Quote Removal\7f71225
-Node: Redirections\7f71520
-Node: Executing Commands\7f79250
-Node: Simple Command Expansion\7f79920
-Node: Command Search and Execution\7f81850
-Node: Command Execution Environment\7f83856
-Node: Environment\7f86627
-Node: Exit Status\7f88287
-Node: Signals\7f89491
-Node: Shell Scripts\7f91455
-Node: Shell Builtin Commands\7f93973
-Node: Bourne Shell Builtins\7f95642
-Node: Bash Builtins\7f112744
-Node: The Set Builtin\7f142004
-Node: Special Builtins\7f150379
-Node: Shell Variables\7f151349
-Node: Bourne Shell Variables\7f151789
-Node: Bash Variables\7f153770
-Node: Bash Features\7f174084
-Node: Invoking Bash\7f174967
-Node: Bash Startup Files\7f180776
-Node: Interactive Shells\7f185634
-Node: What is an Interactive Shell?\7f186044
-Node: Is this Shell Interactive?\7f186694
-Node: Interactive Shell Behavior\7f187509
-Node: Bash Conditional Expressions\7f190785
-Node: Shell Arithmetic\7f194364
-Node: Aliases\7f197110
-Node: Arrays\7f199678
-Node: The Directory Stack\7f203027
-Node: Directory Stack Builtins\7f203741
-Node: Printing a Prompt\7f206632
-Node: The Restricted Shell\7f209346
-Node: Bash POSIX Mode\7f211178
-Node: Job Control\7f218937
-Node: Job Control Basics\7f219404
-Node: Job Control Builtins\7f223780
-Node: Job Control Variables\7f228107
-Node: Command Line Editing\7f229265
-Node: Introduction and Notation\7f230264
-Node: Readline Interaction\7f231886
-Node: Readline Bare Essentials\7f233077
-Node: Readline Movement Commands\7f234866
-Node: Readline Killing Commands\7f235831
-Node: Readline Arguments\7f237751
-Node: Searching\7f238795
-Node: Readline Init File\7f240981
-Node: Readline Init File Syntax\7f242128
-Node: Conditional Init Constructs\7f254459
-Node: Sample Init File\7f256992
-Node: Bindable Readline Commands\7f260109
-Node: Commands For Moving\7f261316
-Node: Commands For History\7f262177
-Node: Commands For Text\7f265332
-Node: Commands For Killing\7f268005
-Node: Numeric Arguments\7f270147
-Node: Commands For Completion\7f271286
-Node: Keyboard Macros\7f274879
-Node: Miscellaneous Commands\7f275450
-Node: Readline vi Mode\7f280761
-Node: Programmable Completion\7f281675
-Node: Programmable Completion Builtins\7f287467
-Node: Using History Interactively\7f295063
-Node: Bash History Facilities\7f295743
-Node: Bash History Builtins\7f298438
-Node: History Interaction\7f302295
-Node: Event Designators\7f304851
-Node: Word Designators\7f305866
-Node: Modifiers\7f307505
-Node: Installing Bash\7f308911
-Node: Basic Installation\7f310041
-Node: Compilers and Options\7f312733
-Node: Compiling For Multiple Architectures\7f313474
-Node: Installation Names\7f315138
-Node: Specifying the System Type\7f315956
-Node: Sharing Defaults\7f316672
-Node: Operation Controls\7f317345
-Node: Optional Features\7f318303
-Node: Reporting Bugs\7f327234
-Node: Major Differences From The Bourne Shell\7f328428
-Node: Copying This Manual\7f345093
-Node: GNU Free Documentation License\7f345369
-Node: Builtin Index\7f367775
-Node: Reserved Word Index\7f374324
-Node: Variable Index\7f376760
-Node: Function Index\7f387693
-Node: Concept Index\7f394413
+Node: Top\7f1357
+Node: Introduction\7f3438
+Node: What is Bash?\7f3666
+Node: What is a shell?\7f4779
+Node: Definitions\7f7319
+Node: Basic Shell Features\7f10087
+Node: Shell Syntax\7f11306
+Node: Shell Operation\7f12336
+Node: Quoting\7f13630
+Node: Escape Character\7f14933
+Node: Single Quotes\7f15418
+Node: Double Quotes\7f15766
+Node: ANSI-C Quoting\7f16891
+Node: Locale Translation\7f17847
+Node: Comments\7f18743
+Node: Shell Commands\7f19357
+Node: Simple Commands\7f20123
+Node: Pipelines\7f20754
+Node: Lists\7f22629
+Node: Compound Commands\7f24260
+Node: Looping Constructs\7f25044
+Node: Conditional Constructs\7f27491
+Node: Command Grouping\7f34951
+Node: Shell Functions\7f36400
+Node: Shell Parameters\7f40809
+Node: Positional Parameters\7f43139
+Node: Special Parameters\7f44039
+Node: Shell Expansions\7f47003
+Node: Brace Expansion\7f48928
+Node: Tilde Expansion\7f51254
+Node: Shell Parameter Expansion\7f53605
+Node: Command Substitution\7f61305
+Node: Arithmetic Expansion\7f62638
+Node: Process Substitution\7f63488
+Node: Word Splitting\7f64538
+Node: Filename Expansion\7f65999
+Node: Pattern Matching\7f68135
+Node: Quote Removal\7f71453
+Node: Redirections\7f71748
+Node: Executing Commands\7f79478
+Node: Simple Command Expansion\7f80148
+Node: Command Search and Execution\7f82078
+Node: Command Execution Environment\7f84084
+Node: Environment\7f86855
+Node: Exit Status\7f88515
+Node: Signals\7f89719
+Node: Shell Scripts\7f91683
+Node: Shell Builtin Commands\7f94201
+Node: Bourne Shell Builtins\7f95870
+Node: Bash Builtins\7f112975
+Node: The Set Builtin\7f142367
+Node: Special Builtins\7f150792
+Node: Shell Variables\7f151762
+Node: Bourne Shell Variables\7f152202
+Node: Bash Variables\7f154183
+Node: Bash Features\7f174500
+Node: Invoking Bash\7f175383
+Node: Bash Startup Files\7f181193
+Node: Interactive Shells\7f186052
+Node: What is an Interactive Shell?\7f186462
+Node: Is this Shell Interactive?\7f187111
+Node: Interactive Shell Behavior\7f187926
+Node: Bash Conditional Expressions\7f191202
+Node: Shell Arithmetic\7f194781
+Node: Aliases\7f197527
+Node: Arrays\7f200095
+Node: The Directory Stack\7f203444
+Node: Directory Stack Builtins\7f204158
+Node: Printing a Prompt\7f207050
+Node: The Restricted Shell\7f209764
+Node: Bash POSIX Mode\7f211596
+Node: Job Control\7f219355
+Node: Job Control Basics\7f219822
+Node: Job Control Builtins\7f224198
+Node: Job Control Variables\7f228525
+Node: Command Line Editing\7f229683
+Node: Introduction and Notation\7f230682
+Node: Readline Interaction\7f232304
+Node: Readline Bare Essentials\7f233495
+Node: Readline Movement Commands\7f235284
+Node: Readline Killing Commands\7f236249
+Node: Readline Arguments\7f238169
+Node: Searching\7f239213
+Node: Readline Init File\7f241399
+Node: Readline Init File Syntax\7f242546
+Node: Conditional Init Constructs\7f254877
+Node: Sample Init File\7f257410
+Node: Bindable Readline Commands\7f260527
+Node: Commands For Moving\7f261734
+Node: Commands For History\7f262595
+Node: Commands For Text\7f265750
+Node: Commands For Killing\7f268423
+Node: Numeric Arguments\7f270565
+Node: Commands For Completion\7f271704
+Node: Keyboard Macros\7f275297
+Node: Miscellaneous Commands\7f275868
+Node: Readline vi Mode\7f281179
+Node: Programmable Completion\7f282093
+Node: Programmable Completion Builtins\7f287885
+Node: Using History Interactively\7f295481
+Node: Bash History Facilities\7f296161
+Node: Bash History Builtins\7f298856
+Node: History Interaction\7f302713
+Node: Event Designators\7f305269
+Node: Word Designators\7f306284
+Node: Modifiers\7f307923
+Node: Installing Bash\7f309329
+Node: Basic Installation\7f310459
+Node: Compilers and Options\7f313151
+Node: Compiling For Multiple Architectures\7f313892
+Node: Installation Names\7f315556
+Node: Specifying the System Type\7f316374
+Node: Sharing Defaults\7f317090
+Node: Operation Controls\7f317763
+Node: Optional Features\7f318721
+Node: Reporting Bugs\7f327652
+Node: Major Differences From The Bourne Shell\7f328846
+Node: Copying This Manual\7f345511
+Node: GNU Free Documentation License\7f345787
+Node: Builtin Index\7f368193
+Node: Reserved Word Index\7f374742
+Node: Variable Index\7f377178
+Node: Function Index\7f388111
+Node: Concept Index\7f394831
 \1f
 End Tag Table
index 0ad3d7533305daac8d4aa68552a174abe963c8e2..f9068540c2972f22533af1bd9d41fad0dbb8eb59 100644 (file)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  28 SEP 2006 10:26
+This is TeX, Version 3.141592 (Web2C 7.5.4) (format=tex 2006.11.28)  12 DEC 2006 14:43
 **/Users/chet/src/bash/src/doc/bashref.texi
 (/Users/chet/src/bash/src/doc/bashref.texi (./texinfo.tex
 Loading texinfo [version 2003-02-03.16]: Basics,
@@ -106,7 +106,7 @@ cross references,
 \auxfile=\write2
 \savesfregister=\count46
 \footnoteno=\count47
- (/sw/share/texmf/tex/generic/misc/epsf.tex
+ (/sw/share/texmf-dist/tex/generic/epsf/epsf.tex
 \epsffilein=\read0
 \epsfframemargin=\dimen39
 \epsfframethickness=\dimen40
@@ -119,18 +119,19 @@ cross references,
 \epsfnoopenhelp=\toks24
 )
 \noepsfhelp=\toks25
- localization,
+
+localization,
 \nolanghelp=\toks26
 \defaultparindent=\dimen47
-
-and turning on texinfo input format.) (./bashref.aux)
+ and turning on texinfo input format.) (./bashref.aux)
 @cpindfile=@write3
 @fnindfile=@write4
 @vrindfile=@write5
 @tpindfile=@write6
 @kyindfile=@write7
 @pgindfile=@write8
- (./version.texi)
+
+(./version.texi)
 @btindfile=@write9
 @rwindfile=@write10
  [1
@@ -152,12 +153,11 @@ and turning on texinfo input format.) (./bashref.aux)
 
 \openout10 = `bashref.rw'.
 
-]
-[2] (./bashref.toc [-1] [-2] [-3]) [-4] Chapter 1
+] [2] (./bashref.toc [-1] [-2] [-3]) [-4] Chapter 1
 \openout0 = `bashref.toc'.
 
- [1] Chapter 2 [2] [3]
-Chapter 3 [4] [5] [6] [7] [8] [9] [10]
+ [1]
+Chapter 2 [2] [3] Chapter 3 [4] [5] [6] [7] [8] [9] [10]
 Overfull \hbox (43.33539pt too wide) in paragraph at lines 845--845
  []@texttt case @textttsl word @texttt in [ [(] @textttsl pat-tern @texttt [| @
 textttsl pat-tern@texttt ][]) @textttsl command-list @texttt ;;][] esac[][] 
@@ -173,7 +173,7 @@ textttsl pat-tern@texttt ][]) @textttsl command-list @texttt ;;][] esac[][]
 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25]
 [26] [27] [28] [29] [30] [31] [32] Chapter 4 [33] [34] [35] [36] [37] [38]
 [39] [40] [41]
-Underfull \hbox (badness 5231) in paragraph at lines 3120--3133
+Underfull \hbox (badness 5231) in paragraph at lines 3124--3137
  @texttt emacs-meta[]@textrm , @texttt emacs-ctlx[]@textrm , @texttt vi[]@textr
 m , @texttt vi-move[]@textrm , @texttt vi-command[]@textrm , and
 
@@ -186,7 +186,7 @@ m , @texttt vi-move[]@textrm , @texttt vi-command[]@textrm , and
 .etc.
 
 [42] [43] [44] [45]
-Overfull \hbox (43.33536pt too wide) in paragraph at lines 3460--3460
+Overfull \hbox (43.33536pt too wide) in paragraph at lines 3467--3467
  []@texttt read [-ers] [-a @textttsl aname@texttt ] [-d @textttsl de-lim@texttt
  ] [-n @textttsl nchars@texttt ] [-p @textttsl prompt@texttt ] [-t @textttsl ti
 me-
@@ -200,7 +200,7 @@ me-
 .etc.
 
 [46] [47] [48]
-Underfull \hbox (badness 2573) in paragraph at lines 3644--3648
+Underfull \hbox (badness 2573) in paragraph at lines 3651--3655
  [] []@textrm Error trac-ing is en-abled: com-mand sub-sti-tu-tion, shell
 
 @hbox(7.60416+2.12917)x433.62, glue set 2.95305
@@ -217,7 +217,7 @@ Underfull \hbox (badness 2573) in paragraph at lines 3644--3648
 
 [49] [50] [51] [52] [53] [54] [55] Chapter 5 [56] [57] [58] [59] [60] [61]
 [62] [63] [64] Chapter 6 [65] [66]
-Overfull \hbox (51.96864pt too wide) in paragraph at lines 4840--4840
+Overfull \hbox (51.96864pt too wide) in paragraph at lines 4848--4848
  []@texttt bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @textttsl op-tion@t
 exttt ] [-O @textttsl shopt_option@texttt ] [@textttsl ar-
 
@@ -230,7 +230,7 @@ exttt ] [-O @textttsl shopt_option@texttt ] [@textttsl ar-
 .etc.
 
 
-Overfull \hbox (76.23077pt too wide) in paragraph at lines 4841--4841
+Overfull \hbox (76.23077pt too wide) in paragraph at lines 4849--4849
  []@texttt bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @textttsl op-tion@texttt 
 ] [-O @textttsl shopt_option@texttt ] -c @textttsl string @texttt [@textttsl ar
 -
@@ -244,7 +244,7 @@ Overfull \hbox (76.23077pt too wide) in paragraph at lines 4841--4841
 .etc.
 
 
-Overfull \hbox (34.72258pt too wide) in paragraph at lines 4842--4842
+Overfull \hbox (34.72258pt too wide) in paragraph at lines 4850--4850
  []@texttt bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @textttsl op-tion@text
 tt ] [-O @textttsl shopt_option@texttt ] [@textttsl ar-
 
@@ -257,7 +257,7 @@ tt ] [-O @textttsl shopt_option@texttt ] [@textttsl ar-
 .etc.
 
 [67] [68]
-Underfull \hbox (badness 2245) in paragraph at lines 5016--5018
+Underfull \hbox (badness 2245) in paragraph at lines 5024--5026
 []@textrm When a lo-gin shell ex-its, Bash reads and ex-e-cutes com-mands from 
 the file
 
@@ -270,7 +270,7 @@ the file
 .etc.
 
 [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82]
-Underfull \hbox (badness 2521) in paragraph at lines 6130--6133
+Underfull \hbox (badness 2521) in paragraph at lines 6138--6141
 @textrm `@texttt --enable-strict-posix-default[]@textrm '[] to @texttt configur
 e[] @textrm when build-ing (see Sec-tion 10.8
 
@@ -337,7 +337,7 @@ Underfull \hbox (badness 2753) in paragraph at lines 1768--1771
 
 [113]) (/Users/chet/src/bash/src/lib/readline/doc/hsuser.texi Chapter 9
 [114] [115] [116] [117] [118]) Chapter 10 [119] [120] [121] [122] [123]
-Underfull \hbox (badness 2772) in paragraph at lines 6724--6728
+Underfull \hbox (badness 2772) in paragraph at lines 6732--6736
  []@textrm Enable sup-port for large files (@texttt http://www.sas.com/standard
 s/large_
 
@@ -374,12 +374,12 @@ Overfull \vbox (42.26959pt too high) has occurred while \output is active
 (./bashref.vrs [149]) (Function Index) [150] (./bashref.fns [151])
 (Concept Index) [152] (./bashref.cps [153]) [154] ) 
 Here is how much of TeX's memory you used:
- 1726 strings out of 98002
- 23501 string characters out of 1221987
- 52380 words of memory out of 1000001
+ 1726 strings out of 97980
+ 23516 string characters out of 1221004
+ 52378 words of memory out of 1000000
  2577 multiletter control sequences out of 10000+50000
- 31953 words of font info for 111 fonts, out of 500000 for 1000
+ 31953 words of font info for 111 fonts, out of 500000 for 2000
  19 hyphenation exceptions out of 1000
  15i,8n,11p,269b,465s stack positions out of 1500i,500n,5000p,200000b,5000s
 
-Output written on bashref.dvi (160 pages, 591312 bytes).
+Output written on bashref.dvi (160 pages, 606064 bytes).
index 7d2c7d28d71a0eb3858658a2c71a5f3de899ba4a..a715207bc70715d6c2d99066af572fa0af3a75cc 100644 (file)
@@ -1,17 +1,18 @@
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
 %%Title: bashref.dvi
 %%Pages: 160
 %%PageOrder: Ascend
 %%BoundingBox: 0 0 612 792
 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSL10 CMSY10 CMBXTI10 CMTI10
 %%+ CMCSC10 CMSLTT10 CMTT12 CMSY9 CMR8 CMTT9 CMTI9 CMR9
+%%DocumentPaperSizes: Letter
 %%EndComments
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
-%DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2006.09.28:1026
-%%BeginProcSet: texc.pro
+%DVIPSParameters: dpi=600
+%DVIPSSource:  TeX output 2006.12.12:1443
+%%BeginProcSet: tex.pro 0 0
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
 N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
@@ -30,22 +31,10 @@ df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
 definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
 }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
 B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
 /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
 }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
 bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
@@ -69,202 +58,7 @@ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
 rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
 
 %%EndProcSet
-%%BeginProcSet: f7b6d320.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10
-%     cmdunh10 cmr10 cmr12 cmr17cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
-%     cmsl9 cmss10cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10
-%     cmssi12 cmssi17 cmssi8cmssi9 cmssq8 cmssqi8 cmvtt10
-%
-/TeXf7b6d320Encoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
-/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
-/suppress /exclam /quotedblright /numbersign /dollar /percent /ampersand
-/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen
-/period /slash /zero /one /two /three /four /five /six /seven /eight
-/nine /colon /semicolon /exclamdown /equal /questiondown /question /at
-/A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X
-/Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
-/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
-/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
-/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 09fbbfac.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmsltt10 cmtt10 cmtt12 cmtt8 cmtt9
-/TeX09fbbfacEncoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi
-/Omega /arrowup /arrowdown /quotesingle /exclamdown /questiondown
-/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring /cedilla
-/germandbls /ae /oe /oslash /AE /OE /Oslash /visiblespace /exclam
-/quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft
-/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
-/two /three /four /five /six /seven /eight /nine /colon /semicolon /less
-/equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N
-/O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright
-/asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l
-/m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright
-/asciitilde /dieresis /visiblespace /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda /Xi /Pi
-/Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup /arrowdown
-/quotesingle /exclamdown /questiondown /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /visiblespace /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: bbad153f.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmsy10 cmsy5 cmsy6 cmsy7 cmsy8 cmsy9
-%
-/TeXbbad153fEncoding [
-/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
-/plusminus /minusplus /circleplus /circleminus /circlemultiply
-/circledivide /circledot /circlecopyrt /openbullet /bullet
-/equivasymptotic /equivalence /reflexsubset /reflexsuperset /lessequal
-/greaterequal /precedesequal /followsequal /similar /approxequal
-/propersubset /propersuperset /lessmuch /greatermuch /precedes /follows
-/arrowleft /arrowright /arrowup /arrowdown /arrowboth /arrownortheast
-/arrowsoutheast /similarequal /arrowdblleft /arrowdblright /arrowdblup
-/arrowdbldown /arrowdblboth /arrownorthwest /arrowsouthwest /proportional
-/prime /infinity /element /owner /triangle /triangleinv /negationslash
-/mapsto /universal /existential /logicalnot /emptyset /Rfractur /Ifractur
-/latticetop /perpendicular /aleph /A /B /C /D /E /F /G /H /I /J /K
-/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /union /intersection
-/unionmulti /logicaland /logicalor /turnstileleft /turnstileright
-/floorleft /floorright /ceilingleft /ceilingright /braceleft /braceright
-/angbracketleft /angbracketright /bar /bardbl /arrowbothv /arrowdblbothv
-/backslash /wreathproduct /radical /coproduct /nabla /integral
-/unionsq /intersectionsq /subsetsqequal /supersetsqequal /section
-/dagger /daggerdbl /paragraph /club /diamond /heart /spade /arrowleft
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/minus /periodcentered /multiply /asteriskmath /divide /diamondmath
-/plusminus /minusplus /circleplus /circleminus /.notdef /.notdef
-/circlemultiply /circledivide /circledot /circlecopyrt /openbullet
-/bullet /equivasymptotic /equivalence /reflexsubset /reflexsuperset
-/lessequal /greaterequal /precedesequal /followsequal /similar
-/approxequal /propersubset /propersuperset /lessmuch /greatermuch
-/precedes /follows /arrowleft /spade /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 74afc74c.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmbxti10 cmff10 cmfi10 cmfib8 cmti10 cmti12 cmti7 cmti8cmti9 cmu10
-%
-/TeX74afc74cEncoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute /caron /breve
-/macron /ring /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
-/suppress /exclam /quotedblright /numbersign /sterling /percent
-/ampersand /quoteright /parenleft /parenright /asterisk /plus /comma
-/hyphen /period /slash /zero /one /two /three /four /five /six /seven
-/eight /nine /colon /semicolon /exclamdown /equal /questiondown /question
-/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
-/X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
-/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u
-/v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis /suppress
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef
-/.notdef /Omega /ff /fi /fl /ffi /ffl /dotlessi /dotlessj /grave /acute
-/caron /breve /macron /ring /cedilla /germandbls /ae /oe /oslash /AE
-/OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: 0ef0afca.enc
-% Thomas Esser, Dec 2002. public domain
-%
-% Encoding for:
-%     cmr5
-%
-/TeX0ef0afcaEncoding [
-/Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon /Phi /Psi /Omega
-/arrowup /arrowdown /quotesingle /exclamdown /questiondown /dotlessi
-/dotlessj /grave /acute /caron /breve /macron /ring /cedilla /germandbls
-/ae /oe /oslash /AE /OE /Oslash /suppress /exclam /quotedblright
-/numbersign /dollar /percent /ampersand /quoteright /parenleft
-/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
-/two /three /four /five /six /seven /eight /nine /colon /semicolon
-/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
-/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /quotedblleft
-/bracketright /circumflex /dotaccent /quoteleft /a /b /c /d /e /f /g /h
-/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /endash /emdash
-/hungarumlaut /tilde /dieresis /suppress /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /space /Gamma /Delta /Theta /Lambda
-/Xi /Pi /Sigma /Upsilon /Phi /Psi /.notdef /.notdef /Omega /arrowup
-/arrowdown /quotesingle /exclamdown /questiondown /dotlessi /dotlessj
-/grave /acute /caron /breve /macron /ring /cedilla /germandbls /ae /oe
-/oslash /AE /OE /Oslash /suppress /dieresis /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: texps.pro
+%%BeginProcSet: texps.pro 0 0
 %!
 TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
@@ -301,10 +95,18 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 45 /hyphen put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 108 /l put
+dup 110 /n put
+dup 111 /o put
+dup 115 /s put
+dup 123 /braceleft put
+dup 125 /braceright put
 readonly def
 /FontBBox{-1 -234 524 695}readonly def
-/UniqueID 5000833 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -413,10 +215,62 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 12 /fi put
+dup 44 /comma put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 65 /A put
+dup 66 /B put
+dup 68 /D put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 85 /U put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
 readonly def
 /FontBBox{-39 -250 1036 750}readonly def
-/UniqueID 5000792 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -757,10 +611,9 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 46 /period put
 readonly def
 /FontBBox{-35 -250 1148 750}readonly def
-/UniqueID 5000827 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
@@ -824,10 +677,58 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 39 /quoteright put
+dup 42 /asterisk put
+dup 45 /hyphen put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 58 /colon put
+dup 65 /A put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 80 /P put
+dup 82 /R put
+dup 84 /T put
+dup 88 /X put
+dup 92 /backslash put
+dup 95 /underscore put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
 readonly def
 /FontBBox{-20 -233 617 696}readonly def
-/UniqueID 5000800 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8
@@ -1122,10 +1023,89 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 33 /exclam put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 94 /asciicircum put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 125 /braceright put
+dup 126 /asciitilde put
 readonly def
 /FontBBox{-6 -233 542 698}readonly def
-/UniqueID 5000831 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -1549,10 +1529,34 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 39 /quoteright put
+dup 45 /hyphen put
+dup 49 /one put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 76 /L put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 91 /bracketleft put
+dup 97 /a put
+dup 99 /c put
+dup 101 /e put
+dup 106 /j put
+dup 107 /k put
+dup 110 /n put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
 readonly def
 /FontBBox{-36 -250 1070 750}readonly def
-/UniqueID 5000791 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -1734,10 +1738,10 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 104 /angbracketleft put
+dup 105 /angbracketright put
 readonly def
 /FontBBox{-30 -958 1146 777}readonly def
-/UniqueID 5000819 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
@@ -1794,10 +1798,31 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 45 /hyphen put
+dup 47 /slash put
+dup 50 /two put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 120 /x put
 readonly def
 /FontBBox{14 -250 1077 750}readonly def
-/UniqueID 5000772 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
@@ -1969,10 +1994,84 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 11 /ff put
+dup 12 /fi put
+dup 33 /exclam put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 39 /quoteright put
+dup 42 /asterisk put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 91 /bracketleft put
+dup 93 /bracketright put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
 readonly def
 /FontBBox{-53 -251 1139 750}readonly def
-/UniqueID 5000769 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -2400,10 +2499,26 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 12 /fi put
+dup 46 /period put
+dup 97 /a put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 103 /g put
+dup 105 /i put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 118 /v put
+dup 120 /x put
 readonly def
 /FontBBox{-163 -250 1146 969}readonly def
-/UniqueID 5000828 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
@@ -2580,10 +2695,9 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 46 /period put
 readonly def
 /FontBBox{-29 -250 1274 754}readonly def
-/UniqueID 5000771 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
@@ -2647,10 +2761,13 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 0 /minus put
+dup 13 /circlecopyrt put
+dup 15 /bullet put
+dup 33 /arrowright put
+dup 55 /mapsto put
 readonly def
 /FontBBox{-29 -960 1116 775}readonly def
-/UniqueID 5000820 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
@@ -2714,10 +2831,62 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 11 /ff put
+dup 12 /fi put
+dup 14 /ffi put
+dup 42 /asterisk put
+dup 45 /hyphen put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 87 /W put
+dup 88 /X put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
 readonly def
 /FontBBox{-62 -250 1123 750}readonly def
-/UniqueID 5000798 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
@@ -3115,10 +3284,101 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 33 /exclam put
+dup 34 /quotedbl put
+dup 35 /numbersign put
+dup 36 /dollar put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asterisk put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /at put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /backslash put
+dup 93 /bracketright put
+dup 94 /asciicircum put
+dup 95 /underscore put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /braceleft put
+dup 124 /bar put
+dup 125 /braceright put
+dup 126 /asciitilde put
 readonly def
 /FontBBox{-4 -235 731 800}readonly def
-/UniqueID 5000832 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -3624,10 +3884,95 @@ end readonly def
 /FontMatrix [0.001 0 0 0.001 0 0] readonly def
 /Encoding 256 array
 0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
+dup 11 /ff put
+dup 12 /fi put
+dup 13 /fl put
+dup 14 /ffi put
+dup 33 /exclam put
+dup 34 /quotedblright put
+dup 36 /dollar put
+dup 37 /percent put
+dup 39 /quoteright put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 44 /comma put
+dup 45 /hyphen put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 61 /equal put
+dup 63 /question put
+dup 65 /A put
+dup 66 /B put
+dup 67 /C put
+dup 68 /D put
+dup 69 /E put
+dup 70 /F put
+dup 71 /G put
+dup 72 /H put
+dup 73 /I put
+dup 74 /J put
+dup 75 /K put
+dup 76 /L put
+dup 77 /M put
+dup 78 /N put
+dup 79 /O put
+dup 80 /P put
+dup 81 /Q put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 85 /U put
+dup 86 /V put
+dup 87 /W put
+dup 88 /X put
+dup 89 /Y put
+dup 90 /Z put
+dup 91 /bracketleft put
+dup 92 /quotedblleft put
+dup 93 /bracketright put
+dup 96 /quoteleft put
+dup 97 /a put
+dup 98 /b put
+dup 99 /c put
+dup 100 /d put
+dup 101 /e put
+dup 102 /f put
+dup 103 /g put
+dup 104 /h put
+dup 105 /i put
+dup 106 /j put
+dup 107 /k put
+dup 108 /l put
+dup 109 /m put
+dup 110 /n put
+dup 111 /o put
+dup 112 /p put
+dup 113 /q put
+dup 114 /r put
+dup 115 /s put
+dup 116 /t put
+dup 117 /u put
+dup 118 /v put
+dup 119 /w put
+dup 120 /x put
+dup 121 /y put
+dup 122 /z put
+dup 123 /endash put
+dup 124 /emdash put
 readonly def
 /FontBBox{-251 -250 1009 969}readonly def
-/UniqueID 5000793 def
 currentdict end
 currentfile eexec
 D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
@@ -4142,78 +4487,67 @@ A4AD033778741EEF0A55CEA96ABD06FAC4A1F2E973E8969566231CD704AD7632
 cleartomark
 %%EndFont 
 TeXDict begin 40258431 52099146 1000 600 600 (bashref.dvi)
-@start /Fa 130[62 1[62 123[{ TeX09fbbfacEncoding ReEncodeFont }2
-119.552 /CMTT12 rf /Fb 133[34 41 41 55 41 43 30 30 30
-41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 8[58
-2[58 1[43 57 1[52 60 58 70 48 2[28 58 60 50 1[59 1[54
-58 7[38 38 38 38 38 38 38 38 38 38 3[21 31[43 12[{
- TeXf7b6d320Encoding ReEncodeFont }54 74.7198 /CMR9 rf
-/Fc 209[24 46[{ TeX74afc74cEncoding ReEncodeFont }1 74.7198
-/CMTI9 rf /Fd 134[39 39 2[39 39 39 39 2[39 39 39 39 2[39
-39 2[39 3[39 19[39 27[39 39 2[39 45[{ TeX09fbbfacEncoding ReEncodeFont }
-18 74.7198 /CMSLTT10 rf /Fe 129[39 39 1[39 39 39 39 39
+@start /Fa 130[62 1[62 123[{}2 119.552 /CMTT12 rf /Fb
+133[34 41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 23
+21 43 38 23 34 43 34 43 38 8[58 2[58 1[43 57 1[52 60
+58 70 48 2[28 58 60 50 1[59 1[54 58 7[38 38 38 38 38
+38 38 38 38 38 3[21 31[43 12[{}54 74.7198 /CMR9 rf /Fc
+209[24 46[{}1 74.7198 /CMTI9 rf /Fd 134[39 39 2[39 39
+39 39 2[39 39 39 39 2[39 39 2[39 3[39 19[39 27[39 39
+2[39 45[{}18 74.7198 /CMSLTT10 rf /Fe 129[39 39 1[39
 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
-39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39
-39 1[39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39
-39 39 1[39 39 39 5[39 39 39 39 39 39 39 39 39 1[39 39
-39 39 39 1[39 39 1[39 33[{ TeX09fbbfacEncoding ReEncodeFont }81
-74.7198 /CMTT9 rf /Ff 138[39 27 28 28 1[39 1[39 2[37
-22 4[31 1[31 1[35 5[20 6[51 39 52 1[48 3[44 5[46 48 54
-51 50 53 15[35 3[24 5[20 39[{ TeXf7b6d320Encoding ReEncodeFont }26
-66.4176 /CMR8 rf /Fg 150[30 30 104[{ TeXbbad153fEncoding ReEncodeFont }
-2 74.7198 /CMSY9 rf /Fh 135[61 2[61 1[46 2[56 63 5[30
-1[64 2[62 52[55 47[{ TeX0ef0afcaEncoding ReEncodeFont }9
-99.6264 /CMCSC10 rf /Fi 140[56 3[56 56 1[56 2[56 56 56
-57[56 45[{ TeX09fbbfacEncoding ReEncodeFont }8 109.091
-/CMTT12 rf /Fj 134[48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 2[48 3[48
-3[48 1[48 1[48 1[48 48 48 1[48 48 48 1[48 48 48 48 1[48
-6[48 6[48 48 48 48 2[48 2[48 2[48 39[{
- TeX09fbbfacEncoding ReEncodeFont }50 90.9091 /CMSLTT10
-rf /Fk 134[65 65 89 65 68 48 48 50 65 68 61 68 102 34
-65 1[34 68 61 37 56 68 55 68 60 34 6[93 1[127 1[94 85
-68 92 92 84 92 96 116 74 96 1[46 96 96 77 81 94 89 87
-93 1[58 4[34 61 61 61 61 61 61 61 61 61 2[34 41 34 4[34
-26[68 72 11[{ TeXf7b6d320Encoding ReEncodeFont }64 109.091
-/CMBX12 rf /Fl 135[56 2[56 54 42 55 1[51 58 56 68 47
-1[39 27 56 58 49 51 57 54 53 56 46[50 2[50 1[34 45[{
- TeX0ef0afcaEncoding ReEncodeFont }23 90.9091 /CMCSC10
-rf /Fm 135[42 1[42 1[30 37 38 1[46 46 51 74 23 2[28 1[42
-1[42 46 42 1[46 50[28 33[51 12[{ TeX74afc74cEncoding ReEncodeFont }18
-90.9091 /CMTI10 rf /Fn 209[43 46[{ TeX74afc74cEncoding ReEncodeFont }1
-119.552 /CMBXTI10 rf /Fo 134[85 85 1[85 90 63 64 66 1[90
-81 90 134 45 1[49 45 90 81 49 74 90 72 90 78 9[167 122
-124 112 90 120 1[110 2[153 97 1[83 60 126 1[101 106 124
-117 115 122 7[81 81 81 81 81 81 81 81 81 81 35[90 94
-11[{ TeXf7b6d320Encoding ReEncodeFont }52 143.462 /CMBX12
-rf /Fp 200[0 21[91 17[45 1[91 12[71{ TeXbbad153fEncoding ReEncodeFont }
-5 90.9091 /CMSY10 rf /Fq 134[48 48 66 48 51 35 36 36
-48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 8[68
+39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39
+39 39 39 39 39 1[39 39 39 39 39 39 1[39 39 39 39 39 39
+39 39 39 39 39 39 1[39 39 39 5[39 39 39 39 39 39 39 39
+39 1[39 39 39 39 39 1[39 39 1[39 33[{}81 74.7198 /CMTT9
+rf /Ff 138[39 27 28 28 1[39 1[39 2[37 22 4[31 1[31 1[35
+5[20 6[51 39 52 1[48 3[44 5[46 48 54 51 50 53 15[35 3[24
+5[20 39[{}26 66.4176 /CMR8 rf /Fg 150[30 30 104[{}2 74.7198
+/CMSY9 rf /Fh 135[61 2[61 1[46 2[56 63 5[30 1[64 2[62
+52[55 47[{}9 99.6264 /CMCSC10 rf /Fi 140[56 3[56 56 1[56
+2[56 56 56 57[56 45[{}8 109.091 /CMTT12 rf /Fj 134[48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 1[48 2[48 3[48 3[48 1[48 1[48 1[48
+48 48 1[48 48 48 1[48 48 48 48 1[48 6[48 6[48 48 48 48
+2[48 2[48 2[48 39[{}50 90.9091 /CMSLTT10 rf /Fk 134[65
+65 89 65 68 48 48 50 65 68 61 68 102 34 65 1[34 68 61
+37 56 68 55 68 60 34 6[93 1[127 1[94 85 68 92 92 84 92
+96 116 74 96 1[46 96 96 77 81 94 89 87 93 1[58 4[34 61
+61 61 61 61 61 61 61 61 2[34 41 34 4[34 26[68 72 11[{}64
+109.091 /CMBX12 rf /Fl 135[56 2[56 54 42 55 1[51 58 56
+68 47 1[39 27 56 58 49 51 57 54 53 56 46[50 2[50 1[34
+45[{}23 90.9091 /CMCSC10 rf /Fm 135[42 1[42 1[30 37 38
+1[46 46 51 74 23 2[28 1[42 1[42 46 42 1[46 50[28 33[51
+12[{}18 90.9091 /CMTI10 rf /Fn 209[43 46[{}1 119.552
+/CMBXTI10 rf /Fo 134[85 85 1[85 90 63 64 66 1[90 81 90
+134 45 1[49 45 90 81 49 74 90 72 90 78 9[167 122 124
+112 90 120 1[110 2[153 97 1[83 60 126 1[101 106 124 117
+115 122 7[81 81 81 81 81 81 81 81 81 81 35[90 94 11[{}52
+143.462 /CMBX12 rf /Fp 200[0 21[91 17[45 1[91 12[71{}5
+90.9091 /CMSY10 rf /Fq 134[48 48 66 48 51 35 36 36 48
+51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 8[68
 93 1[68 66 51 67 1[62 71 68 83 57 71 1[33 68 71 59 62
-69 66 64 68 13[45 45 45 3[30 2[45 27[76 1[51 53 11[{
- TeXf7b6d320Encoding ReEncodeFont }54 90.9091 /CMSL10
-rf /Fr 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37
-71 41 37 75 67 41 61 75 60 75 65 3[37 1[37 1[102 102
-139 102 103 94 75 100 101 92 101 105 128 81 105 69 50
-105 106 85 88 103 97 96 102 105 64 4[37 67 67 67 67 67
-67 67 67 67 67 1[37 45 37 1[67 5[67 112 1[41 20[75 78
-11[{ TeXf7b6d320Encoding ReEncodeFont }73 119.552 /CMBX12
-rf /Fs 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48
+69 66 64 68 13[45 45 45 3[30 2[45 27[76 1[51 53 11[{}54
+90.9091 /CMSL10 rf /Fr 134[71 71 97 71 75 52 53 55 1[75
+67 75 112 37 71 41 37 75 67 41 61 75 60 75 65 3[37 1[37
+1[102 102 139 102 103 94 75 100 101 92 101 105 128 81
+105 69 50 105 106 85 88 103 97 96 102 105 64 4[37 67
+67 67 67 67 67 67 67 67 67 1[37 45 37 1[67 5[67 112 1[41
+20[75 78 11[{}73 119.552 /CMBX12 rf /Fs 129[48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
+48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48
 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
-48 48 48 48 48 48 48 48 33[{ TeX09fbbfacEncoding ReEncodeFont }93
-90.9091 /CMTT10 rf /Ft 131[91 45 40 48 48 66 48 51 35
-36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51
-45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71
-68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25
-25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35
-25 1[76 45 1[45 25 18[76 51 51 53 11[{
- TeXf7b6d320Encoding ReEncodeFont }87 90.9091 /CMR10
-rf /Fu 138[108 1[76 79 3[108 1[54 3[108 1[59 88 1[86
-1[94 14[144 4[184 10[138 66[{ TeXf7b6d320Encoding ReEncodeFont }13
-172.154 /CMBX12 rf end
+48 33[{}93 90.9091 /CMTT10 rf /Ft 131[91 45 40 48 48
+66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28
+40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51
+67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68
+1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25
+30 25 2[35 35 25 1[76 45 1[45 25 18[76 51 51 53 11[{}87
+90.9091 /CMR10 rf /Fu 138[108 1[76 79 3[108 1[54 3[108
+1[59 88 1[86 1[94 14[144 4[184 10[138 66[{}13 172.154
+/CMBX12 rf end
 %%EndProlog
 %%BeginSetup
 %%Feature: *Resolution 600dpi
@@ -4227,7 +4561,7 @@ letter
 TeXDict begin 1 0 bop 150 1318 a Fu(Bash)64 b(Reference)j(Man)-5
 b(ual)p 150 1385 3600 34 v 2361 1481 a Ft(Reference)31
 b(Do)s(cumen)m(tation)i(for)d(Bash)2428 1589 y(Edition)h(3.2,)g(for)f
-Fs(Bash)g Ft(V)-8 b(ersion)31 b(3.2.)3118 1697 y(Septem)m(b)s(er)f
+Fs(Bash)g Ft(V)-8 b(ersion)31 b(3.2.)3139 1697 y(No)m(v)m(em)m(b)s(er)g
 (2006)150 4935 y Fr(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11
 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068
 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11
@@ -4235,10 +4569,10 @@ b(oundation)p 150 5141 3600 17 v eop end
 %%Page: 2 2
 TeXDict begin 2 1 bop 150 2889 a Ft(This)35 b(text)h(is)g(a)g(brief)f
 (description)h(of)f(the)h(features)g(that)g(are)g(presen)m(t)g(in)f
-(the)h(Bash)f(shell)h(\(v)m(ersion)150 2999 y(3.2,)c(28)f(Septem)m(b)s
-(er)f(2006\).)150 3133 y(This)e(is)h(Edition)f(3.2,)j(last)e(up)s
-(dated)f(28)h(Septem)m(b)s(er)f(2006,)j(of)e Fq(The)f(GNU)i(Bash)e
-(Reference)i(Man)m(ual)p Ft(,)150 3243 y(for)g Fs(Bash)p
+(the)h(Bash)f(shell)h(\(v)m(ersion)150 2999 y(3.2,)c(27)f(No)m(v)m(em)m
+(b)s(er)g(2006\).)150 3133 y(This)e(is)i(Edition)f(3.2,)h(last)g(up)s
+(dated)e(27)i(No)m(v)m(em)m(b)s(er)h(2006,)g(of)e Fq(The)g(GNU)h(Bash)f
+(Reference)h(Man)m(ual)p Ft(,)150 3243 y(for)f Fs(Bash)p
 Ft(,)g(V)-8 b(ersion)31 b(3.2.)150 3377 y(Cop)m(yrigh)m(t)602
 3374 y(c)577 3377 y Fp(\015)f Ft(1988-2005)k(F)-8 b(ree)32
 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)150 3512
@@ -4374,7 +4708,7 @@ Fm(.)d(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)49 b Ft(23)748 4934 y(3.5.9)93 b(Quote)30
 b(Remo)m(v)-5 b(al)15 b Fm(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-g(.)g(.)g(.)44 b Ft(24)449 5044 y(3.6)92 b(Redirections)24
+g(.)g(.)g(.)44 b Ft(25)449 5044 y(3.6)92 b(Redirections)24
 b Fm(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
 g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Ft(25)748 5153
@@ -4703,9 +5037,9 @@ b(term)150 2813 y(macro)29 b(pro)s(cessor)f(means)g(functionalit)m(y)i
 (language.)55 b(As)35 b(a)g(com-)150 3170 y(mand)30 b(in)m(terpreter,)i
 (the)g(shell)f(pro)m(vides)g(the)h(user)e(in)m(terface)j(to)f(the)f
 (ric)m(h)h(set)g(of)f Fl(gnu)g Ft(utilities.)44 b(The)150
-3280 y(programming)26 b(language)i(features)f(allo)m(w)h(these)f
-(utilitites)h(to)f(b)s(e)f(com)m(bined.)40 b(Files)27
-b(con)m(taining)h(com-)150 3390 y(mands)h(can)i(b)s(e)e(created,)j(and)
+3280 y(programming)30 b(language)h(features)f(allo)m(w)h(these)g
+(utilities)g(to)g(b)s(e)e(com)m(bined.)41 b(Files)31
+b(con)m(taining)g(com-)150 3390 y(mands)e(can)i(b)s(e)e(created,)j(and)
 d(b)s(ecome)i(commands)f(themselv)m(es.)42 b(These)30
 b(new)f(commands)h(ha)m(v)m(e)i(the)150 3499 y(same)f(status)h(as)f
 (system)g(commands)g(in)g(directories)h(suc)m(h)f(as)g(`)p
@@ -4720,8 +5054,8 @@ b(shells)c(execute)g(commands)150 3967 y(read)30 b(from)g(a)h(\014le.)
 275 4105 y(A)41 b(shell)g(allo)m(ws)h(execution)h(of)e
 Fl(gnu)g Ft(commands,)i(b)s(oth)e(sync)m(hronously)f(and)h(async)m
 (hronously)-8 b(.)150 4215 y(The)29 b(shell)g(w)m(aits)i(for)e(sync)m
-(hronous)f(commands)h(to)h(complete)h(b)s(efore)e(accepting)h(more)g
-(input;)f(asyn-)150 4325 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)h
+(hronous)f(commands)h(to)h(complete)h(b)s(efore)e(accepting)i(more)e
+(input;)g(asyn-)150 4325 y(c)m(hronous)22 b(commands)h(con)m(tin)m(ue)h
 (to)f(execute)h(in)e(parallel)i(with)f(the)f(shell)h(while)g(it)g
 (reads)g(and)f(executes)150 4434 y(additional)35 b(commands.)50
 b(The)33 b Fq(redirection)h Ft(constructs)g(p)s(ermit)f(\014ne-grained)
@@ -4814,13 +5148,13 @@ b(operator)p Ft(.)61 b(See)38 b(Section)g(3.6)h([Redirec-)630
 (op)s(erators.)150 4321 y Fs(process)d(group)630 4431
 y Ft(A)i(collection)k(of)c(related)h(pro)s(cesses)g(eac)m(h)g(ha)m
 (ving)g(the)g(same)f(pro)s(cess)g(group)g Fl(id)p Ft(.)150
-4588 y Fs(process)e(group)h(ID)630 4697 y Ft(A)h(unique)g(iden)m(tifer)
-h(that)g(represen)m(ts)f(a)h Fs(process)d(group)h Ft(during)g(its)i
-(lifetime.)150 4854 y Fs(reserved)d(word)630 4964 y Ft(A)h
-Fs(word)e Ft(that)i(has)f(a)h(sp)s(ecial)g(meaning)f(to)h(the)g(shell.)
-40 b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)630
-5073 y(shell)j(\015o)m(w)f(con)m(trol)i(constructs,)f(suc)m(h)f(as)g
-Fs(for)g Ft(and)g Fs(while)p Ft(.)150 5230 y Fs(return)f(status)630
+4588 y Fs(process)e(group)h(ID)630 4697 y Ft(A)h(unique)g(iden)m
+(ti\014er)h(that)f(represen)m(ts)h(a)g Fs(process)d(group)h
+Ft(during)g(its)i(lifetime.)150 4854 y Fs(reserved)d(word)630
+4964 y Ft(A)h Fs(word)e Ft(that)i(has)f(a)h(sp)s(ecial)g(meaning)f(to)h
+(the)g(shell.)40 b(Most)30 b(reserv)m(ed)e(w)m(ords)g(in)m(tro)s(duce)
+630 5073 y(shell)j(\015o)m(w)f(con)m(trol)i(constructs,)f(suc)m(h)f(as)
+Fs(for)g Ft(and)g Fs(while)p Ft(.)150 5230 y Fs(return)f(status)630
 5340 y Ft(A)h(synon)m(ym)g(for)g Fs(exit)g(status)p Ft(.)p
 eop end
 %%Page: 4 10
@@ -5101,7 +5435,7 @@ m(hronously)f(\(see)h(Section)g(3.2.3)h([Lists],)g(page)e(9\),)i(the)f
 (eline)g(to)h(complete.)275 4573 y(Eac)m(h)25 b(command)g(in)g(a)g(pip)
 s(eline)g(is)g(executed)h(in)f(its)g(o)m(wn)h(subshell)e(\(see)i
 (Section)g(3.7.3)h([Command)150 4682 y(Execution)36 b(En)m(vironmen)m
-(t],)i(page)e(29\).)58 b(The)36 b(exit)g(status)g(of)g(a)g(pip)s(eline)
+(t],)i(page)e(30\).)58 b(The)36 b(exit)g(status)g(of)g(a)g(pip)s(eline)
 g(is)f(the)h(exit)h(status)f(of)g(the)150 4792 y(last)c(command)f(in)g
 (the)g(pip)s(eline,)g(unless)g(the)g Fs(pipefail)e Ft(option)j(is)f
 (enabled)g(\(see)h(Section)g(4.3)g([The)150 4902 y(Set)i(Builtin],)j
@@ -5190,7 +5524,7 @@ b Fs(;)44 b(do)j Fj(consequent-commands)11 b Fs(;)42
 b(done)630 434 y Ft(Execute)g Fq(consequen)m(t-commands)k
 Ft(as)41 b(long)h(as)f Fq(test-commands)46 b Ft(has)41
 b(an)g(exit)h(status)630 543 y(whic)m(h)c(is)h(not)g(zero.)67
-b(The)38 b(return)f(status)j(is)e(the)h(exit)h(status)f(of)g(the)g
+b(The)38 b(return)g(status)h(is)f(the)h(exit)h(status)f(of)g(the)g
 (last)g(command)630 653 y(executed)31 b(in)f Fq(consequen)m(t-commands)
 p Ft(,)i(or)e(zero)h(if)g(none)f(w)m(as)h(executed.)150
 813 y Fs(while)240 b Ft(The)30 b(syn)m(tax)h(of)f(the)h
@@ -5321,9 +5655,9 @@ b(The)630 4573 y(set)41 b(of)f(expanded)f(w)m(ords)g(is)i(prin)m(ted)e
 (on)h(the)g(standard)f(error)h(output)g(stream,)j(eac)m(h)630
 4682 y(preceded)30 b(b)m(y)g(a)h(n)m(um)m(b)s(er.)40
 b(If)29 b(the)i(`)p Fs(in)f Fj(words)11 b Ft(')29 b(is)h(omitted,)i
-(the)e(p)s(ositional)i(parameters)630 4792 y(are)24 b(prin)m(ted,)g(as)
-g(if)f(`)p Fs(in)30 b("$@")p Ft(')23 b(had)f(b)s(een)h(sp)s(ecifed.)38
-b(The)23 b Fs(PS3)f Ft(prompt)h(is)g(then)g(displa)m(y)m(ed)630
+(the)e(p)s(ositional)i(parameters)630 4792 y(are)22 b(prin)m(ted,)h(as)
+f(if)f(`)p Fs(in)30 b("$@")p Ft(')21 b(had)g(b)s(een)f(sp)s(eci\014ed.)
+37 b(The)21 b Fs(PS3)g Ft(prompt)g(is)g(then)g(displa)m(y)m(ed)630
 4902 y(and)38 b(a)h(line)g(is)f(read)h(from)f(the)h(standard)e(input.)
 65 b(If)38 b(the)h(line)g(consists)g(of)f(a)h(n)m(um)m(b)s(er)630
 5011 y(corresp)s(onding)33 b(to)i(one)f(of)g(the)g(displa)m(y)m(ed)h(w)
@@ -5380,7 +5714,7 @@ Fs(==)p Ft(')f(and)g(`)p Fs(!=)p Ft(')g(op)s(erators)h(are)g(used,)g
 (the)g(string)f(to)i(the)e(righ)m(t)h(of)g(the)g(op)s(erator)630
 3563 y(is)31 b(considered)g(a)h(pattern)f(and)g(matc)m(hed)h(according)
 g(to)g(the)g(rules)f(describ)s(ed)f(b)s(elo)m(w)h(in)630
-3673 y(Section)37 b(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)j(page)c(23.)
+3673 y(Section)37 b(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)j(page)c(24.)
 59 b(If)36 b(the)g(shell)g(option)h Fs(nocasematch)630
 3782 y Ft(\(see)27 b(the)e(description)h(of)g Fs(shopt)e
 Ft(in)h(Section)i(4.2)f([Bash)g(Builtins],)i(page)e(41\))h(is)f
@@ -5451,7 +5785,7 @@ b(example,)150 3068 y(the)f(output)f(of)g(all)h(the)g(commands)f(in)g
 3545 y Ft(Placing)30 b(a)f(list)g(of)g(commands)f(b)s(et)m(w)m(een)i
 (paren)m(theses)e(causes)i(a)f(subshell)e(en)m(vironmen)m(t)630
 3654 y(to)k(b)s(e)e(created)j(\(see)f(Section)g(3.7.3)h([Command)d
-(Execution)i(En)m(vironmen)m(t],)g(page)f(29\),)630 3764
+(Execution)i(En)m(vironmen)m(t],)g(page)f(30\),)630 3764
 y(and)d(eac)m(h)i(of)e(the)h(commands)f(in)g Fq(list)j
 Ft(to)f(b)s(e)e(executed)h(in)f(that)h(subshell.)39 b(Since)28
 b(the)f Fq(list)630 3873 y Ft(is)i(executed)g(in)f(a)h(subshell,)g(v)-5
@@ -5795,12 +6129,12 @@ Ft(Brace)21 b(expansion)g(is)g(a)g(mec)m(hanism)g(b)m(y)g(whic)m(h)f
 (arbitrary)h(strings)f(ma)m(y)i(b)s(e)e(generated.)38
 b(This)20 b(mec)m(h-)150 4291 y(anism)35 b(is)h(similar)f(to)h
 Fq(\014lename)g(expansion)f Ft(\(see)i(Section)f(3.5.8)h([Filename)g
-(Expansion],)f(page)g(23\),)150 4401 y(but)31 b(the)h(\014le)g(names)f
-(generated)i(need)f(not)g(exist.)45 b(P)m(atterns)33
-b(to)f(b)s(e)f(brace)h(expanded)f(tak)m(e)i(the)f(form)150
-4511 y(of)26 b(an)f(optional)h Fq(pream)m(ble)p Ft(,)h(follo)m(w)m(ed)g
-(b)m(y)f(either)g(a)f(series)h(of)g(comma-separated)h(strings)e(or)g(a)
-h(sequnce)150 4620 y(expression)36 b(b)s(et)m(w)m(een)g(a)h(pair)e(of)i
+(Expansion],)f(page)g(23\),)150 4401 y(but)24 b(the)i(\014le)f(names)g
+(generated)h(need)f(not)g(exist.)40 b(P)m(atterns)26
+b(to)g(b)s(e)e(brace)i(expanded)e(tak)m(e)j(the)e(form)g(of)150
+4511 y(an)30 b(optional)h Fq(pream)m(ble)p Ft(,)g(follo)m(w)m(ed)g(b)m
+(y)f(either)g(a)h(series)f(of)g(comma-separated)i(strings)d(or)h(a)h
+(seqeunce)150 4620 y(expression)36 b(b)s(et)m(w)m(een)g(a)h(pair)e(of)i
 (braces,)g(follo)m(w)m(ed)h(b)m(y)e(an)g(optional)h Fq(p)s(ostscript)p
 Ft(.)57 b(The)36 b(pream)m(ble)g(is)150 4730 y(pre\014xed)28
 b(to)h(eac)m(h)h(string)f(con)m(tained)h(within)e(the)h(braces,)g(and)g
@@ -5985,993 +6319,997 @@ Fq(w)m(ord)j Ft(is)d(assigned)g(to)h Fq(parameter)p Ft(.)630
 518 y(The)c(v)-5 b(alue)32 b(of)f Fq(parameter)38 b Ft(is)31
 b(then)g(substituted.)42 b(P)m(ositional)33 b(parameters)e(and)f(sp)s
 (ecial)630 628 y(parameters)h(ma)m(y)g(not)f(b)s(e)g(assigned)h(to)g
-(in)f(this)g(w)m(a)m(y)-8 b(.)150 805 y Fs(${)p Fj(parameter)11
-b Fs(:?)p Fj(word)g Fs(})630 914 y Ft(If)26 b Fq(parameter)33
+(in)f(this)g(w)m(a)m(y)-8 b(.)150 788 y Fs(${)p Fj(parameter)11
+b Fs(:?)p Fj(word)g Fs(})630 897 y Ft(If)26 b Fq(parameter)33
 b Ft(is)26 b(n)m(ull)g(or)g(unset,)h(the)f(expansion)g(of)g
 Fq(w)m(ord)k Ft(\(or)c(a)h(message)g(to)g(that)f(e\013ect)630
-1024 y(if)i Fq(w)m(ord)j Ft(is)d(not)g(presen)m(t\))h(is)f(written)g
+1007 y(if)i Fq(w)m(ord)j Ft(is)d(not)g(presen)m(t\))h(is)f(written)g
 (to)h(the)f(standard)f(error)h(and)f(the)h(shell,)h(if)f(it)h(is)f(not)
-630 1133 y(in)m(teractiv)m(e,)33 b(exits.)42 b(Otherwise,)30
+630 1117 y(in)m(teractiv)m(e,)33 b(exits.)42 b(Otherwise,)30
 b(the)h(v)-5 b(alue)31 b(of)f Fq(parameter)38 b Ft(is)30
-b(substituted.)150 1310 y Fs(${)p Fj(parameter)11 b Fs(:+)p
-Fj(word)g Fs(})630 1420 y Ft(If)35 b Fq(parameter)42
+b(substituted.)150 1277 y Fs(${)p Fj(parameter)11 b Fs(:+)p
+Fj(word)g Fs(})630 1386 y Ft(If)35 b Fq(parameter)42
 b Ft(is)36 b(n)m(ull)f(or)h(unset,)g(nothing)g(is)f(substituted,)i
-(otherwise)e(the)h(expansion)630 1530 y(of)31 b Fq(w)m(ord)i
-Ft(is)e(substituted.)150 1707 y Fs(${)p Fj(parameter)11
-b Fs(:)p Fj(offset)g Fs(})150 1816 y(${)p Fj(parameter)g
+(otherwise)e(the)h(expansion)630 1496 y(of)31 b Fq(w)m(ord)i
+Ft(is)e(substituted.)150 1656 y Fs(${)p Fj(parameter)11
+b Fs(:)p Fj(offset)g Fs(})150 1766 y(${)p Fj(parameter)g
 Fs(:)p Fj(offset)g Fs(:)p Fj(le)o(ngt)o(h)g Fs(})630
-1926 y Ft(Expands)44 b(to)i(up)e(to)i Fq(length)g Ft(c)m(haracters)h
+1875 y Ft(Expands)44 b(to)i(up)e(to)i Fq(length)g Ft(c)m(haracters)h
 (of)e Fq(parameter)53 b Ft(starting)46 b(at)g(the)f(c)m(haracter)630
-2035 y(sp)s(eci\014ed)30 b(b)m(y)h Fq(o\013set)p Ft(.)42
+1985 y(sp)s(eci\014ed)30 b(b)m(y)h Fq(o\013set)p Ft(.)42
 b(If)31 b Fq(length)g Ft(is)g(omitted,)h(expands)e(to)h(the)g
-(substring)f(of)g Fq(parameter)630 2145 y Ft(starting)38
+(substring)f(of)g Fq(parameter)630 2094 y Ft(starting)38
 b(at)g(the)f(c)m(haracter)i(sp)s(eci\014ed)e(b)m(y)g
 Fq(o\013set)p Ft(.)62 b Fq(length)38 b Ft(and)f Fq(o\013set)j
-Ft(are)e(arithmetic)630 2255 y(expressions)30 b(\(see)i(Section)g(6.5)g
+Ft(are)e(arithmetic)630 2204 y(expressions)30 b(\(see)i(Section)g(6.5)g
 ([Shell)f(Arithmetic],)h(page)g(74\).)43 b(This)30 b(is)h(referred)f
-(to)i(as)630 2364 y(Substring)d(Expansion.)630 2508 y
+(to)i(as)630 2314 y(Substring)d(Expansion.)630 2449 y
 Fq(length)j Ft(m)m(ust)f(ev)-5 b(aluate)33 b(to)f(a)g(n)m(um)m(b)s(er)e
 (greater)i(than)f(or)g(equal)h(to)g(zero.)45 b(If)30
-b Fq(o\013set)35 b Ft(ev)-5 b(al-)630 2617 y(uates)36
+b Fq(o\013set)35 b Ft(ev)-5 b(al-)630 2558 y(uates)36
 b(to)h(a)f(n)m(um)m(b)s(er)e(less)i(than)f(zero,)j(the)e(v)-5
 b(alue)36 b(is)g(used)f(as)g(an)h(o\013set)h(from)e(the)h(end)630
-2727 y(of)i(the)f(v)-5 b(alue)38 b(of)g Fq(parameter)p
+2668 y(of)i(the)f(v)-5 b(alue)38 b(of)g Fq(parameter)p
 Ft(.)62 b(If)37 b Fq(parameter)45 b Ft(is)37 b(`)p Fs(@)p
 Ft(',)j(the)d(result)h(is)f Fq(length)h Ft(p)s(ositional)630
-2836 y(parameters)d(b)s(eginning)e(at)i Fq(o\013set)p
+2777 y(parameters)d(b)s(eginning)e(at)i Fq(o\013set)p
 Ft(.)54 b(If)34 b Fq(parameter)41 b Ft(is)34 b(an)h(arra)m(y)f(name)h
-(indexed)f(b)m(y)g(`)p Fs(@)p Ft(')630 2946 y(or)f(`)p
+(indexed)f(b)m(y)g(`)p Fs(@)p Ft(')630 2887 y(or)f(`)p
 Fs(*)p Ft(',)g(the)g(result)g(is)g(the)g Fq(length)g
 Ft(mem)m(b)s(ers)f(of)h(the)g(arra)m(y)g(b)s(eginning)f(with)g
-Fs(${)p Fj(param-)630 3055 y(eter)11 b Fs([)p Fj(offset)g
+Fs(${)p Fj(param-)630 2996 y(eter)11 b Fs([)p Fj(offset)g
 Fs(]})p Ft(.)65 b(A)40 b(negativ)m(e)j Fq(o\013set)g
 Ft(is)d(tak)m(en)h(relativ)m(e)h(to)f(one)g(greater)g(than)f(the)630
-3165 y(maxim)m(um)27 b(index)g(of)g(the)h(sp)s(eci\014ed)e(arra)m(y)-8
-b(.)41 b(Note)28 b(that)g(a)g(negativ)m(e)h(o\013set)f(m)m(ust)f(b)s(e)
-g(sep-)630 3275 y(arated)d(from)e(the)i(colon)g(b)m(y)f(at)h(least)g
-(one)g(space)f(to)h(a)m(v)m(oid)h(b)s(eing)d(confused)h(with)g(the)g(`)
-p Fs(:-)p Ft(')630 3384 y(expansion.)61 b(Substring)35
-b(indexing)i(is)g(zero-based)h(unless)e(the)i(p)s(ositional)g
-(parameters)630 3494 y(are)31 b(used,)f(in)g(whic)m(h)g(case)h(the)g
-(indexing)f(starts)h(at)g(1.)150 3671 y Fs(${!)p Fj(prefix)11
-b Fs(*})150 3780 y(${!)p Fj(prefix)g Fs(@})630 3890 y
-Ft(Expands)34 b(to)j(the)f(names)g(of)g(v)-5 b(ariables)37
-b(whose)e(names)h(b)s(egin)f(with)h Fq(pre\014x)p Ft(,)g(separated)630
-4000 y(b)m(y)30 b(the)h(\014rst)e(c)m(haracter)j(of)f(the)g
-Fs(IFS)e Ft(sp)s(ecial)i(v)-5 b(ariable.)150 4177 y Fs(${!)p
-Fj(name)11 b Fs([@]})150 4286 y(${!)p Fj(name)g Fs([*]})630
-4396 y Ft(If)26 b Fq(name)32 b Ft(is)27 b(an)f(arra)m(y)h(v)-5
-b(ariable,)29 b(expands)d(to)h(the)g(list)g(of)g(arra)m(y)g(indices)g
-(\(k)m(eys\))h(assigned)630 4505 y(in)c Fq(name)p Ft(.)39
-b(If)24 b Fq(name)30 b Ft(is)24 b(not)h(an)f(arra)m(y)-8
-b(,)27 b(expands)c(to)j(0)f(if)f Fq(name)30 b Ft(is)24
-b(set)h(and)f(n)m(ull)g(otherwise.)630 4615 y(When)39
-b(`)p Fs(@)p Ft(')h(is)f(used)g(and)f(the)i(expansion)f(app)s(ears)g
-(within)f(double)h(quotes,)k(eac)m(h)d(k)m(ey)630 4725
-y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 4902
-y Fs(${#)p Fj(parameter)11 b Fs(})630 5011 y Ft(The)40
+3106 y(maxim)m(um)h(index)f(of)i(the)f(sp)s(eci\014ed)f(arra)m(y)-8
+b(.)73 b(Note)43 b(that)e(a)h(negativ)m(e)h(o\013set)f(m)m(ust)f(b)s(e)
+630 3216 y(separated)27 b(from)e(the)i(colon)g(b)m(y)f(at)h(least)g
+(one)f(space)h(to)g(a)m(v)m(oid)h(b)s(eing)d(confused)h(with)g(the)630
+3325 y(`)p Fs(:-)p Ft(')31 b(expansion.)43 b(Substring)29
+b(indexing)i(is)g(zero-based)h(unless)e(the)i(p)s(ositional)g(parame-)
+630 3435 y(ters)j(are)f(used,)h(in)f(whic)m(h)g(case)i(the)e(indexing)h
+(starts)f(at)i(1)e(b)m(y)h(default.)53 b(If)33 b Fq(o\013set)38
+b Ft(is)c(0,)630 3544 y(and)c(the)g(p)s(ositional)i(parameters)e(are)h
+(used,)f Fs($@)g Ft(is)g(pre\014xed)f(to)i(the)g(list.)150
+3705 y Fs(${!)p Fj(prefix)11 b Fs(*})150 3814 y(${!)p
+Fj(prefix)g Fs(@})630 3924 y Ft(Expands)24 b(to)h(the)g(names)g(of)g(v)
+-5 b(ariables)26 b(whose)f(names)f(b)s(egin)h(with)f
+Fq(pre\014x)p Ft(,)i(separated)f(b)m(y)630 4033 y(the)k(\014rst)f(c)m
+(haracter)j(of)e(the)g Fs(IFS)f Ft(sp)s(ecial)i(v)-5
+b(ariable.)41 b(When)29 b(`)p Fs(@)p Ft(')g(is)g(used)f(and)h(the)g
+(expan-)630 4143 y(sion)35 b(app)s(ears)g(within)f(double)h(quotes,)i
+(eac)m(h)f(v)-5 b(ariable)36 b(name)f(expands)g(to)g(a)h(separate)630
+4253 y(w)m(ord.)150 4413 y Fs(${!)p Fj(name)11 b Fs([@]})150
+4522 y(${!)p Fj(name)g Fs([*]})630 4632 y Ft(If)26 b
+Fq(name)32 b Ft(is)27 b(an)f(arra)m(y)h(v)-5 b(ariable,)29
+b(expands)d(to)h(the)g(list)g(of)g(arra)m(y)g(indices)g(\(k)m(eys\))h
+(assigned)630 4741 y(in)c Fq(name)p Ft(.)39 b(If)24 b
+Fq(name)30 b Ft(is)24 b(not)h(an)f(arra)m(y)-8 b(,)27
+b(expands)c(to)j(0)f(if)f Fq(name)30 b Ft(is)24 b(set)h(and)f(n)m(ull)g
+(otherwise.)630 4851 y(When)39 b(`)p Fs(@)p Ft(')h(is)f(used)g(and)f
+(the)i(expansion)f(app)s(ears)g(within)f(double)h(quotes,)k(eac)m(h)d
+(k)m(ey)630 4961 y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150
+5121 y Fs(${#)p Fj(parameter)11 b Fs(})630 5230 y Ft(The)40
 b(length)g(in)g(c)m(haracters)i(of)e(the)h(expanded)e(v)-5
 b(alue)41 b(of)f Fq(parameter)47 b Ft(is)40 b(substituted.)630
-5121 y(If)i Fq(parameter)50 b Ft(is)43 b(`)p Fs(*)p Ft(')g(or)g(`)p
+5340 y(If)i Fq(parameter)50 b Ft(is)43 b(`)p Fs(*)p Ft(')g(or)g(`)p
 Fs(@)p Ft(',)k(the)c(v)-5 b(alue)43 b(substituted)f(is)h(the)g(n)m(um)m
-(b)s(er)f(of)h(p)s(ositional)630 5230 y(parameters.)i(If)32
-b Fq(parameter)38 b Ft(is)32 b(an)g(arra)m(y)g(name)g(subscripted)f(b)m
-(y)g(`)p Fs(*)p Ft(')h(or)g(`)p Fs(@)p Ft(',)g(the)g(v)-5
-b(alue)630 5340 y(substituted)30 b(is)g(the)h(n)m(um)m(b)s(er)e(of)h
-(elemen)m(ts)i(in)e(the)h(arra)m(y)-8 b(.)p eop end
+(b)s(er)f(of)h(p)s(ositional)p eop end
 %%Page: 21 27
 TeXDict begin 21 26 bop 150 -116 a Ft(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(21)150 299
-y Fs(${)p Fj(parameter)11 b Fs(#)p Fj(word)g Fs(})150
-408 y(${)p Fj(parameter)g Fs(##)p Fj(word)g Fs(})630
-518 y Ft(The)31 b Fq(w)m(ord)k Ft(is)d(expanded)f(to)i(pro)s(duce)e(a)h
-(pattern)g(just)f(as)i(in)e(\014lename)h(expansion)g(\(see)630
-628 y(Section)k(3.5.8)h([Filename)g(Expansion],)g(page)f(23\).)56
-b(If)35 b(the)h(pattern)f(matc)m(hes)i(the)e(b)s(e-)630
-737 y(ginning)28 b(of)g(the)h(expanded)e(v)-5 b(alue)29
-b(of)f Fq(parameter)p Ft(,)h(then)f(the)g(result)g(of)h(the)f
-(expansion)g(is)630 847 y(the)36 b(expanded)f(v)-5 b(alue)36
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(21)630 299
+y(parameters.)45 b(If)32 b Fq(parameter)38 b Ft(is)32
+b(an)g(arra)m(y)g(name)g(subscripted)f(b)m(y)g(`)p Fs(*)p
+Ft(')h(or)g(`)p Fs(@)p Ft(',)g(the)g(v)-5 b(alue)630
+408 y(substituted)30 b(is)g(the)h(n)m(um)m(b)s(er)e(of)h(elemen)m(ts)i
+(in)e(the)h(arra)m(y)-8 b(.)150 580 y Fs(${)p Fj(parameter)11
+b Fs(#)p Fj(word)g Fs(})150 690 y(${)p Fj(parameter)g
+Fs(##)p Fj(word)g Fs(})630 800 y Ft(The)31 b Fq(w)m(ord)k
+Ft(is)d(expanded)f(to)i(pro)s(duce)e(a)h(pattern)g(just)f(as)i(in)e
+(\014lename)h(expansion)g(\(see)630 909 y(Section)k(3.5.8)h([Filename)g
+(Expansion],)g(page)f(23\).)56 b(If)35 b(the)h(pattern)f(matc)m(hes)i
+(the)e(b)s(e-)630 1019 y(ginning)28 b(of)g(the)h(expanded)e(v)-5
+b(alue)29 b(of)f Fq(parameter)p Ft(,)h(then)f(the)g(result)g(of)h(the)f
+(expansion)g(is)630 1128 y(the)36 b(expanded)f(v)-5 b(alue)36
 b(of)g Fq(parameter)43 b Ft(with)35 b(the)h(shortest)g(matc)m(hing)h
-(pattern)f(\(the)g(`)p Fs(#)p Ft(')630 956 y(case\))26
+(pattern)f(\(the)g(`)p Fs(#)p Ft(')630 1238 y(case\))26
 b(or)f(the)g(longest)g(matc)m(hing)h(pattern)f(\(the)g(`)p
 Fs(##)p Ft(')g(case\))h(deleted.)39 b(If)24 b Fq(parameter)32
-b Ft(is)25 b(`)p Fs(@)p Ft(')630 1066 y(or)j(`)p Fs(*)p
+b Ft(is)25 b(`)p Fs(@)p Ft(')630 1347 y(or)j(`)p Fs(*)p
 Ft(',)i(the)e(pattern)h(remo)m(v)-5 b(al)29 b(op)s(eration)g(is)f
 (applied)h(to)g(eac)m(h)g(p)s(ositional)g(parameter)g(in)630
-1176 y(turn,)i(and)g(the)h(expansion)g(is)g(the)g(resultan)m(t)g(list.)
+1457 y(turn,)i(and)g(the)h(expansion)g(is)g(the)g(resultan)m(t)g(list.)
 45 b(If)32 b Fq(parameter)38 b Ft(is)32 b(an)g(arra)m(y)g(v)-5
-b(ariable)630 1285 y(subscripted)39 b(with)g(`)p Fs(@)p
+b(ariable)630 1567 y(subscripted)39 b(with)g(`)p Fs(@)p
 Ft(')h(or)g(`)p Fs(*)p Ft(',)j(the)d(pattern)h(remo)m(v)-5
 b(al)41 b(op)s(eration)f(is)g(applied)g(to)h(eac)m(h)630
-1395 y(mem)m(b)s(er)30 b(of)g(the)h(arra)m(y)g(in)f(turn,)f(and)h(the)h
-(expansion)f(is)g(the)h(resultan)m(t)g(list.)150 1553
+1676 y(mem)m(b)s(er)30 b(of)g(the)h(arra)m(y)g(in)f(turn,)f(and)h(the)h
+(expansion)f(is)g(the)h(resultan)m(t)g(list.)150 1848
 y Fs(${)p Fj(parameter)11 b Fs(\045)p Fj(word)g Fs(})150
-1662 y(${)p Fj(parameter)g Fs(\045\045)p Fj(word)g Fs(})630
-1772 y Ft(The)35 b Fq(w)m(ord)k Ft(is)c(expanded)g(to)h(pro)s(duce)e(a)
+1958 y(${)p Fj(parameter)g Fs(\045\045)p Fj(word)g Fs(})630
+2067 y Ft(The)35 b Fq(w)m(ord)k Ft(is)c(expanded)g(to)h(pro)s(duce)e(a)
 i(pattern)f(just)g(as)h(in)f(\014lename)h(expansion.)55
-b(If)630 1881 y(the)43 b(pattern)g(matc)m(hes)h(a)g(trailing)g(p)s
+b(If)630 2177 y(the)43 b(pattern)g(matc)m(hes)h(a)g(trailing)g(p)s
 (ortion)e(of)h(the)g(expanded)g(v)-5 b(alue)43 b(of)g
-Fq(parameter)p Ft(,)630 1991 y(then)c(the)g(result)g(of)h(the)f
+Fq(parameter)p Ft(,)630 2286 y(then)c(the)g(result)g(of)h(the)f
 (expansion)g(is)h(the)f(v)-5 b(alue)40 b(of)f Fq(parameter)46
-b Ft(with)39 b(the)h(shortest)630 2100 y(matc)m(hing)31
+b Ft(with)39 b(the)h(shortest)630 2396 y(matc)m(hing)31
 b(pattern)e(\(the)h(`)p Fs(\045)p Ft(')g(case\))h(or)e(the)h(longest)h
 (matc)m(hing)f(pattern)g(\(the)g(`)p Fs(\045\045)p Ft(')g(case\))630
-2210 y(deleted.)49 b(If)32 b Fq(parameter)40 b Ft(is)33
+2506 y(deleted.)49 b(If)32 b Fq(parameter)40 b Ft(is)33
 b(`)p Fs(@)p Ft(')g(or)g(`)p Fs(*)p Ft(',)h(the)f(pattern)g(remo)m(v)-5
-b(al)34 b(op)s(eration)g(is)f(applied)f(to)630 2320 y(eac)m(h)38
+b(al)34 b(op)s(eration)g(is)f(applied)f(to)630 2615 y(eac)m(h)38
 b(p)s(ositional)g(parameter)g(in)f(turn,)h(and)e(the)h(expansion)g(is)h
-(the)f(resultan)m(t)h(list.)61 b(If)630 2429 y Fq(parameter)38
+(the)f(resultan)m(t)h(list.)61 b(If)630 2725 y Fq(parameter)38
 b Ft(is)32 b(an)f(arra)m(y)h(v)-5 b(ariable)32 b(subscripted)e(with)h
 (`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)g(the)f(pattern)h(remo)m(v)-5
-b(al)630 2539 y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m
+b(al)630 2834 y(op)s(eration)30 b(is)g(applied)f(to)i(eac)m(h)g(mem)m
 (b)s(er)e(of)h(the)g(arra)m(y)g(in)f(turn,)g(and)g(the)h(expansion)g
-(is)630 2648 y(the)h(resultan)m(t)g(list.)150 2806 y
+(is)630 2944 y(the)h(resultan)m(t)g(list.)150 3116 y
 Fs(${)p Fj(parameter)11 b Fs(/)p Fj(pattern)g Fs(/)p
-Fj(s)o(tri)o(ng)f Fs(})630 2916 y Ft(The)37 b Fq(pattern)g
+Fj(s)o(tri)o(ng)f Fs(})630 3225 y Ft(The)37 b Fq(pattern)g
 Ft(is)g(expanded)g(to)h(pro)s(duce)e(a)h(pattern)g(just)g(as)h(in)e
-(\014lename)i(expansion.)630 3025 y Fq(P)m(arameter)46
+(\014lename)i(expansion.)630 3335 y Fq(P)m(arameter)46
 b Ft(is)38 b(expanded)f(and)g(the)i(longest)g(matc)m(h)g(of)f
 Fq(pattern)g Ft(against)h(its)f(v)-5 b(alue)39 b(is)630
-3135 y(replaced)34 b(with)e Fq(string)p Ft(.)49 b(If)33
+3445 y(replaced)34 b(with)e Fq(string)p Ft(.)49 b(If)33
 b Fq(pattern)g Ft(b)s(egins)g(with)f(`)p Fs(/)p Ft(',)j(all)f(matc)m
-(hes)g(of)f Fq(pattern)g Ft(are)h(re-)630 3244 y(placed)28
+(hes)g(of)f Fq(pattern)g Ft(are)h(re-)630 3554 y(placed)28
 b(with)f Fq(string)p Ft(.)40 b(Normally)28 b(only)f(the)h(\014rst)e
 (matc)m(h)j(is)e(replaced.)40 b(If)27 b Fq(pattern)g
-Ft(b)s(egins)630 3354 y(with)34 b(`)p Fs(#)p Ft(',)h(it)g(m)m(ust)f
+Ft(b)s(egins)630 3664 y(with)34 b(`)p Fs(#)p Ft(',)h(it)g(m)m(ust)f
 (matc)m(h)h(at)f(the)h(b)s(eginning)e(of)h(the)g(expanded)f(v)-5
-b(alue)35 b(of)f Fq(parameter)p Ft(.)630 3464 y(If)g
+b(alue)35 b(of)f Fq(parameter)p Ft(.)630 3773 y(If)g
 Fq(pattern)g Ft(b)s(egins)g(with)g(`)p Fs(\045)p Ft(',)h(it)g(m)m(ust)f
 (matc)m(h)h(at)g(the)f(end)g(of)g(the)h(expanded)e(v)-5
-b(alue)35 b(of)630 3573 y Fq(parameter)p Ft(.)41 b(If)29
+b(alue)35 b(of)630 3883 y Fq(parameter)p Ft(.)41 b(If)29
 b Fq(string)37 b Ft(is)29 b(n)m(ull,)h(matc)m(hes)h(of)e
 Fq(pattern)h Ft(are)g(deleted)g(and)f(the)g Fs(/)g Ft(follo)m(wing)630
-3683 y Fq(pattern)34 b Ft(ma)m(y)g(b)s(e)f(omitted.)51
+3993 y Fq(pattern)34 b Ft(ma)m(y)g(b)s(e)f(omitted.)51
 b(If)33 b Fq(parameter)41 b Ft(is)33 b(`)p Fs(@)p Ft(')h(or)g(`)p
 Fs(*)p Ft(',)g(the)g(substitution)f(op)s(eration)630
-3792 y(is)38 b(applied)g(to)g(eac)m(h)h(p)s(ositional)g(parameter)f(in)
+4102 y(is)38 b(applied)g(to)g(eac)m(h)h(p)s(ositional)g(parameter)f(in)
 g(turn,)h(and)e(the)h(expansion)g(is)g(the)g(re-)630
-3902 y(sultan)m(t)f(list.)59 b(If)36 b Fq(parameter)43
+4212 y(sultan)m(t)f(list.)59 b(If)36 b Fq(parameter)43
 b Ft(is)36 b(an)g(arra)m(y)h(v)-5 b(ariable)37 b(subscripted)e(with)h
-(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)h(the)630 4012
+(`)p Fs(@)p Ft(')g(or)h(`)p Fs(*)p Ft(',)h(the)630 4321
 y(substitution)30 b(op)s(eration)h(is)f(applied)g(to)h(eac)m(h)g(mem)m
 (b)s(er)f(of)g(the)h(arra)m(y)g(in)f(turn,)f(and)h(the)630
-4121 y(expansion)g(is)h(the)f(resultan)m(t)h(list.)150
-4343 y Fk(3.5.4)63 b(Command)41 b(Substitution)275 4586
+4431 y(expansion)g(is)h(the)f(resultan)m(t)h(list.)150
+4680 y Fk(3.5.4)63 b(Command)41 b(Substitution)275 4936
 y Ft(Command)29 b(substitution)i(allo)m(ws)h(the)f(output)g(of)g(a)g
 (command)g(to)g(replace)h(the)f(command)g(itself.)150
-4696 y(Command)e(substitution)h(o)s(ccurs)h(when)e(a)i(command)f(is)g
-(enclosed)h(as)g(follo)m(ws:)390 4829 y Fs($\()p Fj(command)11
-b Fs(\))150 4963 y Ft(or)390 5097 y Fs(`)p Fj(command)g
-Fs(`)150 5230 y Ft(Bash)45 b(p)s(erforms)f(the)h(expansion)f(b)m(y)h
-(executing)i Fq(command)h Ft(and)c(replacing)i(the)f(command)g(sub-)150
-5340 y(stitution)c(with)f(the)g(standard)g(output)g(of)g(the)g
-(command,)j(with)d(an)m(y)h(trailing)g(newlines)f(deleted.)p
-eop end
+5046 y(Command)e(substitution)h(o)s(ccurs)h(when)e(a)i(command)f(is)g
+(enclosed)h(as)g(follo)m(ws:)390 5193 y Fs($\()p Fj(command)11
+b Fs(\))150 5340 y Ft(or)p eop end
 %%Page: 22 28
 TeXDict begin 22 27 bop 150 -116 a Ft(22)2572 b(Bash)31
-b(Reference)g(Man)m(ual)150 299 y(Em)m(b)s(edded)f(newlines)h(are)h
-(not)f(deleted,)i(but)e(they)g(ma)m(y)h(b)s(e)f(remo)m(v)m(ed)i(during)
-d(w)m(ord)h(splitting.)44 b(The)150 408 y(command)21
-b(substitution)g Fs($\(cat)29 b Fj(file)11 b Fs(\))20
-b Ft(can)i(b)s(e)f(replaced)g(b)m(y)h(the)g(equiv)-5
-b(alen)m(t)22 b(but)f(faster)h Fs($\(<)30 b Fj(file)11
-b Fs(\))p Ft(.)275 547 y(When)33 b(the)i(old-st)m(yle)h(bac)m(kquote)f
-(form)f(of)g(substitution)g(is)g(used,)h(bac)m(kslash)f(retains)h(its)f
-(literal)150 656 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e
-(`)p Fs($)p Ft(',)j(`)p Fs(`)p Ft(',)f(or)e(`)p Fs(\\)p
-Ft('.)64 b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g(b)m(y)g
-(a)150 766 y(bac)m(kslash)j(terminates)g(the)f(command)g(substitution.)
-69 b(When)40 b(using)g(the)g Fs($\()p Fj(command)11 b
-Fs(\))37 b Ft(form,)42 b(all)150 875 y(c)m(haracters)32
-b(b)s(et)m(w)m(een)f(the)f(paren)m(theses)h(mak)m(e)g(up)f(the)g
-(command;)h(none)f(are)h(treated)g(sp)s(ecially)-8 b(.)275
-1014 y(Command)22 b(substitutions)g(ma)m(y)i(b)s(e)e(nested.)39
+b(Reference)g(Man)m(ual)390 299 y Fs(`)p Fj(command)11
+b Fs(`)150 450 y Ft(Bash)45 b(p)s(erforms)f(the)h(expansion)f(b)m(y)h
+(executing)i Fq(command)h Ft(and)c(replacing)i(the)f(command)g(sub-)150
+560 y(stitution)c(with)f(the)g(standard)g(output)g(of)g(the)g(command,)
+j(with)d(an)m(y)h(trailing)g(newlines)f(deleted.)150
+669 y(Em)m(b)s(edded)30 b(newlines)h(are)h(not)f(deleted,)i(but)e(they)
+g(ma)m(y)h(b)s(e)f(remo)m(v)m(ed)i(during)d(w)m(ord)h(splitting.)44
+b(The)150 779 y(command)21 b(substitution)g Fs($\(cat)29
+b Fj(file)11 b Fs(\))20 b Ft(can)i(b)s(e)f(replaced)g(b)m(y)h(the)g
+(equiv)-5 b(alen)m(t)22 b(but)f(faster)h Fs($\(<)30 b
+Fj(file)11 b Fs(\))p Ft(.)275 930 y(When)33 b(the)i(old-st)m(yle)h(bac)
+m(kquote)f(form)f(of)g(substitution)g(is)g(used,)h(bac)m(kslash)f
+(retains)h(its)f(literal)150 1039 y(meaning)k(except)h(when)e(follo)m
+(w)m(ed)j(b)m(y)e(`)p Fs($)p Ft(',)j(`)p Fs(`)p Ft(',)f(or)e(`)p
+Fs(\\)p Ft('.)64 b(The)38 b(\014rst)f(bac)m(kquote)j(not)e(preceded)g
+(b)m(y)g(a)150 1149 y(bac)m(kslash)j(terminates)g(the)f(command)g
+(substitution.)69 b(When)40 b(using)g(the)g Fs($\()p
+Fj(command)11 b Fs(\))37 b Ft(form,)42 b(all)150 1259
+y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)f(paren)m(theses)h(mak)m(e)
+g(up)f(the)g(command;)h(none)f(are)h(treated)g(sp)s(ecially)-8
+b(.)275 1410 y(Command)22 b(substitutions)g(ma)m(y)i(b)s(e)e(nested.)39
 b(T)-8 b(o)23 b(nest)g(when)f(using)h(the)g(bac)m(kquoted)h(form,)g
-(escap)s(e)150 1123 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m
-(kslashes.)275 1262 y(If)e(the)i(substitution)e(app)s(ears)h(within)g
+(escap)s(e)150 1519 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m
+(kslashes.)275 1670 y(If)e(the)i(substitution)e(app)s(ears)h(within)g
 (double)f(quotes,)i(w)m(ord)f(splitting)h(and)f(\014lename)g(expansion)
-150 1371 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150
-1603 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)275 1851
+150 1780 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150
+2037 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)275 2298
 y Ft(Arithmetic)33 b(expansion)f(allo)m(ws)i(the)e(ev)-5
 b(aluation)34 b(of)f(an)f(arithmetic)i(expression)e(and)g(the)g
-(substi-)150 1960 y(tution)f(of)f(the)h(result.)40 b(The)30
-b(format)h(for)f(arithmetic)i(expansion)e(is:)390 2098
-y Fs($\(\()47 b Fj(expression)55 b Fs(\)\))275 2237 y
+(substi-)150 2408 y(tution)f(of)f(the)h(result.)40 b(The)30
+b(format)h(for)f(arithmetic)i(expansion)e(is:)390 2559
+y Fs($\(\()47 b Fj(expression)55 b Fs(\)\))275 2710 y
 Ft(The)33 b(expression)g(is)h(treated)g(as)g(if)g(it)g(w)m(ere)g
 (within)f(double)h(quotes,)h(but)e(a)h(double)f(quote)h(inside)150
-2346 y(the)27 b(paren)m(theses)g(is)g(not)g(treated)h(sp)s(ecially)-8
+2819 y(the)27 b(paren)m(theses)g(is)g(not)g(treated)h(sp)s(ecially)-8
 b(.)41 b(All)27 b(tok)m(ens)h(in)e(the)h(expression)g(undergo)f
-(parameter)h(ex-)150 2456 y(pansion,)h(command)f(substitution,)h(and)f
+(parameter)h(ex-)150 2929 y(pansion,)h(command)f(substitution,)h(and)f
 (quote)i(remo)m(v)-5 b(al.)41 b(Arithmetic)28 b(expansions)g(ma)m(y)g
-(b)s(e)f(nested.)275 2594 y(The)34 b(ev)-5 b(aluation)37
+(b)s(e)f(nested.)275 3080 y(The)34 b(ev)-5 b(aluation)37
 b(is)f(p)s(erformed)e(according)i(to)g(the)g(rules)f(listed)h(b)s(elo)m
-(w)g(\(see)g(Section)g(6.5)h([Shell)150 2704 y(Arithmetic],)32
+(w)g(\(see)g(Section)g(6.5)h([Shell)150 3190 y(Arithmetic],)32
 b(page)f(74\).)42 b(If)30 b(the)h(expression)f(is)g(in)m(v)-5
 b(alid,)32 b(Bash)e(prin)m(ts)g(a)h(message)g(indicating)h(failure)150
-2813 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s
-(ccurs.)150 3045 y Fk(3.5.6)63 b(Pro)s(cess)42 b(Substitution)275
-3293 y Ft(Pro)s(cess)33 b(substitution)h(is)g(supp)s(orted)e(on)h
+3299 y(to)f(the)g(standard)e(error)h(and)g(no)g(substitution)g(o)s
+(ccurs.)150 3557 y Fk(3.5.6)63 b(Pro)s(cess)42 b(Substitution)275
+3817 y Ft(Pro)s(cess)33 b(substitution)h(is)g(supp)s(orted)e(on)h
 (systems)h(that)h(supp)s(ort)d(named)h(pip)s(es)g(\()p
-Fl(fif)n(o)p Ft(s\))h(or)g(the)150 3402 y(`)p Fs(/dev/fd)p
+Fl(fif)n(o)p Ft(s\))h(or)g(the)150 3927 y(`)p Fs(/dev/fd)p
 Ft(')29 b(metho)s(d)h(of)g(naming)g(op)s(en)g(\014les.)41
-b(It)30 b(tak)m(es)i(the)f(form)f(of)390 3540 y Fs(<\()p
-Fj(list)11 b Fs(\))150 3679 y Ft(or)390 3817 y Fs(>\()p
-Fj(list)g Fs(\))150 3955 y Ft(The)23 b(pro)s(cess)g Fq(list)j
+b(It)30 b(tak)m(es)i(the)f(form)f(of)390 4078 y Fs(<\()p
+Fj(list)11 b Fs(\))150 4229 y Ft(or)390 4380 y Fs(>\()p
+Fj(list)g Fs(\))150 4531 y Ft(The)23 b(pro)s(cess)g Fq(list)j
 Ft(is)d(run)f(with)h(its)h(input)f(or)g(output)g(connected)h(to)h(a)e
 Fl(fif)n(o)g Ft(or)h(some)g(\014le)f(in)g(`)p Fs(/dev/fd)p
-Ft('.)150 4065 y(The)28 b(name)h(of)g(this)f(\014le)h(is)g(passed)f(as)
+Ft('.)150 4641 y(The)28 b(name)h(of)g(this)f(\014le)h(is)g(passed)f(as)
 h(an)f(argumen)m(t)h(to)h(the)f(curren)m(t)f(command)h(as)f(the)h
-(result)g(of)g(the)150 4174 y(expansion.)40 b(If)28 b(the)h
+(result)g(of)g(the)150 4751 y(expansion.)40 b(If)28 b(the)h
 Fs(>\()p Fj(list)11 b Fs(\))26 b Ft(form)i(is)h(used,)f(writing)h(to)g
 (the)g(\014le)f(will)h(pro)m(vide)g(input)f(for)g Fq(list)p
-Ft(.)41 b(If)28 b(the)150 4284 y Fs(<\()p Fj(list)11
+Ft(.)41 b(If)28 b(the)150 4860 y Fs(<\()p Fj(list)11
 b Fs(\))23 b Ft(form)h(is)i(used,)f(the)h(\014le)f(passed)g(as)g(an)g
 (argumen)m(t)h(should)e(b)s(e)h(read)g(to)h(obtain)g(the)f(output)g(of)
-150 4394 y Fq(list)p Ft(.)41 b(Note)31 b(that)f(no)g(space)g(ma)m(y)g
+150 4970 y Fq(list)p Ft(.)41 b(Note)31 b(that)f(no)g(space)g(ma)m(y)g
 (app)s(ear)f(b)s(et)m(w)m(een)h(the)g Fs(<)f Ft(or)h
 Fs(>)f Ft(and)g(the)h(left)g(paren)m(thesis,)h(otherwise)150
-4503 y(the)g(construct)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(as)f(a)h
-(redirection.)275 4641 y(When)36 b(a)m(v)-5 b(ailable,)40
+5079 y(the)g(construct)f(w)m(ould)g(b)s(e)g(in)m(terpreted)h(as)f(a)h
+(redirection.)275 5230 y(When)36 b(a)m(v)-5 b(ailable,)40
 b(pro)s(cess)c(substitution)h(is)f(p)s(erformed)f(sim)m(ultaneously)i
-(with)g(parameter)g(and)150 4751 y(v)-5 b(ariable)31
+(with)g(parameter)g(and)150 5340 y(v)-5 b(ariable)31
 b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.)
-150 4983 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)275
-5230 y Ft(The)35 b(shell)i(scans)f(the)g(results)g(of)g(parameter)h
-(expansion,)h(command)d(substitution,)j(and)e(arith-)150
-5340 y(metic)31 b(expansion)g(that)g(did)e(not)i(o)s(ccur)f(within)g
-(double)g(quotes)h(for)f(w)m(ord)g(splitting.)p eop end
+p eop end
 %%Page: 23 29
 TeXDict begin 23 28 bop 150 -116 a Ft(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(23)275 299
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(23)150 299
+y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)275 566 y
+Ft(The)35 b(shell)i(scans)f(the)g(results)g(of)g(parameter)h
+(expansion,)h(command)d(substitution,)j(and)e(arith-)150
+676 y(metic)31 b(expansion)g(that)g(did)e(not)i(o)s(ccur)f(within)g
+(double)g(quotes)h(for)f(w)m(ord)g(splitting.)275 834
 y(The)43 b(shell)h(treats)h(eac)m(h)h(c)m(haracter)f(of)g
 Fs($IFS)e Ft(as)h(a)g(delimiter,)49 b(and)43 b(splits)h(the)h(results)e
-(of)i(the)150 408 y(other)40 b(expansions)f(in)m(to)i(w)m(ords)e(on)h
+(of)i(the)150 943 y(other)40 b(expansions)f(in)m(to)i(w)m(ords)e(on)h
 (these)g(c)m(haracters.)70 b(If)39 b Fs(IFS)g Ft(is)h(unset,)i(or)d
-(its)h(v)-5 b(alue)40 b(is)g(exactly)150 518 y Fs
+(its)h(v)-5 b(alue)40 b(is)g(exactly)150 1053 y Fs
 (<space><tab><newline>)p Ft(,)20 b(the)25 b(default,)h(then)e(an)m(y)g
 (sequence)h(of)g Fs(IFS)e Ft(c)m(haracters)j(serv)m(es)f(to)g(delimit)
-150 628 y(w)m(ords.)38 b(If)21 b Fs(IFS)h Ft(has)g(a)h(v)-5
+150 1163 y(w)m(ords.)38 b(If)21 b Fs(IFS)h Ft(has)g(a)h(v)-5
 b(alue)23 b(other)f(than)h(the)f(default,)j(then)d(sequences)g(of)h
-(the)f(whitespace)h(c)m(haracters)150 737 y Fs(space)j
+(the)f(whitespace)h(c)m(haracters)150 1272 y Fs(space)j
 Ft(and)h Fs(tab)g Ft(are)h(ignored)g(at)h(the)f(b)s(eginning)f(and)g
 (end)g(of)h(the)g(w)m(ord,)g(as)g(long)g(as)g(the)g(whitespace)150
-847 y(c)m(haracter)34 b(is)f(in)f(the)h(v)-5 b(alue)33
+1382 y(c)m(haracter)34 b(is)f(in)f(the)h(v)-5 b(alue)33
 b(of)f Fs(IFS)g Ft(\(an)h Fs(IFS)e Ft(whitespace)j(c)m(haracter\).)49
 b(An)m(y)32 b(c)m(haracter)i(in)f Fs(IFS)e Ft(that)150
-956 y(is)f(not)h Fs(IFS)f Ft(whitespace,)h(along)g(with)f(an)m(y)h
+1491 y(is)f(not)h Fs(IFS)f Ft(whitespace,)h(along)g(with)f(an)m(y)h
 (adjacen)m(t)h Fs(IFS)d Ft(whitespace)i(c)m(haracters,)h(delimits)f(a)g
-(\014eld.)150 1066 y(A)h(sequence)h(of)f Fs(IFS)f Ft(whitespace)i(c)m
+(\014eld.)150 1601 y(A)h(sequence)h(of)f Fs(IFS)f Ft(whitespace)i(c)m
 (haracters)h(is)e(also)h(treated)g(as)g(a)f(delimiter.)47
-b(If)32 b(the)g(v)-5 b(alue)33 b(of)f Fs(IFS)150 1176
+b(If)32 b(the)g(v)-5 b(alue)33 b(of)f Fs(IFS)150 1711
 y Ft(is)e(n)m(ull,)h(no)f(w)m(ord)g(splitting)h(o)s(ccurs.)275
-1304 y(Explicit)44 b(n)m(ull)f(argumen)m(ts)g(\()p Fs("")g
+1868 y(Explicit)44 b(n)m(ull)f(argumen)m(ts)g(\()p Fs("")g
 Ft(or)h Fs('')p Ft(\))f(are)g(retained.)80 b(Unquoted)43
-b(implicit)h(n)m(ull)f(argumen)m(ts,)150 1414 y(resulting)24
+b(implicit)h(n)m(ull)f(argumen)m(ts,)150 1978 y(resulting)24
 b(from)f(the)g(expansion)g(of)h(parameters)g(that)g(ha)m(v)m(e)h(no)e
 (v)-5 b(alues,)25 b(are)f(remo)m(v)m(ed.)40 b(If)23 b(a)g(parameter)150
-1524 y(with)30 b(no)g(v)-5 b(alue)31 b(is)g(expanded)e(within)h(double)
+2088 y(with)30 b(no)g(v)-5 b(alue)31 b(is)g(expanded)e(within)h(double)
 g(quotes,)h(a)g(n)m(ull)f(argumen)m(t)h(results)f(and)g(is)g(retained.)
-275 1652 y(Note)h(that)g(if)g(no)f(expansion)g(o)s(ccurs,)g(no)h
-(splitting)g(is)f(p)s(erformed.)150 1859 y Fk(3.5.8)63
-b(Filename)41 b(Expansion)275 2098 y Ft(After)22 b(w)m(ord)g
+275 2246 y(Note)h(that)g(if)g(no)f(expansion)g(o)s(ccurs,)g(no)h
+(splitting)g(is)f(p)s(erformed.)150 2517 y Fk(3.5.8)63
+b(Filename)41 b(Expansion)275 2784 y Ft(After)22 b(w)m(ord)g
 (splitting,)j(unless)d(the)h(`)p Fs(-f)p Ft(')f(option)h(has)f(b)s(een)
 g(set)h(\(see)g(Section)h(4.3)f([The)f(Set)h(Builtin],)150
-2207 y(page)k(53\),)i(Bash)d(scans)h(eac)m(h)h(w)m(ord)e(for)g(the)h(c)
+2894 y(page)k(53\),)i(Bash)d(scans)h(eac)m(h)h(w)m(ord)e(for)g(the)h(c)
 m(haracters)g(`)p Fs(*)p Ft(',)h(`)p Fs(?)p Ft(',)g(and)e(`)p
 Fs([)p Ft('.)39 b(If)26 b(one)h(of)g(these)f(c)m(haracters)150
-2317 y(app)s(ears,)h(then)f(the)h(w)m(ord)f(is)h(regarded)g(as)g(a)g
+3003 y(app)s(ears,)h(then)f(the)h(w)m(ord)f(is)h(regarded)g(as)g(a)g
 Fq(pattern)p Ft(,)g(and)g(replaced)g(with)f(an)h(alphab)s(etically)h
-(sorted)150 2426 y(list)k(of)g(\014le)g(names)g(matc)m(hing)h(the)f
+(sorted)150 3113 y(list)k(of)g(\014le)g(names)g(matc)m(hing)h(the)f
 (pattern.)45 b(If)32 b(no)f(matc)m(hing)i(\014le)f(names)g(are)g
-(found,)f(and)h(the)g(shell)150 2536 y(option)c Fs(nullglob)e
+(found,)f(and)h(the)g(shell)150 3222 y(option)c Fs(nullglob)e
 Ft(is)i(disabled,)h(the)f(w)m(ord)g(is)g(left)g(unc)m(hanged.)40
 b(If)28 b(the)g Fs(nullglob)e Ft(option)i(is)g(set,)i(and)150
-2645 y(no)38 b(matc)m(hes)h(are)f(found,)h(the)f(w)m(ord)f(is)h(remo)m
+3332 y(no)38 b(matc)m(hes)h(are)f(found,)h(the)f(w)m(ord)f(is)h(remo)m
 (v)m(ed.)65 b(If)37 b(the)h Fs(failglob)e Ft(shell)i(option)g(is)g
-(set,)j(and)c(no)150 2755 y(matc)m(hes)f(are)g(found,)f(an)g(error)f
+(set,)j(and)c(no)150 3442 y(matc)m(hes)f(are)g(found,)f(an)g(error)f
 (message)j(is)e(prin)m(ted)f(and)h(the)g(command)g(is)g(not)g
-(executed.)56 b(If)35 b(the)150 2865 y(shell)e(option)h
+(executed.)56 b(If)35 b(the)150 3551 y(shell)e(option)h
 Fs(nocaseglob)c Ft(is)j(enabled,)h(the)g(matc)m(h)g(is)f(p)s(erformed)e
-(without)i(regard)g(to)h(the)g(case)g(of)150 2974 y(alphab)s(etic)d(c)m
-(haracters.)275 3103 y(When)21 b(a)i(pattern)f(is)g(used)g(for)f
+(without)i(regard)g(to)h(the)g(case)g(of)150 3661 y(alphab)s(etic)d(c)m
+(haracters.)275 3819 y(When)21 b(a)i(pattern)f(is)g(used)g(for)f
 (\014lename)i(generation,)i(the)d(c)m(haracter)i(`)p
 Fs(.)p Ft(')e(at)h(the)f(start)h(of)f(a)h(\014lename)150
-3213 y(or)g(immediately)i(follo)m(wing)g(a)f(slash)f(m)m(ust)h(b)s(e)f
+3928 y(or)g(immediately)i(follo)m(wing)g(a)f(slash)f(m)m(ust)h(b)s(e)f
 (matc)m(hed)h(explicitly)-8 b(,)27 b(unless)c(the)g(shell)h(option)g
-Fs(dotglob)150 3322 y Ft(is)31 b(set.)45 b(When)31 b(matc)m(hing)h(a)g
+Fs(dotglob)150 4038 y Ft(is)31 b(set.)45 b(When)31 b(matc)m(hing)h(a)g
 (\014le)f(name,)h(the)g(slash)f(c)m(haracter)i(m)m(ust)e(alw)m(a)m(ys)i
-(b)s(e)e(matc)m(hed)h(explicitly)-8 b(.)150 3432 y(In)30
+(b)s(e)e(matc)m(hed)h(explicitly)-8 b(.)150 4147 y(In)30
 b(other)g(cases,)i(the)e(`)p Fs(.)p Ft(')h(c)m(haracter)h(is)e(not)h
-(treated)g(sp)s(ecially)-8 b(.)275 3560 y(See)30 b(the)g(description)f
+(treated)g(sp)s(ecially)-8 b(.)275 4305 y(See)30 b(the)g(description)f
 (of)h Fs(shopt)f Ft(in)g(Section)i(4.2)g([Bash)f(Builtins],)h(page)f
-(41,)h(for)f(a)g(description)g(of)150 3670 y(the)h Fs(nocaseglob)p
+(41,)h(for)f(a)g(description)g(of)150 4415 y(the)h Fs(nocaseglob)p
 Ft(,)c Fs(nullglob)p Ft(,)i Fs(failglob)p Ft(,)f(and)i
-Fs(dotglob)e Ft(options.)275 3799 y(The)k Fs(GLOBIGNORE)f
+Fs(dotglob)e Ft(options.)275 4573 y(The)k Fs(GLOBIGNORE)f
 Ft(shell)i(v)-5 b(ariable)34 b(ma)m(y)g(b)s(e)f(used)f(to)i(restrict)g
-(the)g(set)f(of)h(\014lenames)f(matc)m(hing)i(a)150 3908
+(the)g(set)f(of)h(\014lenames)f(matc)m(hing)i(a)150 4682
 y(pattern.)k(If)25 b Fs(GLOBIGNORE)e Ft(is)j(set,)h(eac)m(h)g(matc)m
 (hing)g(\014lename)f(that)g(also)h(matc)m(hes)f(one)g(of)g(the)g
-(patterns)150 4018 y(in)33 b Fs(GLOBIGNORE)d Ft(is)j(remo)m(v)m(ed)h
+(patterns)150 4792 y(in)33 b Fs(GLOBIGNORE)d Ft(is)j(remo)m(v)m(ed)h
 (from)e(the)i(list)f(of)g(matc)m(hes.)50 b(The)33 b(\014lenames)g(`)p
 Fs(.)p Ft(')g(and)f(`)p Fs(..)p Ft(')h(are)g(alw)m(a)m(ys)150
-4128 y(ignored)g(when)e Fs(GLOBIGNORE)f Ft(is)j(set)g(and)f(not)h(n)m
+4902 y(ignored)g(when)e Fs(GLOBIGNORE)f Ft(is)j(set)g(and)f(not)h(n)m
 (ull.)48 b(Ho)m(w)m(ev)m(er,)35 b(setting)f Fs(GLOBIGNORE)c
-Ft(to)j(a)g(non-n)m(ull)150 4237 y(v)-5 b(alue)34 b(has)f(the)h
+Ft(to)j(a)g(non-n)m(ull)150 5011 y(v)-5 b(alue)34 b(has)f(the)h
 (e\013ect)h(of)f(enabling)g(the)g Fs(dotglob)e Ft(shell)h(option,)j(so)
-e(all)g(other)g(\014lenames)g(b)s(eginning)150 4347 y(with)43
+e(all)g(other)g(\014lenames)g(b)s(eginning)150 5121 y(with)43
 b(a)h(`)p Fs(.)p Ft(')f(will)h(matc)m(h.)80 b(T)-8 b(o)44
 b(get)h(the)e(old)h(b)s(eha)m(vior)f(of)h(ignoring)f(\014lenames)h(b)s
-(eginning)f(with)g(a)150 4456 y(`)p Fs(.)p Ft(',)c(mak)m(e)g(`)p
+(eginning)f(with)g(a)150 5230 y(`)p Fs(.)p Ft(',)c(mak)m(e)g(`)p
 Fs(.*)p Ft(')e(one)g(of)g(the)h(patterns)f(in)g Fs(GLOBIGNORE)p
 Ft(.)58 b(The)37 b Fs(dotglob)e Ft(option)j(is)f(disabled)g(when)150
-4566 y Fs(GLOBIGNORE)28 b Ft(is)i(unset.)150 4773 y Fk(3.5.8.1)63
-b(P)m(attern)40 b(Matc)m(hing)275 5011 y Ft(An)m(y)33
-b(c)m(haracter)i(that)f(app)s(ears)f(in)g(a)h(pattern,)g(other)g(than)f
-(the)g(sp)s(ecial)h(pattern)g(c)m(haracters)h(de-)150
-5121 y(scrib)s(ed)30 b(b)s(elo)m(w,)h(matc)m(hes)h(itself.)43
-b(The)31 b Fl(nul)f Ft(c)m(haracter)i(ma)m(y)f(not)h(o)s(ccur)e(in)h(a)
-g(pattern.)42 b(A)31 b(bac)m(kslash)150 5230 y(escap)s(es)36
-b(the)f(follo)m(wing)i(c)m(haracter;)j(the)c(escaping)g(bac)m(kslash)g
-(is)f(discarded)g(when)g(matc)m(hing.)56 b(The)150 5340
-y(sp)s(ecial)31 b(pattern)f(c)m(haracters)i(m)m(ust)f(b)s(e)e(quoted)i
-(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8
-b(.)p eop end
+5340 y Fs(GLOBIGNORE)28 b Ft(is)i(unset.)p eop end
 %%Page: 24 30
 TeXDict begin 24 29 bop 150 -116 a Ft(24)2572 b(Bash)31
-b(Reference)g(Man)m(ual)275 299 y(The)e(sp)s(ecial)i(pattern)g(c)m
-(haracters)h(ha)m(v)m(e)f(the)g(follo)m(wing)h(meanings:)150
-453 y Fs(*)432 b Ft(Matc)m(hes)32 b(an)m(y)f(string,)f(including)g(the)
-h(n)m(ull)f(string.)150 606 y Fs(?)432 b Ft(Matc)m(hes)32
-b(an)m(y)f(single)g(c)m(haracter.)150 760 y Fs([...)o(])241
-b Ft(Matc)m(hes)27 b(an)m(y)e(one)g(of)g(the)g(enclosed)g(c)m
-(haracters.)41 b(A)25 b(pair)f(of)h(c)m(haracters)i(separated)e(b)m(y)g
-(a)630 870 y(h)m(yphen)i(denotes)h(a)g Fq(range)g(expression)p
+b(Reference)g(Man)m(ual)150 299 y Fk(3.5.8.1)63 b(P)m(attern)40
+b(Matc)m(hing)275 547 y Ft(An)m(y)33 b(c)m(haracter)i(that)f(app)s
+(ears)f(in)g(a)h(pattern,)g(other)g(than)f(the)g(sp)s(ecial)h(pattern)g
+(c)m(haracters)h(de-)150 657 y(scrib)s(ed)30 b(b)s(elo)m(w,)h(matc)m
+(hes)h(itself.)43 b(The)31 b Fl(nul)f Ft(c)m(haracter)i(ma)m(y)f(not)h
+(o)s(ccur)e(in)h(a)g(pattern.)42 b(A)31 b(bac)m(kslash)150
+766 y(escap)s(es)36 b(the)f(follo)m(wing)i(c)m(haracter;)j(the)c
+(escaping)g(bac)m(kslash)g(is)f(discarded)g(when)g(matc)m(hing.)56
+b(The)150 876 y(sp)s(ecial)31 b(pattern)f(c)m(haracters)i(m)m(ust)f(b)s
+(e)e(quoted)i(if)f(they)h(are)f(to)i(b)s(e)d(matc)m(hed)i(literally)-8
+b(.)275 1014 y(The)29 b(sp)s(ecial)i(pattern)g(c)m(haracters)h(ha)m(v)m
+(e)f(the)g(follo)m(wing)h(meanings:)150 1180 y Fs(*)432
+b Ft(Matc)m(hes)32 b(an)m(y)f(string,)f(including)g(the)h(n)m(ull)f
+(string.)150 1343 y Fs(?)432 b Ft(Matc)m(hes)32 b(an)m(y)f(single)g(c)m
+(haracter.)150 1506 y Fs([...)o(])241 b Ft(Matc)m(hes)27
+b(an)m(y)e(one)g(of)g(the)g(enclosed)g(c)m(haracters.)41
+b(A)25 b(pair)f(of)h(c)m(haracters)i(separated)e(b)m(y)g(a)630
+1616 y(h)m(yphen)i(denotes)h(a)g Fq(range)g(expression)p
 Ft(;)g(an)m(y)h(c)m(haracter)g(that)f(sorts)g(b)s(et)m(w)m(een)g(those)
-h(t)m(w)m(o)630 979 y(c)m(haracters,)f(inclusiv)m(e,)f(using)d(the)h
+h(t)m(w)m(o)630 1726 y(c)m(haracters,)f(inclusiv)m(e,)f(using)d(the)h
 (curren)m(t)f(lo)s(cale's)j(collating)g(sequence)e(and)f(c)m(haracter)
-630 1089 y(set,)31 b(is)f(matc)m(hed.)42 b(If)30 b(the)g(\014rst)g(c)m
+630 1835 y(set,)31 b(is)f(matc)m(hed.)42 b(If)30 b(the)g(\014rst)g(c)m
 (haracter)i(follo)m(wing)g(the)e(`)p Fs([)p Ft(')h(is)f(a)h(`)p
 Fs(!)p Ft(')f(or)g(a)h(`)p Fs(^)p Ft(')g(then)f(an)m(y)630
-1199 y(c)m(haracter)c(not)f(enclosed)g(is)g(matc)m(hed.)40
+1945 y(c)m(haracter)c(not)f(enclosed)g(is)g(matc)m(hed.)40
 b(A)25 b(`)p Fp(\000)p Ft(')f(ma)m(y)i(b)s(e)e(matc)m(hed)h(b)m(y)f
-(including)h(it)g(as)g(the)630 1308 y(\014rst)32 b(or)h(last)h(c)m
+(including)h(it)g(as)g(the)630 2054 y(\014rst)32 b(or)h(last)h(c)m
 (haracter)h(in)e(the)g(set.)50 b(A)33 b(`)p Fs(])p Ft(')g(ma)m(y)h(b)s
 (e)e(matc)m(hed)i(b)m(y)f(including)g(it)g(as)h(the)630
-1418 y(\014rst)25 b(c)m(haracter)i(in)e(the)h(set.)40
+2164 y(\014rst)25 b(c)m(haracter)i(in)e(the)h(set.)40
 b(The)25 b(sorting)h(order)f(of)h(c)m(haracters)h(in)f(range)g
-(expressions)f(is)630 1527 y(determined)e(b)m(y)g(the)g(curren)m(t)f
+(expressions)f(is)630 2273 y(determined)e(b)m(y)g(the)g(curren)m(t)f
 (lo)s(cale)j(and)e(the)g(v)-5 b(alue)23 b(of)g(the)h
-Fs(LC_COLLATE)c Ft(shell)j(v)-5 b(ariable,)630 1637 y(if)30
-b(set.)630 1769 y(F)-8 b(or)34 b(example,)g(in)f(the)g(default)g(C)f
+Fs(LC_COLLATE)c Ft(shell)j(v)-5 b(ariable,)630 2383 y(if)30
+b(set.)630 2520 y(F)-8 b(or)34 b(example,)g(in)f(the)g(default)g(C)f
 (lo)s(cale,)k(`)p Fs([a-dx-z])p Ft(')31 b(is)i(equiv)-5
-b(alen)m(t)34 b(to)g(`)p Fs([abcdxyz])p Ft('.)630 1878
+b(alen)m(t)34 b(to)g(`)p Fs([abcdxyz])p Ft('.)630 2629
 y(Man)m(y)68 b(lo)s(cales)h(sort)f(c)m(haracters)h(in)e(dictionary)i
-(order,)76 b(and)67 b(in)g(these)h(lo)s(cales)630 1988
+(order,)76 b(and)67 b(in)g(these)h(lo)s(cales)630 2739
 y(`)p Fs([a-dx-z])p Ft(')36 b(is)i(t)m(ypically)i(not)e(equiv)-5
 b(alen)m(t)39 b(to)g(`)p Fs([abcdxyz])p Ft(';)g(it)g(migh)m(t)f(b)s(e)f
-(equiv)-5 b(alen)m(t)630 2097 y(to)34 b(`)p Fs([aBbCcDdxXyYz])p
+(equiv)-5 b(alen)m(t)630 2848 y(to)34 b(`)p Fs([aBbCcDdxXyYz])p
 Ft(',)c(for)j(example.)49 b(T)-8 b(o)33 b(obtain)h(the)f(traditional)h
-(in)m(terpretation)h(of)630 2207 y(ranges)e(in)f(brac)m(k)m(et)i
+(in)m(terpretation)h(of)630 2958 y(ranges)e(in)f(brac)m(k)m(et)i
 (expressions,)g(y)m(ou)f(can)g(force)g(the)g(use)f(of)h(the)g(C)f(lo)s
-(cale)i(b)m(y)f(setting)630 2317 y(the)e Fs(LC_COLLATE)c
+(cale)i(b)m(y)f(setting)630 3067 y(the)e Fs(LC_COLLATE)c
 Ft(or)k Fs(LC_ALL)d Ft(en)m(vironmen)m(t)j(v)-5 b(ariable)31
-b(to)g(the)g(v)-5 b(alue)31 b(`)p Fs(C)p Ft('.)630 2448
+b(to)g(the)g(v)-5 b(alue)31 b(`)p Fs(C)p Ft('.)630 3204
 y(Within)23 b(`)p Fs([)p Ft(')h(and)e(`)p Fs(])p Ft(',)j
 Fq(c)m(haracter)g(classes)j Ft(can)c(b)s(e)e(sp)s(eci\014ed)h(using)f
 (the)i(syn)m(tax)f Fs([:)p Fq(class)t Fs(:])p Ft(,)630
-2558 y(where)30 b Fq(class)35 b Ft(is)30 b(one)h(of)f(the)h(follo)m
+3314 y(where)30 b Fq(class)35 b Ft(is)30 b(one)h(of)f(the)h(follo)m
 (wing)h(classes)f(de\014ned)e(in)h(the)h Fl(posix)f Ft(standard:)870
-2690 y Fs(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g
-(lower)870 2799 y(print)g(punct)g(space)f(upper)h(word)190
-b(xdigit)630 2931 y Ft(A)42 b(c)m(haracter)h(class)f(matc)m(hes)h(an)m
+3450 y Fs(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g
+(lower)870 3560 y(print)g(punct)g(space)f(upper)h(word)190
+b(xdigit)630 3696 y Ft(A)42 b(c)m(haracter)h(class)f(matc)m(hes)h(an)m
 (y)f(c)m(haracter)h(b)s(elonging)f(to)g(that)g(class.)75
-b(The)41 b Fs(word)630 3040 y Ft(c)m(haracter)32 b(class)f(matc)m(hes)h
+b(The)41 b Fs(word)630 3806 y Ft(c)m(haracter)32 b(class)f(matc)m(hes)h
 (letters,)f(digits,)h(and)d(the)i(c)m(haracter)h(`)p
-Fs(_)p Ft('.)630 3172 y(Within)25 b(`)p Fs([)p Ft(')f(and)g(`)p
+Fs(_)p Ft('.)630 3942 y(Within)25 b(`)p Fs([)p Ft(')f(and)g(`)p
 Fs(])p Ft(',)i(an)e Fq(equiv)-5 b(alence)26 b(class)j
 Ft(can)24 b(b)s(e)g(sp)s(eci\014ed)g(using)g(the)g(syn)m(tax)h
-Fs([=)p Fq(c)6 b Fs(=])p Ft(,)630 3282 y(whic)m(h)29
+Fs([=)p Fq(c)6 b Fs(=])p Ft(,)630 4052 y(whic)m(h)29
 b(matc)m(hes)i(all)f(c)m(haracters)h(with)e(the)h(same)g(collation)h(w)
-m(eigh)m(t)g(\(as)f(de\014ned)e(b)m(y)i(the)630 3391
+m(eigh)m(t)g(\(as)f(de\014ned)e(b)m(y)i(the)630 4161
 y(curren)m(t)g(lo)s(cale\))j(as)d(the)h(c)m(haracter)h
-Fq(c)p Ft(.)630 3523 y(Within)22 b(`)p Fs([)p Ft(')f(and)g(`)p
+Fq(c)p Ft(.)630 4298 y(Within)22 b(`)p Fs([)p Ft(')f(and)g(`)p
 Fs(])p Ft(',)j(the)d(syn)m(tax)h Fs([.)p Fq(sym)m(b)s(ol)t
 Fs(.])e Ft(matc)m(hes)i(the)g(collating)i(sym)m(b)s(ol)d
-Fq(sym)m(b)s(ol)p Ft(.)275 3677 y(If)29 b(the)g Fs(extglob)f
+Fq(sym)m(b)s(ol)p Ft(.)275 4463 y(If)29 b(the)g Fs(extglob)f
 Ft(shell)h(option)h(is)g(enabled)f(using)g(the)h Fs(shopt)e
-Ft(builtin,)h(sev)m(eral)i(extended)f(pattern)150 3786
+Ft(builtin,)h(sev)m(eral)i(extended)f(pattern)150 4573
 y(matc)m(hing)37 b(op)s(erators)e(are)h(recognized.)58
 b(In)35 b(the)g(follo)m(wing)i(description,)g(a)f Fq(pattern-list)j
-Ft(is)d(a)g(list)g(of)150 3896 y(one)d(or)f(more)h(patterns)f
+Ft(is)d(a)g(list)g(of)150 4682 y(one)d(or)f(more)h(patterns)f
 (separated)h(b)m(y)f(a)h(`)p Fs(|)p Ft('.)47 b(Comp)s(osite)33
 b(patterns)f(ma)m(y)i(b)s(e)d(formed)h(using)g(one)h(or)150
-4005 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150
-4159 y Fs(?\()p Fj(pattern-list)11 b Fs(\))630 4269 y
+4792 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150
+4957 y Fs(?\()p Fj(pattern-list)11 b Fs(\))630 5067 y
 Ft(Matc)m(hes)32 b(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m
-(en)g(patterns.)150 4423 y Fs(*\()p Fj(pattern-list)11
-b Fs(\))630 4532 y Ft(Matc)m(hes)32 b(zero)f(or)g(more)f(o)s
-(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)150 4686
-y Fs(+\()p Fj(pattern-list)11 b Fs(\))630 4796 y Ft(Matc)m(hes)32
-b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)i(patterns.)
-150 4949 y Fs(@\()p Fj(pattern-list)11 b Fs(\))630 5059
-y Ft(Matc)m(hes)32 b(one)f(of)f(the)h(giv)m(en)g(patterns.)150
-5213 y Fs(!\()p Fj(pattern-list)11 b Fs(\))630 5322 y
-Ft(Matc)m(hes)32 b(an)m(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g
-(patterns.)p eop end
+(en)g(patterns.)150 5230 y Fs(*\()p Fj(pattern-list)11
+b Fs(\))630 5340 y Ft(Matc)m(hes)32 b(zero)f(or)g(more)f(o)s
+(ccurrences)h(of)f(the)h(giv)m(en)g(patterns.)p eop end
 %%Page: 25 31
 TeXDict begin 25 30 bop 150 -116 a Ft(Chapter)30 b(3:)41
 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(25)150 299
-y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 b(al)275 550 y
-Ft(After)32 b(the)h(preceding)f(expansions,)h(all)g(unquoted)f(o)s
-(ccurrences)g(of)h(the)f(c)m(haracters)i(`)p Fs(\\)p
-Ft(',)f(`)p Fs(')p Ft(',)h(and)150 659 y(`)p Fs(")p Ft(')d(that)g(did)e
-(not)i(result)f(from)g(one)h(of)f(the)h(ab)s(o)m(v)m(e)g(expansions)f
-(are)h(remo)m(v)m(ed.)150 933 y Fr(3.6)68 b(Redirections)275
-1184 y Ft(Before)33 b(a)h(command)e(is)h(executed,)i(its)e(input)f(and)
-h(output)f(ma)m(y)i(b)s(e)e Fq(redirected)37 b Ft(using)32
-b(a)h(sp)s(ecial)150 1294 y(notation)g(in)m(terpreted)g(b)m(y)f(the)g
-(shell.)46 b(Redirection)33 b(ma)m(y)g(also)g(b)s(e)f(used)f(to)i(op)s
-(en)e(and)h(close)h(\014les)f(for)150 1403 y(the)h(curren)m(t)g(shell)g
-(execution)h(en)m(vironmen)m(t.)49 b(The)33 b(follo)m(wing)h
-(redirection)g(op)s(erators)f(ma)m(y)h(precede)150 1513
-y(or)29 b(app)s(ear)g(an)m(ywhere)g(within)g(a)h(simple)f(command)g(or)
-h(ma)m(y)g(follo)m(w)g(a)g(command.)40 b(Redirections)31
-b(are)150 1623 y(pro)s(cessed)f(in)g(the)g(order)g(they)h(app)s(ear,)f
-(from)g(left)h(to)g(righ)m(t.)275 1764 y(In)c(the)i(follo)m(wing)h
-(descriptions,)g(if)e(the)h(\014le)g(descriptor)f(n)m(um)m(b)s(er)g(is)
-g(omitted,)i(and)f(the)f(\014rst)g(c)m(har-)150 1873
-y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g(is)g(`)p
-Fs(<)p Ft(',)i(the)e(redirection)g(refers)g(to)g(the)g(standard)f
-(input)f(\(\014le)150 1983 y(descriptor)33 b(0\).)49
-b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f(redirection)g(op)s
-(erator)h(is)f(`)p Fs(>)p Ft(',)h(the)f(redirection)g(refers)150
-2093 y(to)e(the)g(standard)e(output)h(\(\014le)h(descriptor)f(1\).)275
-2234 y(The)h(w)m(ord)h(follo)m(wing)i(the)f(redirection)g(op)s(erator)f
-(in)g(the)h(follo)m(wing)h(descriptions,)f(unless)e(other-)150
-2343 y(wise)21 b(noted,)i(is)e(sub)5 b(jected)21 b(to)h(brace)f
-(expansion,)i(tilde)f(expansion,)h(parameter)e(expansion,)i(command)150
-2453 y(substitution,)31 b(arithmetic)h(expansion,)f(quote)h(remo)m(v)-5
-b(al,)33 b(\014lename)e(expansion,)g(and)f(w)m(ord)h(splitting.)150
-2563 y(If)f(it)h(expands)e(to)i(more)g(than)f(one)h(w)m(ord,)f(Bash)h
-(rep)s(orts)e(an)h(error.)275 2704 y(Note)h(that)g(the)g(order)f(of)g
-(redirections)h(is)g(signi\014can)m(t.)41 b(F)-8 b(or)31
-b(example,)h(the)e(command)390 2845 y Fs(ls)47 b(>)h
-Fj(dirlist)56 b Fs(2>&1)150 2986 y Ft(directs)28 b(b)s(oth)f(standard)g
-(output)g(\(\014le)h(descriptor)f(1\))i(and)e(standard)f(error)i
-(\(\014le)g(descriptor)f(2\))h(to)h(the)150 3096 y(\014le)h
-Fq(dirlist)p Ft(,)h(while)f(the)h(command)390 3237 y
-Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 3378 y Ft(directs)34
+y Fs(+\()p Fj(pattern-list)11 b Fs(\))630 408 y Ft(Matc)m(hes)32
+b(one)f(or)f(more)h(o)s(ccurrences)f(of)h(the)f(giv)m(en)i(patterns.)
+150 568 y Fs(@\()p Fj(pattern-list)11 b Fs(\))630 678
+y Ft(Matc)m(hes)32 b(one)f(of)f(the)h(giv)m(en)g(patterns.)150
+838 y Fs(!\()p Fj(pattern-list)11 b Fs(\))630 947 y Ft(Matc)m(hes)32
+b(an)m(ything)f(except)g(one)g(of)f(the)h(giv)m(en)g(patterns.)150
+1172 y Fk(3.5.9)63 b(Quote)41 b(Remo)m(v)-7 b(al)275
+1416 y Ft(After)32 b(the)h(preceding)f(expansions,)h(all)g(unquoted)f
+(o)s(ccurrences)g(of)h(the)f(c)m(haracters)i(`)p Fs(\\)p
+Ft(',)f(`)p Fs(')p Ft(',)h(and)150 1526 y(`)p Fs(")p
+Ft(')d(that)g(did)e(not)i(result)f(from)g(one)h(of)f(the)h(ab)s(o)m(v)m
+(e)g(expansions)f(are)h(remo)m(v)m(ed.)150 1784 y Fr(3.6)68
+b(Redirections)275 2029 y Ft(Before)33 b(a)h(command)e(is)h(executed,)i
+(its)e(input)f(and)h(output)f(ma)m(y)i(b)s(e)e Fq(redirected)37
+b Ft(using)32 b(a)h(sp)s(ecial)150 2138 y(notation)g(in)m(terpreted)g
+(b)m(y)f(the)g(shell.)46 b(Redirection)33 b(ma)m(y)g(also)g(b)s(e)f
+(used)f(to)i(op)s(en)e(and)h(close)h(\014les)f(for)150
+2248 y(the)h(curren)m(t)g(shell)g(execution)h(en)m(vironmen)m(t.)49
+b(The)33 b(follo)m(wing)h(redirection)g(op)s(erators)f(ma)m(y)h
+(precede)150 2357 y(or)29 b(app)s(ear)g(an)m(ywhere)g(within)g(a)h
+(simple)f(command)g(or)h(ma)m(y)g(follo)m(w)g(a)g(command.)40
+b(Redirections)31 b(are)150 2467 y(pro)s(cessed)f(in)g(the)g(order)g
+(they)h(app)s(ear,)f(from)g(left)h(to)g(righ)m(t.)275
+2602 y(In)c(the)i(follo)m(wing)h(descriptions,)g(if)e(the)h(\014le)g
+(descriptor)f(n)m(um)m(b)s(er)g(is)g(omitted,)i(and)f(the)f(\014rst)g
+(c)m(har-)150 2711 y(acter)42 b(of)f(the)g(redirection)g(op)s(erator)g
+(is)g(`)p Fs(<)p Ft(',)i(the)e(redirection)g(refers)g(to)g(the)g
+(standard)f(input)f(\(\014le)150 2821 y(descriptor)33
+b(0\).)49 b(If)33 b(the)g(\014rst)f(c)m(haracter)i(of)g(the)f
+(redirection)g(op)s(erator)h(is)f(`)p Fs(>)p Ft(',)h(the)f(redirection)
+g(refers)150 2931 y(to)e(the)g(standard)e(output)h(\(\014le)h
+(descriptor)f(1\).)275 3065 y(The)h(w)m(ord)h(follo)m(wing)i(the)f
+(redirection)g(op)s(erator)f(in)g(the)h(follo)m(wing)h(descriptions,)f
+(unless)e(other-)150 3175 y(wise)21 b(noted,)i(is)e(sub)5
+b(jected)21 b(to)h(brace)f(expansion,)i(tilde)f(expansion,)h(parameter)
+e(expansion,)i(command)150 3285 y(substitution,)31 b(arithmetic)h
+(expansion,)f(quote)h(remo)m(v)-5 b(al,)33 b(\014lename)e(expansion,)g
+(and)f(w)m(ord)h(splitting.)150 3394 y(If)f(it)h(expands)e(to)i(more)g
+(than)f(one)h(w)m(ord,)f(Bash)h(rep)s(orts)e(an)h(error.)275
+3529 y(Note)h(that)g(the)g(order)f(of)g(redirections)h(is)g
+(signi\014can)m(t.)41 b(F)-8 b(or)31 b(example,)h(the)e(command)390
+3664 y Fs(ls)47 b(>)h Fj(dirlist)56 b Fs(2>&1)150 3799
+y Ft(directs)28 b(b)s(oth)f(standard)g(output)g(\(\014le)h(descriptor)f
+(1\))i(and)e(standard)f(error)i(\(\014le)g(descriptor)f(2\))h(to)h(the)
+150 3908 y(\014le)h Fq(dirlist)p Ft(,)h(while)f(the)h(command)390
+4043 y Fs(ls)47 b(2>&1)g(>)g Fj(dirlist)150 4178 y Ft(directs)34
 b(only)g(the)f(standard)g(output)g(to)h(\014le)g Fq(dirlist)p
 Ft(,)h(b)s(ecause)e(the)h(standard)f(error)g(w)m(as)h(duplicated)150
-3488 y(as)d(standard)e(output)h(b)s(efore)g(the)h(standard)e(output)h
-(w)m(as)h(redirected)g(to)g Fq(dirlist)p Ft(.)275 3629
+4287 y(as)d(standard)e(output)h(b)s(efore)g(the)h(standard)e(output)h
+(w)m(as)h(redirected)g(to)g Fq(dirlist)p Ft(.)275 4422
 y(Bash)26 b(handles)f(sev)m(eral)j(\014lenames)e(sp)s(ecially)h(when)f
 (they)g(are)g(used)g(in)g(redirections,)i(as)e(describ)s(ed)150
-3739 y(in)k(the)h(follo)m(wing)g(table:)150 3908 y Fs(/dev/fd/)p
-Fj(fd)630 4018 y Ft(If)f Fq(fd)j Ft(is)d(a)h(v)-5 b(alid)31
+4532 y(in)k(the)h(follo)m(wing)g(table:)150 4692 y Fs(/dev/fd/)p
+Fj(fd)630 4801 y Ft(If)f Fq(fd)j Ft(is)d(a)h(v)-5 b(alid)31
 b(in)m(teger,)h(\014le)e(descriptor)h Fq(fd)i Ft(is)d(duplicated.)150
-4184 y Fs(/dev/stdin)630 4294 y Ft(File)i(descriptor)e(0)h(is)f
-(duplicated.)150 4460 y Fs(/dev/stdout)630 4569 y Ft(File)i(descriptor)
-e(1)h(is)f(duplicated.)150 4735 y Fs(/dev/stderr)630
-4845 y Ft(File)i(descriptor)e(2)h(is)f(duplicated.)150
-5011 y Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630
-5121 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5 b(alid)41
-b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c Fq(p)s(ort)j
-Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 5230 y(n)m(um)m(b)s(er)h(or)h
-(service)h(name,)j(Bash)c(attempts)h(to)g(op)s(en)f(a)g(TCP)g
-(connection)h(to)g(the)630 5340 y(corresp)s(onding)29
-b(so)s(c)m(k)m(et.)p eop end
+4961 y Fs(/dev/stdin)630 5071 y Ft(File)i(descriptor)e(0)h(is)f
+(duplicated.)150 5230 y Fs(/dev/stdout)630 5340 y Ft(File)i(descriptor)
+e(1)h(is)f(duplicated.)p eop end
 %%Page: 26 32
 TeXDict begin 26 31 bop 150 -116 a Ft(26)2572 b(Bash)31
-b(Reference)g(Man)m(ual)150 299 y Fs(/dev/udp/)p Fj(host)11
-b Fs(/)p Fj(port)630 408 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5
+b(Reference)g(Man)m(ual)150 299 y Fs(/dev/stderr)630
+408 y Ft(File)h(descriptor)e(2)h(is)f(duplicated.)150
+568 y Fs(/dev/tcp/)p Fj(host)11 b Fs(/)p Fj(port)630
+677 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5 b(alid)41
+b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c Fq(p)s(ort)j
+Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 787 y(n)m(um)m(b)s(er)h(or)h
+(service)h(name,)j(Bash)c(attempts)h(to)g(op)s(en)f(a)g(TCP)g
+(connection)h(to)g(the)630 897 y(corresp)s(onding)29
+b(so)s(c)m(k)m(et.)150 1056 y Fs(/dev/udp/)p Fj(host)11
+b Fs(/)p Fj(port)630 1166 y Ft(If)41 b Fq(host)i Ft(is)f(a)g(v)-5
 b(alid)41 b(hostname)h(or)f(In)m(ternet)h(address,)i(and)c
-Fq(p)s(ort)j Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 518
+Fq(p)s(ort)j Ft(is)f(an)f(in)m(teger)i(p)s(ort)630 1275
 y(n)m(um)m(b)s(er)g(or)i(service)g(name,)k(Bash)c(attempts)g(to)h(op)s
-(en)e(a)h(UDP)g(connection)g(to)h(the)630 628 y(corresp)s(onding)29
-b(so)s(c)m(k)m(et.)275 782 y(A)h(failure)h(to)g(op)s(en)e(or)i(create)h
-(a)e(\014le)h(causes)g(the)f(redirection)h(to)g(fail.)275
-914 y(Redirections)f(using)e(\014le)i(descriptors)f(greater)h(than)f(9)
-h(should)e(b)s(e)h(used)f(with)h(care,)h(as)g(they)f(ma)m(y)150
-1024 y(con\015ict)i(with)f(\014le)h(descriptors)f(the)g(shell)h(uses)f
-(in)m(ternally)-8 b(.)150 1241 y Fk(3.6.1)63 b(Redirecting)40
-b(Input)275 1483 y Ft(Redirection)35 b(of)f(input)g(causes)g(the)h
+(en)e(a)h(UDP)g(connection)g(to)h(the)630 1385 y(corresp)s(onding)29
+b(so)s(c)m(k)m(et.)275 1544 y(A)h(failure)h(to)g(op)s(en)e(or)i(create)
+h(a)e(\014le)h(causes)g(the)f(redirection)h(to)g(fail.)275
+1679 y(Redirections)f(using)e(\014le)i(descriptors)f(greater)h(than)f
+(9)h(should)e(b)s(e)h(used)f(with)h(care,)h(as)g(they)f(ma)m(y)150
+1788 y(con\015ict)i(with)f(\014le)h(descriptors)f(the)g(shell)h(uses)f
+(in)m(ternally)-8 b(.)150 2012 y Fk(3.6.1)63 b(Redirecting)40
+b(Input)275 2257 y Ft(Redirection)35 b(of)f(input)g(causes)g(the)h
 (\014le)f(whose)g(name)h(results)f(from)g(the)g(expansion)g(of)h
-Fq(w)m(ord)i Ft(to)150 1592 y(b)s(e)d(op)s(ened)g(for)g(reading)g(on)h
+Fq(w)m(ord)i Ft(to)150 2366 y(b)s(e)d(op)s(ened)g(for)g(reading)g(on)h
 (\014le)f(descriptor)h Fs(n)p Ft(,)g(or)g(the)f(standard)g(input)g
 (\(\014le)h(descriptor)f(0\))h(if)g Fs(n)f Ft(is)150
-1702 y(not)d(sp)s(eci\014ed.)275 1834 y(The)e(general)j(format)e(for)h
-(redirecting)g(input)e(is:)390 1966 y Fs([)p Fj(n)11
-b Fs(]<)p Fj(word)150 2183 y Fk(3.6.2)63 b(Redirecting)40
-b(Output)275 2425 y Ft(Redirection)31 b(of)f(output)g(causes)h(the)g
+2476 y(not)d(sp)s(eci\014ed.)275 2610 y(The)e(general)j(format)e(for)h
+(redirecting)g(input)e(is:)390 2745 y Fs([)p Fj(n)11
+b Fs(]<)p Fj(word)150 2969 y Fk(3.6.2)63 b(Redirecting)40
+b(Output)275 3213 y Ft(Redirection)31 b(of)f(output)g(causes)h(the)g
 (\014le)f(whose)g(name)h(results)f(from)f(the)i(expansion)f(of)h
-Fq(w)m(ord)i Ft(to)150 2534 y(b)s(e)e(op)s(ened)g(for)g(writing)h(on)f
+Fq(w)m(ord)i Ft(to)150 3323 y(b)s(e)e(op)s(ened)g(for)g(writing)h(on)f
 (\014le)h(descriptor)f Fq(n)p Ft(,)h(or)f(the)h(standard)f(output)g
 (\(\014le)h(descriptor)f(1\))h(if)g Fq(n)f Ft(is)150
-2644 y(not)j(sp)s(eci\014ed.)50 b(If)33 b(the)h(\014le)g(do)s(es)f(not)
+3432 y(not)j(sp)s(eci\014ed.)50 b(If)33 b(the)h(\014le)g(do)s(es)f(not)
 h(exist)g(it)g(is)g(created;)j(if)c(it)h(do)s(es)g(exist)g(it)g(is)g
-(truncated)g(to)g(zero)150 2753 y(size.)275 2885 y(The)29
+(truncated)g(to)g(zero)150 3542 y(size.)275 3676 y(The)29
 b(general)j(format)e(for)h(redirecting)g(output)f(is:)390
-3018 y Fs([)p Fj(n)11 b Fs(]>[|])p Fj(word)275 3150 y
+3811 y Fs([)p Fj(n)11 b Fs(]>[|])p Fj(word)275 3945 y
 Ft(If)30 b(the)h(redirection)g(op)s(erator)g(is)g(`)p
 Fs(>)p Ft(',)g(and)f(the)h Fs(noclobber)d Ft(option)j(to)g(the)g
-Fs(set)f Ft(builtin)g(has)h(b)s(een)150 3259 y(enabled,)i(the)f
+Fs(set)f Ft(builtin)g(has)h(b)s(een)150 4055 y(enabled,)i(the)f
 (redirection)h(will)f(fail)h(if)f(the)g(\014le)g(whose)g(name)g
 (results)g(from)g(the)g(expansion)g(of)g Fq(w)m(ord)150
-3369 y Ft(exists)f(and)f(is)g(a)h(regular)g(\014le.)41
+4164 y Ft(exists)f(and)f(is)g(a)h(regular)g(\014le.)41
 b(If)30 b(the)h(redirection)g(op)s(erator)g(is)f(`)p
 Fs(>|)p Ft(',)h(or)f(the)h(redirection)g(op)s(erator)g(is)150
-3478 y(`)p Fs(>)p Ft(')36 b(and)f(the)g Fs(noclobber)e
+4274 y(`)p Fs(>)p Ft(')36 b(and)f(the)g Fs(noclobber)e
 Ft(option)j(is)g(not)g(enabled,)h(the)e(redirection)h(is)g(attempted)g
-(ev)m(en)h(if)e(the)h(\014le)150 3588 y(named)30 b(b)m(y)g
-Fq(w)m(ord)k Ft(exists.)150 3805 y Fk(3.6.3)63 b(App)s(ending)42
-b(Redirected)e(Output)275 4047 y Ft(Redirection)29 b(of)g(output)f(in)g
+(ev)m(en)h(if)e(the)h(\014le)150 4384 y(named)30 b(b)m(y)g
+Fq(w)m(ord)k Ft(exists.)150 4608 y Fk(3.6.3)63 b(App)s(ending)42
+b(Redirected)e(Output)275 4852 y Ft(Redirection)29 b(of)g(output)f(in)g
 (this)h(fashion)f(causes)h(the)g(\014le)g(whose)f(name)h(results)f
-(from)g(the)h(expan-)150 4156 y(sion)34 b(of)f Fq(w)m(ord)k
+(from)g(the)h(expan-)150 4961 y(sion)34 b(of)f Fq(w)m(ord)k
 Ft(to)e(b)s(e)e(op)s(ened)g(for)g(app)s(ending)f(on)i(\014le)f
 (descriptor)h Fq(n)p Ft(,)g(or)g(the)f(standard)g(output)g(\(\014le)150
-4266 y(descriptor)d(1\))h(if)g Fq(n)f Ft(is)g(not)h(sp)s(eci\014ed.)40
+5071 y(descriptor)d(1\))h(if)g Fq(n)f Ft(is)g(not)h(sp)s(eci\014ed.)40
 b(If)29 b(the)i(\014le)f(do)s(es)h(not)f(exist)h(it)g(is)g(created.)275
-4398 y(The)e(general)j(format)e(for)h(app)s(ending)e(output)h(is:)390
-4530 y Fs([)p Fj(n)11 b Fs(]>>)p Fj(word)150 4747 y Fk(3.6.4)63
-b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g(Error)275
-4989 y Ft(Bash)31 b(allo)m(ws)h(b)s(oth)e(the)h(standard)g(output)f
-(\(\014le)i(descriptor)e(1\))i(and)e(the)i(standard)e(error)g(output)
-150 5098 y(\(\014le)d(descriptor)g(2\))h(to)f(b)s(e)g(redirected)g(to)h
-(the)f(\014le)g(whose)f(name)h(is)g(the)g(expansion)g(of)g
-Fq(w)m(ord)j Ft(with)d(this)150 5208 y(construct.)275
-5340 y(There)i(are)i(t)m(w)m(o)h(formats)e(for)h(redirecting)g
-(standard)e(output)h(and)g(standard)f(error:)p eop end
+5205 y(The)e(general)j(format)e(for)h(app)s(ending)e(output)h(is:)390
+5340 y Fs([)p Fj(n)11 b Fs(]>>)p Fj(word)p eop end
 %%Page: 27 33
 TeXDict begin 27 32 bop 150 -116 a Ft(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)390 299
-y Fs(&>)p Fj(word)150 444 y Ft(and)390 590 y Fs(>&)p
-Fj(word)150 736 y Ft(Of)30 b(the)g(t)m(w)m(o)i(forms,)e(the)h(\014rst)e
-(is)i(preferred.)39 b(This)30 b(is)g(seman)m(tically)j(equiv)-5
-b(alen)m(t)32 b(to)390 881 y Fs(>)p Fj(word)57 b Fs(2>&1)150
-1128 y Fk(3.6.5)63 b(Here)41 b(Do)s(cumen)m(ts)275 1383
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)150 299
+y Fk(3.6.4)63 b(Redirecting)40 b(Standard)h(Output)g(and)g(Standard)g
+(Error)275 542 y Ft(Bash)31 b(allo)m(ws)h(b)s(oth)e(the)h(standard)g
+(output)f(\(\014le)i(descriptor)e(1\))i(and)e(the)i(standard)e(error)g
+(output)150 652 y(\(\014le)d(descriptor)g(2\))h(to)f(b)s(e)g
+(redirected)g(to)h(the)f(\014le)g(whose)f(name)h(is)g(the)g(expansion)g
+(of)g Fq(w)m(ord)j Ft(with)d(this)150 761 y(construct.)275
+895 y(There)i(are)i(t)m(w)m(o)h(formats)e(for)h(redirecting)g(standard)
+e(output)h(and)g(standard)f(error:)390 1028 y Fs(&>)p
+Fj(word)150 1162 y Ft(and)390 1296 y Fs(>&)p Fj(word)150
+1429 y Ft(Of)h(the)g(t)m(w)m(o)i(forms,)e(the)h(\014rst)e(is)i
+(preferred.)39 b(This)30 b(is)g(seman)m(tically)j(equiv)-5
+b(alen)m(t)32 b(to)390 1563 y Fs(>)p Fj(word)57 b Fs(2>&1)150
+1784 y Fk(3.6.5)63 b(Here)41 b(Do)s(cumen)m(ts)275 2027
 y Ft(This)28 b(t)m(yp)s(e)h(of)h(redirection)g(instructs)f(the)g(shell)
 h(to)g(read)f(input)f(from)h(the)g(curren)m(t)h(source)f(un)m(til)h(a)
-150 1492 y(line)h(con)m(taining)g(only)g Fq(w)m(ord)i
+150 2137 y(line)h(con)m(taining)g(only)g Fq(w)m(ord)i
 Ft(\(with)d(no)h(trailing)g(blanks\))f(is)g(seen.)41
 b(All)31 b(of)f(the)h(lines)f(read)g(up)f(to)i(that)150
-1602 y(p)s(oin)m(t)f(are)h(then)f(used)g(as)g(the)h(standard)f(input)f
-(for)h(a)h(command.)275 1748 y(The)e(format)i(of)g(here-do)s(cumen)m
-(ts)f(is:)390 1893 y Fs(<<[)p Fp(\000)p Fs(])p Fj(word)772
-2003 y(here-document)390 2112 y(delimiter)275 2258 y
+2246 y(p)s(oin)m(t)f(are)h(then)f(used)g(as)g(the)h(standard)f(input)f
+(for)h(a)h(command.)275 2380 y(The)e(format)i(of)g(here-do)s(cumen)m
+(ts)f(is:)390 2514 y Fs(<<[)p Fp(\000)p Fs(])p Fj(word)772
+2623 y(here-document)390 2733 y(delimiter)275 2866 y
 Ft(No)j(parameter)h(expansion,)g(command)f(substitution,)h(arithmetic)h
-(expansion,)f(or)f(\014lename)g(ex-)150 2367 y(pansion)i(is)g(p)s
+(expansion,)f(or)f(\014lename)g(ex-)150 2976 y(pansion)i(is)g(p)s
 (erformed)e(on)i Fq(w)m(ord)p Ft(.)55 b(If)34 b(an)m(y)i(c)m(haracters)
 g(in)f Fq(w)m(ord)j Ft(are)d(quoted,)i(the)e Fq(delimiter)43
-b Ft(is)35 b(the)150 2477 y(result)40 b(of)h(quote)g(remo)m(v)-5
+b Ft(is)35 b(the)150 3085 y(result)40 b(of)h(quote)g(remo)m(v)-5
 b(al)42 b(on)e Fq(w)m(ord)p Ft(,)j(and)d(the)g(lines)h(in)f(the)h
-(here-do)s(cumen)m(t)f(are)h(not)f(expanded.)150 2587
+(here-do)s(cumen)m(t)f(are)h(not)f(expanded.)150 3195
 y(If)32 b Fq(w)m(ord)k Ft(is)d(unquoted,)f(all)i(lines)f(of)f(the)h
 (here-do)s(cumen)m(t)g(are)g(sub)5 b(jected)32 b(to)i(parameter)f
-(expansion,)150 2696 y(command)25 b(substitution,)g(and)g(arithmetic)h
+(expansion,)150 3305 y(command)25 b(substitution,)g(and)g(arithmetic)h
 (expansion.)39 b(In)24 b(the)h(latter)h(case,)h(the)e(c)m(haracter)i
-(sequence)150 2806 y Fs(\\newline)h Ft(is)j(ignored,)f(and)g(`)p
+(sequence)150 3414 y Fs(\\newline)h Ft(is)j(ignored,)f(and)g(`)p
 Fs(\\)p Ft(')h(m)m(ust)f(b)s(e)g(used)f(to)i(quote)g(the)g(c)m
 (haracters)h(`)p Fs(\\)p Ft(',)e(`)p Fs($)p Ft(',)h(and)f(`)p
-Fs(`)p Ft('.)275 2951 y(If)21 b(the)i(redirection)g(op)s(erator)g(is)f
+Fs(`)p Ft('.)275 3548 y(If)21 b(the)i(redirection)g(op)s(erator)g(is)f
 (`)p Fs(<<-)p Ft(',)i(then)e(all)h(leading)g(tab)g(c)m(haracters)h(are)
-e(stripp)s(ed)f(from)h(input)150 3061 y(lines)33 b(and)f(the)h(line)h
+e(stripp)s(ed)f(from)h(input)150 3657 y(lines)33 b(and)f(the)h(line)h
 (con)m(taining)g Fq(delimiter)p Ft(.)49 b(This)32 b(allo)m(ws)i
 (here-do)s(cumen)m(ts)f(within)f(shell)i(scripts)e(to)150
-3171 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)150
-3417 y Fk(3.6.6)63 b(Here)41 b(Strings)275 3672 y Ft(A)30
+3767 y(b)s(e)e(inden)m(ted)g(in)g(a)h(natural)f(fashion.)150
+3988 y Fk(3.6.6)63 b(Here)41 b(Strings)275 4232 y Ft(A)30
 b(v)-5 b(arian)m(t)31 b(of)g(here)f(do)s(cumen)m(ts,)g(the)h(format)g
-(is:)390 3818 y Fs(<<<)47 b Fj(word)275 3963 y Ft(The)29
+(is:)390 4365 y Fs(<<<)47 b Fj(word)275 4499 y Ft(The)29
 b Fq(w)m(ord)34 b Ft(is)c(expanded)g(and)g(supplied)f(to)i(the)f
-(command)h(on)f(its)h(standard)e(input.)150 4210 y Fk(3.6.7)63
-b(Duplicating)41 b(File)g(Descriptors)275 4465 y Ft(The)29
-b(redirection)i(op)s(erator)390 4610 y Fs([)p Fj(n)11
-b Fs(]<&)p Fj(word)150 4756 y Ft(is)35 b(used)e(to)j(duplicate)f(input)
+(command)h(on)f(its)h(standard)e(input.)150 4720 y Fk(3.6.7)63
+b(Duplicating)41 b(File)g(Descriptors)275 4963 y Ft(The)29
+b(redirection)i(op)s(erator)390 5097 y Fs([)p Fj(n)11
+b Fs(]<&)p Fj(word)150 5230 y Ft(is)35 b(used)e(to)j(duplicate)f(input)
 f(\014le)g(descriptors.)53 b(If)34 b Fq(w)m(ord)k Ft(expands)c(to)h
-(one)g(or)g(more)g(digits,)h(the)f(\014le)150 4866 y(descriptor)e
+(one)g(or)g(more)g(digits,)h(the)f(\014le)150 5340 y(descriptor)e
 (denoted)h(b)m(y)g Fq(n)f Ft(is)g(made)h(to)g(b)s(e)f(a)h(cop)m(y)g(of)
 g(that)g(\014le)g(descriptor.)50 b(If)33 b(the)h(digits)g(in)f
-Fq(w)m(ord)150 4975 y Ft(do)c(not)h(sp)s(ecify)f(a)h(\014le)f
+Fq(w)m(ord)p eop end
+%%Page: 28 34
+TeXDict begin 28 33 bop 150 -116 a Ft(28)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y(do)e(not)h(sp)s(ecify)f(a)h(\014le)f
 (descriptor)g(op)s(en)g(for)g(input,)g(a)h(redirection)g(error)f(o)s
 (ccurs.)40 b(If)29 b Fq(w)m(ord)j Ft(ev)-5 b(aluates)150
-5085 y(to)31 b(`)p Fs(-)p Ft(',)g(\014le)g(descriptor)g
+408 y(to)31 b(`)p Fs(-)p Ft(',)g(\014le)g(descriptor)g
 Fq(n)f Ft(is)g(closed.)43 b(If)30 b Fq(n)g Ft(is)g(not)h(sp)s
 (eci\014ed,)f(the)h(standard)f(input)g(\(\014le)h(descriptor)f(0\))150
-5194 y(is)g(used.)275 5340 y(The)f(op)s(erator)p eop
-end
-%%Page: 28 34
-TeXDict begin 28 33 bop 150 -116 a Ft(28)2572 b(Bash)31
-b(Reference)g(Man)m(ual)390 299 y Fs([)p Fj(n)11 b Fs(]>&)p
-Fj(word)150 434 y Ft(is)40 b(used)g(similarly)h(to)g(duplicate)f
-(output)g(\014le)h(descriptors.)70 b(If)40 b Fq(n)f Ft(is)i(not)f(sp)s
-(eci\014ed,)i(the)f(standard)150 543 y(output)30 b(\(\014le)g
-(descriptor)g(1\))h(is)f(used.)39 b(If)30 b(the)g(digits)h(in)e
-Fq(w)m(ord)34 b Ft(do)29 b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g
-(op)s(en)150 653 y(for)38 b(output,)i(a)e(redirection)h(error)f(o)s
-(ccurs.)63 b(As)38 b(a)h(sp)s(ecial)f(case,)k(if)c Fq(n)f
-Ft(is)h(omitted,)k(and)37 b Fq(w)m(ord)k Ft(do)s(es)150
-763 y(not)28 b(expand)f(to)i(one)f(or)f(more)h(digits,)i(the)e
-(standard)e(output)i(and)f(standard)g(error)g(are)i(redirected)f(as)150
-872 y(describ)s(ed)h(previously)-8 b(.)150 1097 y Fk(3.6.8)63
-b(Mo)m(ving)41 b(File)h(Descriptors)275 1342 y Ft(The)29
-b(redirection)i(op)s(erator)390 1477 y Fs([)p Fj(n)11
-b Fs(]<&)p Fj(digit)p Fs(-)150 1612 y Ft(mo)m(v)m(es)33
-b(the)f(\014le)g(descriptor)f Fq(digit)k Ft(to)d(\014le)g(descriptor)g
-Fq(n)p Ft(,)f(or)h(the)g(standard)f(input)f(\(\014le)j(descriptor)e
-(0\))150 1722 y(if)f Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)40
-b Fq(digit)33 b Ft(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h
-Fq(n)p Ft(.)275 1857 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s
-(erator)390 1992 y Fs([)p Fj(n)11 b Fs(]>&)p Fj(digit)p
-Fs(-)150 2127 y Ft(mo)m(v)m(es)29 b(the)g(\014le)f(descriptor)f
+518 y(is)g(used.)275 653 y(The)f(op)s(erator)390 788
+y Fs([)p Fj(n)11 b Fs(]>&)p Fj(word)150 923 y Ft(is)40
+b(used)g(similarly)h(to)g(duplicate)f(output)g(\014le)h(descriptors.)70
+b(If)40 b Fq(n)f Ft(is)i(not)f(sp)s(eci\014ed,)i(the)f(standard)150
+1033 y(output)30 b(\(\014le)g(descriptor)g(1\))h(is)f(used.)39
+b(If)30 b(the)g(digits)h(in)e Fq(w)m(ord)34 b Ft(do)29
+b(not)i(sp)s(ecify)e(a)i(\014le)f(descriptor)g(op)s(en)150
+1142 y(for)38 b(output,)i(a)e(redirection)h(error)f(o)s(ccurs.)63
+b(As)38 b(a)h(sp)s(ecial)f(case,)k(if)c Fq(n)f Ft(is)h(omitted,)k(and)
+37 b Fq(w)m(ord)k Ft(do)s(es)150 1252 y(not)28 b(expand)f(to)i(one)f
+(or)f(more)h(digits,)i(the)e(standard)e(output)i(and)f(standard)g
+(error)g(are)i(redirected)f(as)150 1361 y(describ)s(ed)h(previously)-8
+b(.)150 1587 y Fk(3.6.8)63 b(Mo)m(ving)41 b(File)h(Descriptors)275
+1831 y Ft(The)29 b(redirection)i(op)s(erator)390 1966
+y Fs([)p Fj(n)11 b Fs(]<&)p Fj(digit)p Fs(-)150 2101
+y Ft(mo)m(v)m(es)33 b(the)f(\014le)g(descriptor)f Fq(digit)k
+Ft(to)d(\014le)g(descriptor)g Fq(n)p Ft(,)f(or)h(the)g(standard)f
+(input)f(\(\014le)j(descriptor)e(0\))150 2211 y(if)f
+Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)40 b Fq(digit)33
+b Ft(is)e(closed)g(after)g(b)s(eing)f(duplicated)g(to)h
+Fq(n)p Ft(.)275 2346 y(Similarly)-8 b(,)31 b(the)f(redirection)h(op)s
+(erator)390 2481 y Fs([)p Fj(n)11 b Fs(]>&)p Fj(digit)p
+Fs(-)150 2616 y Ft(mo)m(v)m(es)29 b(the)g(\014le)f(descriptor)f
 Fq(digit)k Ft(to)e(\014le)f(descriptor)g Fq(n)p Ft(,)g(or)g(the)g
 (standard)f(output)h(\(\014le)g(descriptor)g(1\))150
-2236 y(if)i Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)150
-2462 y Fk(3.6.9)63 b(Op)s(ening)42 b(File)f(Descriptors)h(for)g
-(Reading)f(and)g(W)-10 b(riting)275 2706 y Ft(The)29
-b(redirection)i(op)s(erator)390 2841 y Fs([)p Fj(n)11
-b Fs(]<>)p Fj(word)150 2976 y Ft(causes)39 b(the)g(\014le)g(whose)g
+2725 y(if)i Fq(n)g Ft(is)h(not)f(sp)s(eci\014ed.)150
+2951 y Fk(3.6.9)63 b(Op)s(ening)42 b(File)f(Descriptors)h(for)g
+(Reading)f(and)g(W)-10 b(riting)275 3195 y Ft(The)29
+b(redirection)i(op)s(erator)390 3330 y Fs([)p Fj(n)11
+b Fs(]<>)p Fj(word)150 3465 y Ft(causes)39 b(the)g(\014le)g(whose)g
 (name)g(is)g(the)g(expansion)g(of)g Fq(w)m(ord)j Ft(to)d(b)s(e)g(op)s
-(ened)f(for)g(b)s(oth)h(reading)g(and)150 3086 y(writing)33
+(ened)f(for)g(b)s(oth)h(reading)g(and)150 3575 y(writing)33
 b(on)f(\014le)h(descriptor)f Fq(n)p Ft(,)h(or)g(on)f(\014le)h
 (descriptor)g(0)g(if)f Fq(n)g Ft(is)h(not)g(sp)s(eci\014ed.)47
-b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 3195 y(exist,)e(it)g(is)g
-(created.)150 3454 y Fr(3.7)68 b(Executing)46 b(Commands)150
-3789 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)275
-4034 y Ft(When)35 b(a)h(simple)f(command)h(is)f(executed,)j(the)e
+b(If)32 b(the)h(\014le)f(do)s(es)h(not)150 3684 y(exist,)e(it)g(is)g
+(created.)150 3943 y Fr(3.7)68 b(Executing)46 b(Commands)150
+4278 y Fk(3.7.1)63 b(Simple)41 b(Command)h(Expansion)275
+4522 y Ft(When)35 b(a)h(simple)f(command)h(is)f(executed,)j(the)e
 (shell)g(p)s(erforms)e(the)i(follo)m(wing)h(expansions,)f(as-)150
-4143 y(signmen)m(ts,)31 b(and)f(redirections,)h(from)f(left)h(to)g
-(righ)m(t.)199 4278 y(1.)61 b(The)38 b(w)m(ords)f(that)i(the)g(parser)e
+4632 y(signmen)m(ts,)31 b(and)f(redirections,)h(from)f(left)h(to)g
+(righ)m(t.)199 4767 y(1.)61 b(The)38 b(w)m(ords)f(that)i(the)g(parser)e
 (has)h(mark)m(ed)g(as)h(v)-5 b(ariable)39 b(assignmen)m(ts)g(\(those)g
-(preceding)f(the)330 4388 y(command)30 b(name\))h(and)f(redirections)h
+(preceding)f(the)330 4876 y(command)30 b(name\))h(and)f(redirections)h
 (are)f(sa)m(v)m(ed)i(for)e(later)h(pro)s(cessing.)199
-4523 y(2.)61 b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5
+5011 y(2.)61 b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5
 b(ariable)40 b(assignmen)m(ts)h(or)e(redirections)i(are)f(expanded)f
-(\(see)h(Sec-)330 4632 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g
+(\(see)h(Sec-)330 5121 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g
 (17\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h
-(the)e(\014rst)330 4742 y(w)m(ord)31 b(is)g(tak)m(en)h(to)g(b)s(e)f
+(the)e(\014rst)330 5230 y(w)m(ord)31 b(is)g(tak)m(en)h(to)g(b)s(e)f
 (the)g(name)h(of)f(the)h(command)f(and)f(the)i(remaining)f(w)m(ords)g
-(are)g(the)h(argu-)330 4851 y(men)m(ts.)199 4986 y(3.)61
-b(Redirections)25 b(are)f(p)s(erformed)f(as)h(describ)s(ed)f(ab)s(o)m
-(v)m(e)i(\(see)g(Section)g(3.6)g([Redirections],)i(page)d(25\).)199
-5121 y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p Fs(=)p
-Ft(')h(in)e(eac)m(h)j(v)-5 b(ariable)25 b(assignmen)m(t)h(undergo)s(es)
-e(tilde)i(expansion,)g(parameter)330 5230 y(expansion,)49
-b(command)d(substitution,)j(arithmetic)d(expansion,)k(and)45
-b(quote)h(remo)m(v)-5 b(al)46 b(b)s(efore)330 5340 y(b)s(eing)30
-b(assigned)h(to)g(the)f(v)-5 b(ariable.)p eop end
+(are)g(the)h(argu-)330 5340 y(men)m(ts.)p eop end
 %%Page: 29 35
 TeXDict begin 29 34 bop 150 -116 a Ft(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(29)275 299
-y(If)32 b(no)i(command)f(name)g(results,)h(the)g(v)-5
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(29)199 299
+y(3.)61 b(Redirections)25 b(are)f(p)s(erformed)f(as)h(describ)s(ed)f
+(ab)s(o)m(v)m(e)i(\(see)g(Section)g(3.6)g([Redirections],)i(page)d
+(25\).)199 444 y(4.)61 b(The)25 b(text)h(after)f(the)g(`)p
+Fs(=)p Ft(')h(in)e(eac)m(h)j(v)-5 b(ariable)25 b(assignmen)m(t)h
+(undergo)s(es)e(tilde)i(expansion,)g(parameter)330 554
+y(expansion,)49 b(command)d(substitution,)j(arithmetic)d(expansion,)k
+(and)45 b(quote)h(remo)m(v)-5 b(al)46 b(b)s(efore)330
+663 y(b)s(eing)30 b(assigned)h(to)g(the)f(v)-5 b(ariable.)275
+855 y(If)32 b(no)i(command)f(name)g(results,)h(the)g(v)-5
 b(ariable)34 b(assignmen)m(ts)g(a\013ect)h(the)f(curren)m(t)f(shell)h
-(en)m(viron-)150 408 y(men)m(t.)39 b(Otherwise,)27 b(the)e(v)-5
+(en)m(viron-)150 965 y(men)m(t.)39 b(Otherwise,)27 b(the)e(v)-5
 b(ariables)26 b(are)g(added)f(to)h(the)f(en)m(vironmen)m(t)h(of)g(the)f
-(executed)h(command)g(and)150 518 y(do)35 b(not)f(a\013ect)j(the)d
+(executed)h(command)g(and)150 1074 y(do)35 b(not)f(a\013ect)j(the)d
 (curren)m(t)h(shell)g(en)m(vironmen)m(t.)54 b(If)34 b(an)m(y)h(of)g
-(the)f(assignmen)m(ts)i(attempts)f(to)h(assign)150 628
+(the)f(assignmen)m(ts)i(attempts)f(to)h(assign)150 1184
 y(a)j(v)-5 b(alue)39 b(to)g(a)g(readonly)f(v)-5 b(ariable,)42
 b(an)c(error)g(o)s(ccurs,)j(and)c(the)i(command)f(exits)h(with)g(a)f
-(non-zero)150 737 y(status.)275 875 y(If)33 b(no)g(command)g(name)h
+(non-zero)150 1293 y(status.)275 1449 y(If)33 b(no)g(command)g(name)h
 (results,)g(redirections)g(are)g(p)s(erformed,)f(but)g(do)h(not)f
-(a\013ect)i(the)f(curren)m(t)150 985 y(shell)d(en)m(vironmen)m(t.)41
+(a\013ect)i(the)f(curren)m(t)150 1559 y(shell)d(en)m(vironmen)m(t.)41
 b(A)30 b(redirection)h(error)f(causes)h(the)g(command)f(to)h(exit)g
-(with)f(a)h(non-zero)g(status.)275 1123 y(If)26 b(there)i(is)f(a)h
+(with)f(a)h(non-zero)g(status.)275 1715 y(If)26 b(there)i(is)f(a)h
 (command)f(name)h(left)g(after)g(expansion,)g(execution)h(pro)s(ceeds)e
-(as)g(describ)s(ed)f(b)s(elo)m(w.)150 1233 y(Otherwise,)39
+(as)g(describ)s(ed)f(b)s(elo)m(w.)150 1825 y(Otherwise,)39
 b(the)e(command)g(exits.)62 b(If)37 b(one)g(of)g(the)h(expansions)f
-(con)m(tained)h(a)g(command)f(substitu-)150 1342 y(tion,)i(the)d(exit)h
+(con)m(tained)h(a)g(command)f(substitu-)150 1934 y(tion,)i(the)d(exit)h
 (status)g(of)f(the)h(command)f(is)h(the)f(exit)h(status)g(of)f(the)h
-(last)g(command)f(substitution)150 1452 y(p)s(erformed.)55
+(last)g(command)f(substitution)150 2044 y(p)s(erformed.)55
 b(If)35 b(there)g(w)m(ere)h(no)g(command)f(substitutions,)i(the)e
-(command)h(exits)g(with)f(a)h(status)g(of)150 1561 y(zero.)150
-1793 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)275
-2040 y Ft(After)35 b(a)h(command)f(has)h(b)s(een)e(split)i(in)m(to)g(w)
+(command)h(exits)g(with)f(a)h(status)g(of)150 2153 y(zero.)150
+2421 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)275
+2686 y Ft(After)35 b(a)h(command)f(has)h(b)s(een)e(split)i(in)m(to)g(w)
 m(ords,)h(if)e(it)h(results)g(in)f(a)h(simple)f(command)g(and)g(an)150
-2150 y(optional)d(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g
-(actions)h(are)f(tak)m(en.)199 2288 y(1.)61 b(If)24 b(the)g(command)g
+2796 y(optional)d(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g
+(actions)h(are)f(tak)m(en.)199 2952 y(1.)61 b(If)24 b(the)g(command)g
 (name)g(con)m(tains)i(no)e(slashes,)i(the)e(shell)h(attempts)g(to)g(lo)
-s(cate)h(it.)39 b(If)24 b(there)g(exists)330 2398 y(a)h(shell)g
+s(cate)h(it.)39 b(If)24 b(there)g(exists)330 3062 y(a)h(shell)g
 (function)f(b)m(y)g(that)h(name,)h(that)f(function)f(is)h(in)m(v)m(ok)m
 (ed)h(as)e(describ)s(ed)g(in)g(Section)h(3.3)h([Shell)330
-2507 y(F)-8 b(unctions],)31 b(page)h(14.)199 2643 y(2.)61
+3171 y(F)-8 b(unctions],)31 b(page)h(14.)199 3317 y(2.)61
 b(If)41 b(the)g(name)h(do)s(es)f(not)g(matc)m(h)i(a)e(function,)j(the)e
 (shell)f(searc)m(hes)i(for)e(it)h(in)f(the)g(list)h(of)g(shell)330
-2753 y(builtins.)e(If)30 b(a)h(matc)m(h)g(is)f(found,)g(that)h(builtin)
-f(is)g(in)m(v)m(ok)m(ed.)199 2889 y(3.)61 b(If)40 b(the)g(name)h(is)f
+3426 y(builtins.)e(If)30 b(a)h(matc)m(h)g(is)f(found,)g(that)h(builtin)
+f(is)g(in)m(v)m(ok)m(ed.)199 3571 y(3.)61 b(If)40 b(the)g(name)h(is)f
 (neither)h(a)f(shell)h(function)f(nor)g(a)g(builtin,)j(and)d(con)m
-(tains)h(no)g(slashes,)i(Bash)330 2999 y(searc)m(hes)c(eac)m(h)g
+(tains)h(no)g(slashes,)i(Bash)330 3681 y(searc)m(hes)c(eac)m(h)g
 (elemen)m(t)g(of)g Fs($PATH)d Ft(for)i(a)g(directory)h(con)m(taining)g
-(an)f(executable)h(\014le)f(b)m(y)g(that)330 3109 y(name.)56
+(an)f(executable)h(\014le)f(b)m(y)g(that)330 3791 y(name.)56
 b(Bash)36 b(uses)f(a)h(hash)e(table)j(to)f(remem)m(b)s(er)f(the)h(full)
-f(pathnames)g(of)h(executable)h(\014les)e(to)330 3218
+f(pathnames)g(of)h(executable)h(\014les)e(to)330 3900
 y(a)m(v)m(oid)e(m)m(ultiple)f Fs(PATH)f Ft(searc)m(hes)i(\(see)f(the)g
 (description)g(of)f Fs(hash)g Ft(in)g(Section)i(4.1)f([Bourne)g(Shell)
-330 3328 y(Builtins],)37 b(page)f(35\).)55 b(A)35 b(full)g(searc)m(h)g
+330 4010 y(Builtins],)37 b(page)f(35\).)55 b(A)35 b(full)g(searc)m(h)g
 (of)g(the)g(directories)h(in)f Fs($PATH)e Ft(is)i(p)s(erformed)f(only)h
-(if)g(the)330 3437 y(command)c(is)g(not)g(found)f(in)g(the)i(hash)e
+(if)g(the)330 4119 y(command)c(is)g(not)g(found)f(in)g(the)i(hash)e
 (table.)43 b(If)31 b(the)g(searc)m(h)h(is)f(unsuccessful,)f(the)h
-(shell)g(prin)m(ts)330 3547 y(an)f(error)g(message)i(and)e(returns)f
-(an)h(exit)h(status)g(of)f(127.)199 3683 y(4.)61 b(If)33
+(shell)g(prin)m(ts)330 4229 y(an)f(error)g(message)i(and)e(returns)f
+(an)h(exit)h(status)g(of)f(127.)199 4374 y(4.)61 b(If)33
 b(the)g(searc)m(h)h(is)g(successful,)g(or)f(if)g(the)h(command)f(name)g
-(con)m(tains)i(one)f(or)f(more)g(slashes,)i(the)330 3793
+(con)m(tains)i(one)f(or)f(more)g(slashes,)i(the)330 4484
 y(shell)g(executes)h(the)f(named)f(program)g(in)h(a)g(separate)h
 (execution)f(en)m(vironmen)m(t.)55 b(Argumen)m(t)35 b(0)330
-3902 y(is)30 b(set)h(to)h(the)e(name)h(giv)m(en,)g(and)f(the)h
+4593 y(is)30 b(set)h(to)h(the)e(name)h(giv)m(en,)g(and)f(the)h
 (remaining)f(argumen)m(ts)h(to)g(the)g(command)f(are)h(set)g(to)g(the)
-330 4012 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
-b(.)199 4148 y(5.)61 b(If)35 b(this)h(execution)h(fails)f(b)s(ecause)g
+330 4703 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
+b(.)199 4848 y(5.)61 b(If)35 b(this)h(execution)h(fails)f(b)s(ecause)g
 (the)f(\014le)h(is)g(not)g(in)f(executable)j(format,)f(and)e(the)h
-(\014le)g(is)g(not)330 4258 y(a)d(directory)-8 b(,)34
+(\014le)g(is)g(not)330 4958 y(a)d(directory)-8 b(,)34
 b(it)f(is)g(assumed)e(to)j(b)s(e)d(a)i Fq(shell)g(script)h
 Ft(and)e(the)h(shell)f(executes)i(it)f(as)g(describ)s(ed)e(in)330
-4367 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(32.)199
-4504 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async)
+5067 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(32.)199
+5213 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async)
 m(hronously)-8 b(,)42 b(the)c(shell)h(w)m(aits)h(for)e(the)h(command)f
-(to)330 4613 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150
-4845 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)275
-5092 y Ft(The)29 b(shell)i(has)f(an)g Fq(execution)i(en)m(vironmen)m(t)
-p Ft(,)f(whic)m(h)f(consists)h(of)g(the)f(follo)m(wing:)225
-5230 y Fp(\017)60 b Ft(op)s(en)32 b(\014les)g(inherited)g(b)m(y)h(the)f
-(shell)h(at)g(in)m(v)m(o)s(cation,)j(as)c(mo)s(di\014ed)g(b)m(y)g
-(redirections)h(supplied)e(to)330 5340 y(the)g Fs(exec)e
-Ft(builtin)p eop end
+(to)330 5322 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)p
+eop end
 %%Page: 30 36
 TeXDict begin 30 35 bop 150 -116 a Ft(30)2572 b(Bash)31
-b(Reference)g(Man)m(ual)225 299 y Fp(\017)60 b Ft(the)28
-b(curren)m(t)g(w)m(orking)h(directory)g(as)f(set)h(b)m(y)f
+b(Reference)g(Man)m(ual)150 299 y Fk(3.7.3)63 b(Command)41
+b(Execution)f(En)m(vironmen)m(t)275 551 y Ft(The)29 b(shell)i(has)f(an)
+g Fq(execution)i(en)m(vironmen)m(t)p Ft(,)f(whic)m(h)f(consists)h(of)g
+(the)f(follo)m(wing:)225 693 y Fp(\017)60 b Ft(op)s(en)32
+b(\014les)g(inherited)g(b)m(y)h(the)f(shell)h(at)g(in)m(v)m(o)s
+(cation,)j(as)c(mo)s(di\014ed)g(b)m(y)g(redirections)h(supplied)e(to)
+330 802 y(the)g Fs(exec)e Ft(builtin)225 940 y Fp(\017)60
+b Ft(the)28 b(curren)m(t)g(w)m(orking)h(directory)g(as)f(set)h(b)m(y)f
 Fs(cd)p Ft(,)g Fs(pushd)p Ft(,)g(or)g Fs(popd)p Ft(,)g(or)g(inherited)g
-(b)m(y)g(the)h(shell)f(at)330 408 y(in)m(v)m(o)s(cation)225
-539 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)g(as)
-h(set)g(b)m(y)f Fs(umask)f Ft(or)h(inherited)g(from)g(the)h(shell's)f
-(paren)m(t)225 670 y Fp(\017)60 b Ft(curren)m(t)30 b(traps)g(set)h(b)m
-(y)f Fs(trap)225 801 y Fp(\017)60 b Ft(shell)30 b(parameters)f(that)h
-(are)g(set)g(b)m(y)g(v)-5 b(ariable)30 b(assignmen)m(t)g(or)g(with)f
-Fs(set)f Ft(or)i(inherited)f(from)g(the)330 910 y(shell's)i(paren)m(t)f
-(in)g(the)h(en)m(vironmen)m(t)225 1041 y Fp(\017)60 b
-Ft(shell)44 b(functions)f(de\014ned)f(during)h(execution)i(or)e
-(inherited)h(from)f(the)h(shell's)g(paren)m(t)f(in)h(the)330
-1151 y(en)m(vironmen)m(t)225 1281 y Fp(\017)60 b Ft(options)33
-b(enabled)g(at)h(in)m(v)m(o)s(cation)h(\(either)f(b)m(y)f(default)g(or)
-g(with)g(command-line)g(argumen)m(ts\))h(or)330 1391
-y(b)m(y)c Fs(set)225 1522 y Fp(\017)60 b Ft(options)31
-b(enabled)f(b)m(y)g Fs(shopt)225 1653 y Fp(\017)60 b
-Ft(shell)31 b(aliases)g(de\014ned)f(with)g Fs(alias)f
-Ft(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(75\))225
-1783 y Fp(\017)60 b Ft(v)-5 b(arious)50 b(pro)s(cess)f
+(b)m(y)g(the)h(shell)f(at)330 1050 y(in)m(v)m(o)s(cation)225
+1188 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)g
+(as)h(set)g(b)m(y)f Fs(umask)f Ft(or)h(inherited)g(from)g(the)h
+(shell's)f(paren)m(t)225 1327 y Fp(\017)60 b Ft(curren)m(t)30
+b(traps)g(set)h(b)m(y)f Fs(trap)225 1465 y Fp(\017)60
+b Ft(shell)30 b(parameters)f(that)h(are)g(set)g(b)m(y)g(v)-5
+b(ariable)30 b(assignmen)m(t)g(or)g(with)f Fs(set)f Ft(or)i(inherited)f
+(from)g(the)330 1574 y(shell's)i(paren)m(t)f(in)g(the)h(en)m(vironmen)m
+(t)225 1713 y Fp(\017)60 b Ft(shell)44 b(functions)f(de\014ned)f
+(during)h(execution)i(or)e(inherited)h(from)f(the)h(shell's)g(paren)m
+(t)f(in)h(the)330 1822 y(en)m(vironmen)m(t)225 1961 y
+Fp(\017)60 b Ft(options)33 b(enabled)g(at)h(in)m(v)m(o)s(cation)h
+(\(either)f(b)m(y)f(default)g(or)g(with)g(command-line)g(argumen)m
+(ts\))h(or)330 2070 y(b)m(y)c Fs(set)225 2208 y Fp(\017)60
+b Ft(options)31 b(enabled)f(b)m(y)g Fs(shopt)225 2347
+y Fp(\017)60 b Ft(shell)31 b(aliases)g(de\014ned)f(with)g
+Fs(alias)f Ft(\(see)i(Section)g(6.6)h([Aliases],)g(page)f(75\))225
+2485 y Fp(\017)60 b Ft(v)-5 b(arious)50 b(pro)s(cess)f
 Fl(id)p Ft(s,)55 b(including)49 b(those)i(of)e(bac)m(kground)h(jobs)f
-(\(see)i(Section)g(3.2.3)g([Lists],)330 1893 y(page)31
+(\(see)i(Section)g(3.2.3)g([Lists],)330 2595 y(page)31
 b(9\),)g(the)g(v)-5 b(alue)31 b(of)f Fs($$)p Ft(,)g(and)g(the)h(v)-5
-b(alue)31 b(of)f Fs($PPID)275 2045 y Ft(When)k(a)g(simple)h(command)f
+b(alue)31 b(of)f Fs($PPID)275 2765 y Ft(When)k(a)g(simple)h(command)f
 (other)g(than)g(a)h(builtin)f(or)g(shell)h(function)f(is)g(to)h(b)s(e)f
-(executed,)i(it)f(is)150 2154 y(in)m(v)m(ok)m(ed)25 b(in)f(a)g
+(executed,)i(it)f(is)150 2875 y(in)m(v)m(ok)m(ed)25 b(in)f(a)g
 (separate)h(execution)g(en)m(vironmen)m(t)g(that)f(consists)g(of)h(the)
-f(follo)m(wing.)40 b(Unless)24 b(otherwise)150 2264 y(noted,)31
+f(follo)m(wing.)40 b(Unless)24 b(otherwise)150 2984 y(noted,)31
 b(the)f(v)-5 b(alues)31 b(are)g(inherited)f(from)g(the)g(shell.)225
-2395 y Fp(\017)60 b Ft(the)31 b(shell's)h(op)s(en)e(\014les,)i(plus)e
+3127 y Fp(\017)60 b Ft(the)31 b(shell's)h(op)s(en)e(\014les,)i(plus)e
 (an)m(y)h(mo)s(di\014cations)h(and)e(additions)h(sp)s(eci\014ed)g(b)m
-(y)g(redirections)g(to)330 2504 y(the)g(command)225 2635
+(y)g(redirections)g(to)330 3236 y(the)g(command)225 3374
 y Fp(\017)60 b Ft(the)31 b(curren)m(t)f(w)m(orking)g(directory)225
-2766 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
-2897 y Fp(\017)60 b Ft(shell)32 b(v)-5 b(ariables)33
+3513 y Fp(\017)60 b Ft(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
+3651 y Fp(\017)60 b Ft(shell)32 b(v)-5 b(ariables)33
 b(and)e(functions)h(mark)m(ed)g(for)g(exp)s(ort,)g(along)h(with)f(v)-5
-b(ariables)32 b(exp)s(orted)g(for)g(the)330 3006 y(command,)e(passed)g
+b(ariables)32 b(exp)s(orted)g(for)g(the)330 3761 y(command,)e(passed)g
 (in)g(the)h(en)m(vironmen)m(t)g(\(see)g(Section)g(3.7.4)i([En)m
-(vironmen)m(t],)e(page)g(30\))225 3137 y Fp(\017)60 b
+(vironmen)m(t],)e(page)g(31\))225 3899 y Fp(\017)60 b
 Ft(traps)31 b(caugh)m(t)h(b)m(y)f(the)g(shell)h(are)f(reset)h(to)g(the)
 f(v)-5 b(alues)32 b(inherited)e(from)h(the)g(shell's)h(paren)m(t,)g
-(and)330 3247 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored)
-275 3399 y(A)41 b(command)g(in)m(v)m(ok)m(ed)i(in)e(this)h(separate)g
+(and)330 4008 y(traps)e(ignored)h(b)m(y)f(the)g(shell)h(are)g(ignored)
+275 4179 y(A)41 b(command)g(in)m(v)m(ok)m(ed)i(in)e(this)h(separate)g
 (en)m(vironmen)m(t)g(cannot)g(a\013ect)h(the)f(shell's)g(execution)150
-3508 y(en)m(vironmen)m(t.)275 3639 y(Command)35 b(substitution,)j
+4289 y(en)m(vironmen)m(t.)275 4431 y(Command)35 b(substitution,)j
 (commands)e(group)s(ed)f(with)i(paren)m(theses,)h(and)e(async)m
-(hronous)g(com-)150 3748 y(mands)c(are)h(in)m(v)m(ok)m(ed)i(in)d(a)i
+(hronous)g(com-)150 4540 y(mands)c(are)h(in)m(v)m(ok)m(ed)i(in)d(a)i
 (subshell)e(en)m(vironmen)m(t)h(that)h(is)f(a)g(duplicate)h(of)f(the)g
-(shell)g(en)m(vironmen)m(t,)150 3858 y(except)i(that)g(traps)f(caugh)m
+(shell)g(en)m(vironmen)m(t,)150 4650 y(except)i(that)g(traps)f(caugh)m
 (t)h(b)m(y)f(the)h(shell)f(are)g(reset)h(to)g(the)f(v)-5
 b(alues)35 b(that)g(the)f(shell)h(inherited)e(from)150
-3968 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49
+4760 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49
 b(Builtin)32 b(commands)g(that)h(are)g(in)m(v)m(ok)m(ed)h(as)e(part)g
-(of)h(a)f(pip)s(eline)g(are)h(also)150 4077 y(executed)41
+(of)h(a)f(pip)s(eline)g(are)h(also)150 4869 y(executed)41
 b(in)f(a)h(subshell)e(en)m(vironmen)m(t.)72 b(Changes)40
 b(made)g(to)h(the)g(subshell)e(en)m(vironmen)m(t)i(cannot)150
-4187 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275
-4318 y(If)38 b(a)h(command)f(is)g(follo)m(w)m(ed)j(b)m(y)d(a)h(`)p
+4979 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275
+5121 y(If)38 b(a)h(command)f(is)g(follo)m(w)m(ed)j(b)m(y)d(a)h(`)p
 Fs(&)p Ft(')g(and)f(job)g(con)m(trol)i(is)e(not)h(activ)m(e,)k(the)c
-(default)g(standard)150 4427 y(input)e(for)g(the)h(command)f(is)h(the)g
+(default)g(standard)150 5230 y(input)e(for)g(the)h(command)f(is)h(the)g
 (empt)m(y)g(\014le)f(`)p Fs(/dev/null)p Ft('.)61 b(Otherwise,)39
-b(the)f(in)m(v)m(ok)m(ed)h(command)150 4537 y(inherits)30
+b(the)f(in)m(v)m(ok)m(ed)h(command)150 5340 y(inherits)30
 b(the)h(\014le)f(descriptors)g(of)h(the)f(calling)i(shell)f(as)f(mo)s
-(di\014ed)g(b)m(y)g(redirections.)150 4750 y Fk(3.7.4)63
-b(En)m(vironmen)m(t)275 4990 y Ft(When)31 b(a)g(program)h(is)f(in)m(v)m
-(ok)m(ed)i(it)f(is)f(giv)m(en)h(an)g(arra)m(y)g(of)f(strings)g(called)i
-(the)e Fq(en)m(vironmen)m(t)p Ft(.)45 b(This)150 5100
-y(is)30 b(a)h(list)g(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f
-(form)g Fs(name=value)p Ft(.)275 5230 y(Bash)39 b(pro)m(vides)g(sev)m
-(eral)i(w)m(a)m(ys)g(to)f(manipulate)f(the)h(en)m(vironmen)m(t.)69
-b(On)38 b(in)m(v)m(o)s(cation,)44 b(the)c(shell)150 5340
-y(scans)g(its)h(o)m(wn)f(en)m(vironmen)m(t)h(and)f(creates)i(a)f
-(parameter)f(for)g(eac)m(h)i(name)e(found,)i(automatically)p
-eop end
+(di\014ed)g(b)m(y)g(redirections.)p eop end
 %%Page: 31 37
 TeXDict begin 31 36 bop 150 -116 a Ft(Chapter)30 b(3:)41
 b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(31)150 299
-y(marking)26 b(it)g(for)g Fq(exp)s(ort)h Ft(to)g(c)m(hild)f(pro)s
-(cesses.)39 b(Executed)26 b(commands)g(inherit)g(the)g(en)m(vironmen)m
-(t.)39 b(The)150 408 y Fs(export)c Ft(and)i(`)p Fs(declare)29
-b(-x)p Ft(')36 b(commands)h(allo)m(w)i(parameters)e(and)g(functions)g
-(to)h(b)s(e)e(added)h(to)h(and)150 518 y(deleted)21 b(from)f(the)h(en)m
+y Fk(3.7.4)63 b(En)m(vironmen)m(t)275 546 y Ft(When)31
+b(a)g(program)h(is)f(in)m(v)m(ok)m(ed)i(it)f(is)f(giv)m(en)h(an)g(arra)
+m(y)g(of)f(strings)g(called)i(the)e Fq(en)m(vironmen)m(t)p
+Ft(.)45 b(This)150 656 y(is)30 b(a)h(list)g(of)g(name-v)-5
+b(alue)31 b(pairs,)f(of)h(the)f(form)g Fs(name=value)p
+Ft(.)275 793 y(Bash)39 b(pro)m(vides)g(sev)m(eral)i(w)m(a)m(ys)g(to)f
+(manipulate)f(the)h(en)m(vironmen)m(t.)69 b(On)38 b(in)m(v)m(o)s
+(cation,)44 b(the)c(shell)150 903 y(scans)g(its)h(o)m(wn)f(en)m
+(vironmen)m(t)h(and)f(creates)i(a)f(parameter)f(for)g(eac)m(h)i(name)e
+(found,)i(automatically)150 1012 y(marking)26 b(it)g(for)g
+Fq(exp)s(ort)h Ft(to)g(c)m(hild)f(pro)s(cesses.)39 b(Executed)26
+b(commands)g(inherit)g(the)g(en)m(vironmen)m(t.)39 b(The)150
+1122 y Fs(export)c Ft(and)i(`)p Fs(declare)29 b(-x)p
+Ft(')36 b(commands)h(allo)m(w)i(parameters)e(and)g(functions)g(to)h(b)s
+(e)e(added)h(to)h(and)150 1231 y(deleted)21 b(from)f(the)h(en)m
 (vironmen)m(t.)38 b(If)20 b(the)h(v)-5 b(alue)21 b(of)g(a)g(parameter)g
 (in)f(the)g(en)m(vironmen)m(t)i(is)e(mo)s(di\014ed,)i(the)150
-628 y(new)31 b(v)-5 b(alue)32 b(b)s(ecomes)f(part)h(of)f(the)h(en)m
+1341 y(new)31 b(v)-5 b(alue)32 b(b)s(ecomes)f(part)h(of)f(the)h(en)m
 (vironmen)m(t,)g(replacing)h(the)e(old.)44 b(The)31 b(en)m(vironmen)m
-(t)h(inherited)150 737 y(b)m(y)f(an)m(y)g(executed)h(command)f
+(t)h(inherited)150 1451 y(b)m(y)f(an)m(y)g(executed)h(command)f
 (consists)g(of)g(the)g(shell's)h(initial)g(en)m(vironmen)m(t,)g(whose)f
-(v)-5 b(alues)31 b(ma)m(y)h(b)s(e)150 847 y(mo)s(di\014ed)26
+(v)-5 b(alues)31 b(ma)m(y)h(b)s(e)150 1560 y(mo)s(di\014ed)26
 b(in)g(the)h(shell,)h(less)f(an)m(y)g(pairs)f(remo)m(v)m(ed)i(b)m(y)f
 (the)g Fs(unset)e Ft(and)h(`)p Fs(export)j(-n)p Ft(')e(commands,)g
-(plus)150 956 y(an)m(y)k(additions)f(via)h(the)g Fs(export)d
-Ft(and)i(`)p Fs(declare)f(-x)p Ft(')h(commands.)275 1096
+(plus)150 1670 y(an)m(y)k(additions)f(via)h(the)g Fs(export)d
+Ft(and)i(`)p Fs(declare)f(-x)p Ft(')h(commands.)275 1807
 y(The)j(en)m(vironmen)m(t)i(for)f(an)m(y)g(simple)h(command)f(or)g
 (function)g(ma)m(y)g(b)s(e)g(augmen)m(ted)h(temp)s(orarily)150
-1205 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h
+1917 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h
 (as)e(describ)s(ed)g(in)g(Section)i(3.4)g([Shell)e(P)m(arameters],)150
-1315 y(page)g(15.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g
+2026 y(page)g(15.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g
 (a\013ect)f(only)g(the)f(en)m(vironmen)m(t)h(seen)g(b)m(y)f(that)h
-(command.)275 1455 y(If)h(the)i(`)p Fs(-k)p Ft(')f(option)h(is)f(set)h
+(command.)275 2164 y(If)h(the)i(`)p Fs(-k)p Ft(')f(option)h(is)f(set)h
 (\(see)g(Section)g(4.3)g([The)f(Set)h(Builtin],)g(page)g(53\),)h(then)e
-(all)h(parameter)150 1564 y(assignmen)m(ts)d(are)g(placed)h(in)e(the)h
+(all)h(parameter)150 2273 y(assignmen)m(ts)d(are)g(placed)h(in)e(the)h
 (en)m(vironmen)m(t)g(for)g(a)g(command,)f(not)h(just)f(those)i(that)f
-(precede)g(the)150 1674 y(command)g(name.)275 1813 y(When)f(Bash)h(in)m
+(precede)g(the)150 2383 y(command)g(name.)275 2521 y(When)f(Bash)h(in)m
 (v)m(ok)m(es)i(an)e(external)g(command,)g(the)g(v)-5
 b(ariable)31 b(`)p Fs($_)p Ft(')f(is)g(set)g(to)h(the)f(full)f(path)h
-(name)150 1923 y(of)h(the)f(command)g(and)g(passed)g(to)h(that)g
-(command)f(in)g(its)h(en)m(vironmen)m(t.)150 2157 y Fk(3.7.5)63
-b(Exit)40 b(Status)275 2406 y Ft(F)-8 b(or)32 b(the)g(shell's)g(purp)s
+(name)150 2630 y(of)h(the)f(command)g(and)g(passed)g(to)h(that)g
+(command)f(in)g(its)h(en)m(vironmen)m(t.)150 2860 y Fk(3.7.5)63
+b(Exit)40 b(Status)275 3107 y Ft(F)-8 b(or)32 b(the)g(shell's)g(purp)s
 (oses,)e(a)j(command)e(whic)m(h)h(exits)g(with)g(a)g(zero)g(exit)h
-(status)f(has)f(succeeded.)150 2516 y(A)e(non-zero)h(exit)g(status)g
+(status)f(has)f(succeeded.)150 3217 y(A)e(non-zero)h(exit)g(status)g
 (indicates)g(failure.)40 b(This)28 b(seemingly)i(coun)m(ter-in)m
-(tuitiv)m(e)i(sc)m(heme)e(is)f(used)g(so)150 2625 y(there)34
+(tuitiv)m(e)i(sc)m(heme)e(is)f(used)g(so)150 3327 y(there)34
 b(is)g(one)g(w)m(ell-de\014ned)g(w)m(a)m(y)g(to)h(indicate)g(success)f
 (and)f(a)h(v)-5 b(ariet)m(y)35 b(of)f(w)m(a)m(ys)h(to)f(indicate)h(v)-5
-b(arious)150 2735 y(failure)38 b(mo)s(des.)62 b(When)38
+b(arious)150 3436 y(failure)38 b(mo)s(des.)62 b(When)38
 b(a)g(command)f(terminates)i(on)e(a)i(fatal)g(signal)f(whose)g(n)m(um)m
-(b)s(er)e(is)i Fq(N)p Ft(,)g(Bash)150 2844 y(uses)30
+(b)s(er)e(is)i Fq(N)p Ft(,)g(Bash)150 3546 y(uses)30
 b(the)g(v)-5 b(alue)31 b(128)p Fs(+)p Fq(N)42 b Ft(as)30
-b(the)h(exit)g(status.)275 2984 y(If)k(a)h(command)g(is)g(not)g(found,)
+b(the)h(exit)g(status.)275 3683 y(If)k(a)h(command)g(is)g(not)g(found,)
 g(the)g(c)m(hild)h(pro)s(cess)e(created)i(to)g(execute)g(it)g(returns)d
-(a)j(status)f(of)150 3093 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)
+(a)j(status)f(of)150 3793 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)
 f(but)h(is)g(not)h(executable,)h(the)f(return)e(status)i(is)f(126.)275
-3233 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f
+3930 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f
 (during)g(expansion)h(or)g(redirection,)i(the)f(exit)g(status)150
-3342 y(is)c(greater)i(than)e(zero.)275 3482 y(The)38
+4040 y(is)c(greater)i(than)e(zero.)275 4177 y(The)38
 b(exit)h(status)g(is)g(used)f(b)m(y)g(the)h(Bash)g(conditional)h
-(commands)e(\(see)h(Section)h(3.2.4.2)h([Con-)150 3592
+(commands)e(\(see)h(Section)h(3.2.4.2)h([Con-)150 4287
 y(ditional)i(Constructs],)h(page)f(10\))g(and)e(some)i(of)f(the)g(list)
 g(constructs)g(\(see)h(Section)f(3.2.3)i([Lists],)150
-3701 y(page)31 b(9\).)275 3841 y(All)40 b(of)g(the)h(Bash)f(builtins)f
+4397 y(page)31 b(9\).)275 4534 y(All)40 b(of)g(the)h(Bash)f(builtins)f
 (return)g(an)h(exit)h(status)g(of)f(zero)h(if)f(they)g(succeed)g(and)g
-(a)g(non-zero)150 3950 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m
+(a)g(non-zero)150 4644 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m
 (y)g(b)s(e)f(used)g(b)m(y)g(the)h(conditional)h(and)e(list)h
-(constructs.)50 b(All)35 b(builtins)150 4060 y(return)29
+(constructs.)50 b(All)35 b(builtins)150 4753 y(return)29
 b(an)i(exit)g(status)g(of)f(2)h(to)g(indicate)g(incorrect)h(usage.)150
-4294 y Fk(3.7.6)63 b(Signals)275 4543 y Ft(When)27 b(Bash)h(is)h(in)m
+4983 y Fk(3.7.6)63 b(Signals)275 5230 y Ft(When)27 b(Bash)h(is)h(in)m
 (teractiv)m(e,)i(in)d(the)g(absence)h(of)f(an)m(y)g(traps,)h(it)f
 (ignores)h Fs(SIGTERM)d Ft(\(so)i(that)h(`)p Fs(kill)150
-4653 y(0)p Ft(')k(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j
+5340 y(0)p Ft(')k(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j
 (shell\),)f(and)d Fs(SIGINT)f Ft(is)i(caugh)m(t)h(and)f(handled)f(\(so)
-h(that)h(the)f Fs(wait)150 4762 y Ft(builtin)24 b(is)h(in)m
+h(that)h(the)f Fs(wait)p eop end
+%%Page: 32 38
+TeXDict begin 32 37 bop 150 -116 a Ft(32)2572 b(Bash)31
+b(Reference)g(Man)m(ual)150 299 y(builtin)24 b(is)h(in)m
 (terruptible\).)39 b(When)24 b(Bash)g(receiv)m(es)j(a)d
 Fs(SIGINT)p Ft(,)h(it)g(breaks)f(out)h(of)f(an)m(y)h(executing)h(lo)s
-(ops.)150 4872 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g
+(ops.)150 408 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g
 Fs(SIGQUIT)p Ft(.)42 b(If)32 b(job)f(con)m(trol)i(is)e(in)h(e\013ect)h
-(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 4981 y(page)f(85\),)h
+(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 518 y(page)f(85\),)h
 (Bash)e(ignores)h Fs(SIGTTIN)p Ft(,)e Fs(SIGTTOU)p Ft(,)g(and)g
-Fs(SIGTSTP)p Ft(.)275 5121 y(Non-builtin)i(commands)g(started)g(b)m(y)g
+Fs(SIGTSTP)p Ft(.)275 654 y(Non-builtin)i(commands)g(started)g(b)m(y)g
 (Bash)h(ha)m(v)m(e)g(signal)g(handlers)e(set)i(to)g(the)g(v)-5
-b(alues)31 b(inherited)150 5230 y(b)m(y)37 b(the)h(shell)g(from)f(its)h
+b(alues)31 b(inherited)150 763 y(b)m(y)37 b(the)h(shell)g(from)f(its)h
 (paren)m(t.)62 b(When)38 b(job)f(con)m(trol)i(is)e(not)h(in)f
-(e\013ect,)k(async)m(hronous)c(commands)150 5340 y(ignore)f
+(e\013ect,)k(async)m(hronous)c(commands)150 873 y(ignore)f
 Fs(SIGINT)e Ft(and)h Fs(SIGQUIT)e Ft(in)j(addition)f(to)i(these)f
-(inherited)f(handlers.)55 b(Commands)35 b(run)f(as)i(a)p
-eop end
-%%Page: 32 38
-TeXDict begin 32 37 bop 150 -116 a Ft(32)2572 b(Bash)31
-b(Reference)g(Man)m(ual)150 299 y(result)c(of)h(command)f(substitution)
-h(ignore)g(the)g(k)m(eyb)s(oard-generated)g(job)g(con)m(trol)h(signals)
-f Fs(SIGTTIN)p Ft(,)150 408 y Fs(SIGTTOU)p Ft(,)h(and)g
-Fs(SIGTSTP)p Ft(.)275 542 y(The)h(shell)i(exits)g(b)m(y)f(default)g(up)
-s(on)f(receipt)i(of)f(a)h Fs(SIGHUP)p Ft(.)42 b(Before)32
-b(exiting,)h(an)e(in)m(teractiv)m(e)j(shell)150 652 y(resends)41
-b(the)i Fs(SIGHUP)e Ft(to)i(all)g(jobs,)i(running)c(or)h(stopp)s(ed.)76
+(inherited)f(handlers.)55 b(Commands)35 b(run)f(as)i(a)150
+983 y(result)27 b(of)h(command)f(substitution)h(ignore)g(the)g(k)m(eyb)
+s(oard-generated)g(job)g(con)m(trol)h(signals)f Fs(SIGTTIN)p
+Ft(,)150 1092 y Fs(SIGTTOU)p Ft(,)h(and)g Fs(SIGTSTP)p
+Ft(.)275 1228 y(The)h(shell)i(exits)g(b)m(y)f(default)g(up)s(on)f
+(receipt)i(of)f(a)h Fs(SIGHUP)p Ft(.)42 b(Before)32 b(exiting,)h(an)e
+(in)m(teractiv)m(e)j(shell)150 1337 y(resends)41 b(the)i
+Fs(SIGHUP)e Ft(to)i(all)g(jobs,)i(running)c(or)h(stopp)s(ed.)76
 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g Fs(SIGCONT)d
-Ft(to)150 762 y(ensure)32 b(that)h(they)g(receiv)m(e)i(the)e
+Ft(to)150 1447 y(ensure)32 b(that)h(they)g(receiv)m(e)i(the)e
 Fs(SIGHUP)p Ft(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)g(from)
-g(sending)f(the)h Fs(SIGHUP)e Ft(signal)150 871 y(to)i(a)g(particular)g
-(job,)g(it)g(should)f(b)s(e)g(remo)m(v)m(ed)h(from)g(the)f(jobs)g
+g(sending)f(the)h Fs(SIGHUP)e Ft(signal)150 1557 y(to)i(a)g(particular)
+g(job,)g(it)g(should)f(b)s(e)g(remo)m(v)m(ed)h(from)g(the)f(jobs)g
 (table)i(with)e(the)h Fs(disown)e Ft(builtin)h(\(see)150
-981 y(Section)f(7.2)g([Job)f(Con)m(trol)h(Builtins],)g(page)g(86\))h
+1666 y(Section)f(7.2)g([Job)f(Con)m(trol)h(Builtins],)g(page)g(86\))h
 (or)e(mark)m(ed)g(to)h(not)f(receiv)m(e)i Fs(SIGHUP)d
-Ft(using)h Fs(disown)150 1090 y(-h)p Ft(.)275 1224 y(If)h(the)h
+Ft(using)h Fs(disown)150 1776 y(-h)p Ft(.)275 1912 y(If)h(the)h
 Fs(huponexit)d Ft(shell)k(option)f(has)g(b)s(een)f(set)h(with)g
 Fs(shopt)e Ft(\(see)j(Section)g(4.2)g([Bash)f(Builtins],)150
-1334 y(page)f(41\),)h(Bash)e(sends)g(a)h Fs(SIGHUP)d
+2021 y(page)f(41\),)h(Bash)e(sends)g(a)h Fs(SIGHUP)d
 Ft(to)j(all)h(jobs)e(when)f(an)h(in)m(teractiv)m(e)j(login)f(shell)e
-(exits.)275 1468 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g(command)f
+(exits.)275 2157 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g(command)f
 (to)i(complete)g(and)e(receiv)m(es)j(a)e(signal)h(for)e(whic)m(h)h(a)g
-(trap)150 1577 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g(not)g(b)s
+(trap)150 2266 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g(not)g(b)s
 (e)f(executed)i(un)m(til)f(the)g(command)f(completes.)55
-b(When)35 b(Bash)g(is)150 1687 y(w)m(aiting)j(for)f(an)g(async)m
+b(When)35 b(Bash)g(is)150 2376 y(w)m(aiting)j(for)f(an)g(async)m
 (hronous)g(command)g(via)h(the)f Fs(wait)f Ft(builtin,)i(the)g
-(reception)g(of)f(a)g(signal)h(for)150 1797 y(whic)m(h)d(a)g(trap)g
+(reception)g(of)f(a)g(signal)h(for)150 2486 y(whic)m(h)d(a)g(trap)g
 (has)g(b)s(een)f(set)h(will)h(cause)f(the)g Fs(wait)f
 Ft(builtin)h(to)g(return)f(immediately)i(with)f(an)g(exit)150
-1906 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h)
-f(the)h(trap)f(is)g(executed.)150 2162 y Fr(3.8)68 b(Shell)45
-b(Scripts)275 2405 y Ft(A)c(shell)h(script)g(is)g(a)g(text)h(\014le)f
+2595 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h)
+f(the)h(trap)f(is)g(executed.)150 2856 y Fr(3.8)68 b(Shell)45
+b(Scripts)275 3101 y Ft(A)c(shell)h(script)g(is)g(a)g(text)h(\014le)f
 (con)m(taining)h(shell)f(commands.)75 b(When)41 b(suc)m(h)h(a)g(\014le)
-g(is)g(used)f(as)150 2515 y(the)33 b(\014rst)f(non-option)h(argumen)m
+g(is)g(used)f(as)150 3211 y(the)33 b(\014rst)f(non-option)h(argumen)m
 (t)h(when)e(in)m(v)m(oking)i(Bash,)g(and)e(neither)h(the)g(`)p
 Fs(-c)p Ft(')g(nor)g(`)p Fs(-s)p Ft(')f(option)i(is)150
-2625 y(supplied)j(\(see)j(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)h
+3320 y(supplied)j(\(see)j(Section)g(6.1)f([In)m(v)m(oking)h(Bash],)h
 (page)f(67\),)i(Bash)d(reads)f(and)g(executes)i(commands)150
-2734 y(from)31 b(the)h(\014le,)h(then)e(exits.)46 b(This)31
+3430 y(from)31 b(the)h(\014le,)h(then)e(exits.)46 b(This)31
 b(mo)s(de)g(of)h(op)s(eration)h(creates)g(a)f(non-in)m(teractiv)m(e)i
-(shell.)45 b(The)32 b(shell)150 2844 y(\014rst)26 b(searc)m(hes)h(for)f
+(shell.)45 b(The)32 b(shell)150 3539 y(\014rst)26 b(searc)m(hes)h(for)f
 (the)g(\014le)h(in)f(the)g(curren)m(t)h(directory)-8
 b(,)28 b(and)e(lo)s(oks)g(in)h(the)f(directories)h(in)f
-Fs($PATH)f Ft(if)i(not)150 2953 y(found)i(there.)275
-3087 y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f
+Fs($PATH)f Ft(if)i(not)150 3649 y(found)i(there.)275
+3785 y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f
 (sp)s(ecial)i(parameter)f Fs(0)f Ft(to)h(the)g(name)g(of)g(the)g
-(\014le,)150 3197 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j
+(\014le,)150 3894 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j
 (and)d(the)h(p)s(ositional)g(parameters)f(are)h(set)g(to)g(the)g
-(remain-)150 3306 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m
+(remain-)150 4004 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m
 (en.)67 b(If)39 b(no)g(additional)g(argumen)m(ts)h(are)f(supplied,)h
-(the)f(p)s(ositional)150 3416 y(parameters)31 b(are)f(unset.)275
-3550 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m
+(the)f(p)s(ositional)150 4113 y(parameters)31 b(are)f(unset.)275
+4249 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m
 (y)e(using)g(the)h Fs(chmod)e Ft(command)h(to)h(turn)e(on)i(the)150
-3660 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h
+4359 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h
 (\014le)f(while)g(searc)m(hing)h(the)f Fs($PATH)f Ft(for)h(a)h
-(command,)h(it)150 3769 y(spa)m(wns)30 b(a)g(subshell)g(to)h(execute)h
-(it.)41 b(In)30 b(other)g(w)m(ords,)g(executing)390 3903
-y Fs(filename)46 b Fj(arguments)150 4037 y Ft(is)30 b(equiv)-5
-b(alen)m(t)32 b(to)f(executing)390 4171 y Fs(bash)47
-b(filename)e Fj(arguments)150 4305 y Ft(if)30 b Fs(filename)d
+(command,)h(it)150 4468 y(spa)m(wns)30 b(a)g(subshell)g(to)h(execute)h
+(it.)41 b(In)30 b(other)g(w)m(ords,)g(executing)390 4604
+y Fs(filename)46 b Fj(arguments)150 4740 y Ft(is)30 b(equiv)-5
+b(alen)m(t)32 b(to)f(executing)390 4875 y Fs(bash)47
+b(filename)e Fj(arguments)150 5011 y Ft(if)30 b Fs(filename)d
 Ft(is)j(an)f(executable)j(shell)e(script.)40 b(This)29
 b(subshell)g(reinitializes)i(itself,)g(so)f(that)h(the)e(e\013ect)150
-4415 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een)g(in)m(v)m(ok)
+5121 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een)g(in)m(v)m(ok)
 m(ed)h(to)h(in)m(terpret)e(the)h(script,)h(with)e(the)h(exception)h
-(that)f(the)150 4524 y(lo)s(cations)25 b(of)g(commands)e(remem)m(b)s
+(that)f(the)150 5230 y(lo)s(cations)25 b(of)g(commands)e(remem)m(b)s
 (ered)h(b)m(y)g(the)g(paren)m(t)g(\(see)h(the)f(description)g(of)g
-Fs(hash)f Ft(in)h(Section)h(4.1)150 4634 y([Bourne)30
+Fs(hash)f Ft(in)h(Section)h(4.1)150 5340 y([Bourne)30
 b(Shell)h(Builtins],)g(page)g(35\))h(are)e(retained)h(b)m(y)f(the)h(c)m
-(hild.)275 4768 y(Most)36 b(v)m(ersions)g(of)g(Unix)f(mak)m(e)h(this)g
-(a)g(part)f(of)h(the)g(op)s(erating)g(system's)f(command)h(execution)
-150 4877 y(mec)m(hanism.)50 b(If)33 b(the)g(\014rst)g(line)h(of)f(a)h
+(hild.)p eop end
+%%Page: 33 39
+TeXDict begin 33 38 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(33)275 299
+y(Most)36 b(v)m(ersions)g(of)g(Unix)f(mak)m(e)h(this)g(a)g(part)f(of)h
+(the)g(op)s(erating)g(system's)f(command)h(execution)150
+408 y(mec)m(hanism.)50 b(If)33 b(the)g(\014rst)g(line)h(of)f(a)h
 (script)f(b)s(egins)g(with)g(the)g(t)m(w)m(o)i(c)m(haracters)g(`)p
-Fs(#!)p Ft(',)f(the)g(remainder)150 4987 y(of)d(the)g(line)h(sp)s
+Fs(#!)p Ft(',)f(the)g(remainder)150 518 y(of)d(the)g(line)h(sp)s
 (eci\014es)e(an)h(in)m(terpreter)g(for)g(the)g(program.)43
 b(Th)m(us,)30 b(y)m(ou)h(can)h(sp)s(ecify)e(Bash,)i Fs(awk)p
-Ft(,)e(P)m(erl,)150 5096 y(or)g(some)h(other)g(in)m(terpreter)g(and)e
+Ft(,)e(P)m(erl,)150 628 y(or)g(some)h(other)g(in)m(terpreter)g(and)e
 (write)i(the)f(rest)h(of)g(the)f(script)g(\014le)h(in)f(that)h
-(language.)275 5230 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m
-(terpreter)g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h
-(follo)m(wing)g(the)150 5340 y(in)m(terpreter)33 b(name)h(on)f(the)g
-(\014rst)f(line)i(of)f(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)
-e(the)g(name)g(of)g(the)h(script)f(\014le,)p eop end
-%%Page: 33 39
-TeXDict begin 33 38 bop 150 -116 a Ft(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(33)150 299
-y(follo)m(w)m(ed)33 b(b)m(y)f(the)f(rest)h(of)g(the)f(argumen)m(ts.)45
-b(Bash)31 b(will)h(p)s(erform)e(this)i(action)h(on)e(op)s(erating)h
-(systems)150 408 y(that)24 b(do)g(not)f(handle)g(it)h(themselv)m(es.)40
+(language.)275 762 y(The)40 b(argumen)m(ts)h(to)g(the)g(in)m(terpreter)
+g(consist)g(of)g(a)g(single)h(optional)f(argumen)m(t)h(follo)m(wing)g
+(the)150 872 y(in)m(terpreter)33 b(name)h(on)f(the)g(\014rst)f(line)i
+(of)f(the)g(script)g(\014le,)h(follo)m(w)m(ed)h(b)m(y)e(the)g(name)g
+(of)g(the)h(script)f(\014le,)150 981 y(follo)m(w)m(ed)g(b)m(y)f(the)f
+(rest)h(of)g(the)f(argumen)m(ts.)45 b(Bash)31 b(will)h(p)s(erform)e
+(this)i(action)h(on)e(op)s(erating)h(systems)150 1091
+y(that)24 b(do)g(not)f(handle)g(it)h(themselv)m(es.)40
 b(Note)25 b(that)f(some)g(older)g(v)m(ersions)f(of)h(Unix)f(limit)i
-(the)f(in)m(terpreter)150 518 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g
-(maxim)m(um)f(of)h(32)g(c)m(haracters.)275 653 y(Bash)h(scripts)g
+(the)f(in)m(terpreter)150 1200 y(name)30 b(and)g(argumen)m(t)h(to)g(a)g
+(maxim)m(um)f(of)h(32)g(c)m(haracters.)275 1335 y(Bash)h(scripts)g
 (often)g(b)s(egin)g(with)g Fs(#!)e(/bin/bash)g Ft(\(assuming)i(that)h
-(Bash)f(has)g(b)s(een)f(installed)i(in)150 762 y(`)p
+(Bash)f(has)g(b)s(een)f(installed)i(in)150 1445 y(`)p
 Fs(/bin)p Ft('\),)25 b(since)e(this)g(ensures)f(that)i(Bash)f(will)h(b)
 s(e)e(used)h(to)h(in)m(terpret)f(the)g(script,)i(ev)m(en)f(if)f(it)h
-(is)f(executed)150 872 y(under)29 b(another)h(shell.)p
+(is)f(executed)150 1554 y(under)29 b(another)h(shell.)p
 eop end
 %%Page: 34 40
 TeXDict begin 34 39 bop 150 -116 a Ft(34)2572 b(Bash)31
@@ -7093,27 +7431,26 @@ y(read)35 b(and)g(executed,)j(and)d(its)h(exit)g(status)g(returned)e
 (argumen)m(ts,)g(the)f(return)g(status)g(is)h(zero.)150
 3148 y Fs(exec)870 3280 y(exec)47 b([-cl])f([-a)h Fj(name)11
 b Fs(])46 b([)p Fj(command)56 b Fs([)p Fj(arguments)11
-b Fs(]])630 3411 y Ft(If)28 b Fq(command)j Ft(is)e(supplied,)e(it)i
-(replaces)g(the)f(shell)h(without)f(creating)i(a)e(new)g(pro)s(cess.)39
-b(If)630 3521 y(the)25 b(`)p Fs(-l)p Ft(')f(option)i(is)e(supplied,)h
-(the)g(shell)g(places)g(a)g(dash)f(at)i(the)f(b)s(eginning)f(of)g(the)h
-(zeroth)630 3630 y(arg)h(passed)f(to)h Fq(command)p Ft(.)39
-b(This)24 b(is)i(what)f(the)h Fs(login)d Ft(program)j(do)s(es.)38
-b(The)25 b(`)p Fs(-c)p Ft(')g(option)630 3740 y(causes)g
-Fq(command)i Ft(to)e(b)s(e)f(executed)h(with)f(an)g(empt)m(y)h(en)m
-(vironmen)m(t.)39 b(If)24 b(`)p Fs(-a)p Ft(')g(is)g(supplied,)630
-3850 y(the)32 b(shell)g(passes)g Fq(name)37 b Ft(as)c(the)f(zeroth)h
-(argumen)m(t)f(to)h Fq(command)p Ft(.)45 b(If)32 b(no)g
-Fq(command)j Ft(is)630 3959 y(sp)s(eci\014ed,)g(redirections)g(ma)m(y)g
-(b)s(e)f(used)f(to)i(a\013ect)h(the)f(curren)m(t)f(shell)h(en)m
-(vironmen)m(t.)53 b(If)630 4069 y(there)34 b(are)h(no)f(redirection)h
-(errors,)g(the)f(return)f(status)i(is)f(zero;)j(otherwise)e(the)f
-(return)630 4178 y(status)d(is)f(non-zero.)150 4332 y
-Fs(exit)870 4463 y(exit)47 b([)p Fj(n)11 b Fs(])630 4595
-y Ft(Exit)30 b(the)g(shell,)h(returning)d(a)j(status)f(of)g
-Fq(n)f Ft(to)h(the)g(shell's)g(paren)m(t.)41 b(If)30
-b Fq(n)f Ft(is)h(omitted,)h(the)630 4704 y(exit)c(status)g(is)g(that)g
-(of)g(the)g(last)g(command)f(executed.)41 b(An)m(y)26
+b Fs(]])630 3411 y Ft(If)36 b Fq(command)k Ft(is)c(supplied,)h(it)g
+(replaces)h(the)e(shell)h(without)f(creating)i(a)f(new)f(pro)s(cess.)
+630 3521 y(If)h(the)g(`)p Fs(-l)p Ft(')g(option)h(is)f(supplied,)g(the)
+h(shell)f(places)h(a)g(dash)e(at)i(the)f(b)s(eginning)f(of)i(the)630
+3630 y(zeroth)e(argumen)m(t)h(passed)e(to)h Fq(command)p
+Ft(.)57 b(This)35 b(is)h(what)f(the)h Fs(login)e Ft(program)i(do)s(es.)
+630 3740 y(The)d(`)p Fs(-c)p Ft(')h(option)g(causes)g
+Fq(command)j Ft(to)e(b)s(e)e(executed)i(with)e(an)h(empt)m(y)g(en)m
+(vironmen)m(t.)630 3850 y(If)d(`)p Fs(-a)p Ft(')h(is)g(supplied,)f(the)
+h(shell)g(passes)f Fq(name)37 b Ft(as)32 b(the)g(zeroth)g(argumen)m(t)g
+(to)h Fq(command)p Ft(.)630 3959 y(If)45 b(no)g Fq(command)k
+Ft(is)c(sp)s(eci\014ed,)k(redirections)d(ma)m(y)g(b)s(e)f(used)f(to)j
+(a\013ect)g(the)e(curren)m(t)630 4069 y(shell)33 b(en)m(vironmen)m(t.)
+48 b(If)32 b(there)h(are)g(no)f(redirection)h(errors,)g(the)g(return)e
+(status)i(is)g(zero;)630 4178 y(otherwise)e(the)f(return)g(status)g(is)
+h(non-zero.)150 4332 y Fs(exit)870 4463 y(exit)47 b([)p
+Fj(n)11 b Fs(])630 4595 y Ft(Exit)30 b(the)g(shell,)h(returning)d(a)j
+(status)f(of)g Fq(n)f Ft(to)h(the)g(shell's)g(paren)m(t.)41
+b(If)30 b Fq(n)f Ft(is)h(omitted,)h(the)630 4704 y(exit)c(status)g(is)g
+(that)g(of)g(the)g(last)g(command)f(executed.)41 b(An)m(y)26
 b(trap)h(on)f Fs(EXIT)f Ft(is)i(executed)630 4814 y(b)s(efore)j(the)h
 (shell)f(terminates.)150 4967 y Fs(export)870 5099 y(export)46
 b([-fn])g([-p])h([)p Fj(name)11 b Fs([=)p Fj(value)g
@@ -7519,11 +7856,11 @@ b(curren)m(t)f(Readline)h(\(see)g(Chapter)f(8)g([Command)g(Line)g
 (bindings,)i(bind)d(a)i(k)m(ey)g(sequence)g(to)h(a)f(Readline)g
 (function)f(or)h(macro,)630 5121 y(or)44 b(set)h(a)g(Readline)f(v)-5
 b(ariable.)83 b(Eac)m(h)45 b(non-option)g(argumen)m(t)f(is)g(a)h
-(command)f(as)g(it)630 5230 y(w)m(ould)35 b(app)s(ear)f(in)g(a)i(a)f
-(Readline)g(initialization)j(\014le)d(\(see)h(Section)f(8.3)h
-([Readline)g(Init)630 5340 y(File],)43 b(page)c(92\),)k(but)38
-b(eac)m(h)i(binding)e(or)h(command)g(m)m(ust)g(b)s(e)f(passed)g(as)i(a)
-f(separate)p eop end
+(command)f(as)g(it)630 5230 y(w)m(ould)e(app)s(ear)f(in)h(a)h(Readline)
+g(initialization)i(\014le)d(\(see)h(Section)g(8.3)g([Readline)g(Init)
+630 5340 y(File],)g(page)c(92\),)k(but)38 b(eac)m(h)i(binding)e(or)h
+(command)g(m)m(ust)g(b)s(e)f(passed)g(as)i(a)f(separate)p
+eop end
 %%Page: 42 48
 TeXDict begin 42 47 bop 150 -116 a Ft(42)2572 b(Bash)31
 b(Reference)g(Man)m(ual)630 299 y(argumen)m(t;)36 b(e.g.,)f(`)p
@@ -7666,215 +8003,220 @@ b(Reference)g(Man)m(ual)630 299 y Fs(-r)384 b Ft(Mak)m(e)25
 b Fq(name)5 b Ft(s)23 b(readonly)-8 b(.)39 b(These)24
 b(names)f(cannot)h(then)f(b)s(e)g(assigned)h(v)-5 b(alues)1110
 408 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h(statemen)m(ts)h(or)f
-(unset.)630 573 y Fs(-t)384 b Ft(Giv)m(e)33 b(eac)m(h)h
+(unset.)630 569 y Fs(-t)384 b Ft(Giv)m(e)33 b(eac)m(h)h
 Fq(name)j Ft(the)32 b Fs(trace)f Ft(attribute.)46 b(T)-8
-b(raced)32 b(functions)g(inherit)g(the)1110 682 y Fs(DEBUG)26
+b(raced)32 b(functions)g(inherit)g(the)1110 679 y Fs(DEBUG)26
 b Ft(and)h Fs(RETURN)f Ft(traps)h(from)g(the)h(calling)h(shell.)40
-b(The)27 b(trace)i(attribute)1110 792 y(has)h(no)g(sp)s(ecial)h
-(meaning)g(for)f(v)-5 b(ariables.)630 956 y Fs(-x)384
+b(The)27 b(trace)i(attribute)1110 788 y(has)h(no)g(sp)s(ecial)h
+(meaning)g(for)f(v)-5 b(ariables.)630 949 y Fs(-x)384
 b Ft(Mark)30 b(eac)m(h)h Fq(name)k Ft(for)29 b(exp)s(ort)h(to)g
 (subsequen)m(t)f(commands)h(via)g(the)g(en)m(vi-)1110
-1066 y(ronmen)m(t.)630 1230 y(Using)25 b(`)p Fs(+)p Ft(')g(instead)h
-(of)f(`)p Fs(-)p Ft(')g(turns)f(o\013)h(the)g(attribute)h(instead.)39
-b(When)25 b(used)f(in)h(a)g(function,)630 1340 y Fs(declare)37
-b Ft(mak)m(es)i(eac)m(h)h Fq(name)k Ft(lo)s(cal,)f(as)38
-b(with)h(the)g Fs(local)e Ft(command.)66 b(If)38 b(a)h(v)-5
-b(ariable)630 1450 y(name)30 b(is)h(follo)m(w)m(ed)h(b)m(y)e(=)p
-Fq(v)-5 b(alue)p Ft(,)31 b(the)f(v)-5 b(alue)31 b(of)g(the)f(v)-5
-b(ariable)32 b(is)e(set)h(to)g Fq(v)-5 b(alue)p Ft(.)630
-1587 y(The)35 b(return)f(status)i(is)g(zero)g(unless)f(an)g(in)m(v)-5
-b(alid)36 b(option)g(is)g(encoun)m(tered,)h(an)f(attempt)630
-1696 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f(`)p
-Fs(-f)f(foo=bar)p Ft(',)h(an)h(attempt)g(is)g(made)g(to)h(assign)630
-1806 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5
+1059 y(ronmen)m(t.)630 1219 y(Using)e(`)p Fs(+)p Ft(')h(instead)f(of)g
+(`)p Fs(-)p Ft(')g(turns)f(o\013)i(the)f(attribute)h(instead,)g(with)f
+(the)g(exceptions)h(that)630 1329 y(`)p Fs(+a)p Ft(')h(ma)m(y)h(not)f
+(b)s(e)f(used)g(to)i(destro)m(y)g(an)f(arra)m(y)g(v)-5
+b(ariable)31 b(and)f(`)p Fs(+r)p Ft(')g(will)g(not)g(remo)m(v)m(e)i
+(the)630 1439 y(readonly)e(attribute.)41 b(When)30 b(used)f(in)g(a)h
+(function,)g Fs(declare)e Ft(mak)m(es)j(eac)m(h)f Fq(name)35
+b Ft(lo)s(cal,)630 1548 y(as)24 b(with)g(the)g Fs(local)e
+Ft(command.)39 b(If)23 b(a)i(v)-5 b(ariable)24 b(name)g(is)g(follo)m(w)
+m(ed)i(b)m(y)e(=)p Fq(v)-5 b(alue)p Ft(,)25 b(the)f(v)-5
+b(alue)630 1658 y(of)31 b(the)f(v)-5 b(ariable)31 b(is)g(set)g(to)g
+Fq(v)-5 b(alue)p Ft(.)630 1793 y(The)35 b(return)f(status)i(is)g(zero)g
+(unless)f(an)g(in)m(v)-5 b(alid)36 b(option)g(is)g(encoun)m(tered,)h
+(an)f(attempt)630 1903 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g
+(using)f(`)p Fs(-f)f(foo=bar)p Ft(',)h(an)h(attempt)g(is)g(made)g(to)h
+(assign)630 2012 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5
 b(ariable,)47 b(an)42 b(attempt)h(is)f(made)g(to)h(assign)f(a)h(v)-5
-b(alue)42 b(to)h(an)630 1915 y(arra)m(y)30 b(v)-5 b(ariable)30
+b(alue)42 b(to)h(an)630 2122 y(arra)m(y)30 b(v)-5 b(ariable)30
 b(without)g(using)e(the)i(comp)s(ound)e(assignmen)m(t)i(syn)m(tax)g
-(\(see)h(Section)f(6.7)630 2025 y([Arra)m(ys],)47 b(page)c(76\),)48
+(\(see)h(Section)f(6.7)630 2231 y([Arra)m(ys],)47 b(page)c(76\),)48
 b(one)43 b(of)g(the)g Fq(names)k Ft(is)c(not)g(a)g(v)-5
 b(alid)43 b(shell)g(v)-5 b(ariable)44 b(name,)i(an)630
-2134 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)g
+2341 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)g
 (for)g(a)h(readonly)f(v)-5 b(ariable,)29 b(an)e(attempt)630
-2244 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g
+2450 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g
 (arra)m(y)h(v)-5 b(ariable,)30 b(or)e(an)g(attempt)i(is)e(made)g(to)630
-2354 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g(`)p
-Fs(-f)p Ft('.)150 2518 y Fs(echo)870 2655 y(echo)47 b([-neE])f([)p
-Fj(arg)57 b Fs(...)o(])630 2792 y Ft(Output)31 b(the)i
+2560 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g(`)p
+Fs(-f)p Ft('.)150 2721 y Fs(echo)870 2856 y(echo)47 b([-neE])f([)p
+Fj(arg)57 b Fs(...)o(])630 2991 y Ft(Output)31 b(the)i
 Fq(arg)8 b Ft(s,)33 b(separated)g(b)m(y)g(spaces,)g(terminated)g(with)f
-(a)h(newline.)47 b(The)32 b(return)630 2902 y(status)40
+(a)h(newline.)47 b(The)32 b(return)630 3101 y(status)40
 b(is)g(alw)m(a)m(ys)h(0.)69 b(If)39 b(`)p Fs(-n)p Ft(')h(is)f(sp)s
 (eci\014ed,)j(the)e(trailing)h(newline)e(is)h(suppressed.)66
-b(If)630 3011 y(the)29 b(`)p Fs(-e)p Ft(')g(option)g(is)h(giv)m(en,)g
+b(If)630 3210 y(the)29 b(`)p Fs(-e)p Ft(')g(option)g(is)h(giv)m(en,)g
 (in)m(terpretation)g(of)g(the)f(follo)m(wing)h(bac)m(kslash-escap)s(ed)
-g(c)m(har-)630 3121 y(acters)38 b(is)f(enabled.)60 b(The)36
+g(c)m(har-)630 3320 y(acters)38 b(is)f(enabled.)60 b(The)36
 b(`)p Fs(-E)p Ft(')h(option)g(disables)g(the)g(in)m(terpretation)h(of)f
-(these)g(escap)s(e)630 3230 y(c)m(haracters,)h(ev)m(en)d(on)g(systems)g
+(these)g(escap)s(e)630 3429 y(c)m(haracters,)h(ev)m(en)d(on)g(systems)g
 (where)f(they)h(are)g(in)m(terpreted)h(b)m(y)e(default.)55
-b(The)34 b Fs(xpg_)630 3340 y(echo)d Ft(shell)h(option)h(ma)m(y)g(b)s
+b(The)34 b Fs(xpg_)630 3539 y(echo)d Ft(shell)h(option)h(ma)m(y)g(b)s
 (e)e(used)h(to)h(dynamically)g(determine)f(whether)f(or)i(not)f
-Fs(echo)630 3450 y Ft(expands)39 b(these)i(escap)s(e)g(c)m(haracters)g
+Fs(echo)630 3649 y Ft(expands)39 b(these)i(escap)s(e)g(c)m(haracters)g
 (b)m(y)g(default.)70 b Fs(echo)39 b Ft(do)s(es)h(not)g(in)m(terpret)h
-(`)p Fs(--)p Ft(')f(to)630 3559 y(mean)30 b(the)h(end)f(of)g(options.)
-630 3696 y Fs(echo)f Ft(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)
-f(sequences:)630 3861 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630
-4025 y Fs(\\b)384 b Ft(bac)m(kspace)630 4189 y Fs(\\c)g
-Ft(suppress)28 b(trailing)k(newline)630 4354 y Fs(\\e)384
-b Ft(escap)s(e)630 4518 y Fs(\\f)g Ft(form)30 b(feed)630
-4682 y Fs(\\n)384 b Ft(new)30 b(line)630 4847 y Fs(\\r)384
-b Ft(carriage)32 b(return)630 5011 y Fs(\\t)384 b Ft(horizon)m(tal)32
-b(tab)630 5176 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630
-5340 y Fs(\\\\)384 b Ft(bac)m(kslash)p eop end
+(`)p Fs(--)p Ft(')f(to)630 3758 y(mean)30 b(the)h(end)f(of)g(options.)
+630 3893 y Fs(echo)f Ft(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)
+f(sequences:)630 4054 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630
+4215 y Fs(\\b)384 b Ft(bac)m(kspace)630 4376 y Fs(\\c)g
+Ft(suppress)28 b(trailing)k(newline)630 4536 y Fs(\\e)384
+b Ft(escap)s(e)630 4697 y Fs(\\f)g Ft(form)30 b(feed)630
+4858 y Fs(\\n)384 b Ft(new)30 b(line)630 5019 y Fs(\\r)384
+b Ft(carriage)32 b(return)630 5179 y Fs(\\t)384 b Ft(horizon)m(tal)32
+b(tab)630 5340 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)p
+eop end
 %%Page: 45 51
 TeXDict begin 45 50 bop 150 -116 a Ft(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(45)630 299 y Fs(\\0)p
-Fj(nnn)240 b Ft(the)32 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e(v)-5
-b(alue)33 b(is)f(the)g(o)s(ctal)i(v)-5 b(alue)32 b Fq(nnn)f
-Ft(\(zero)i(to)1110 408 y(three)e(o)s(ctal)g(digits\))630
-568 y Fs(\\x)p Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)h(c)m(haracter)g
-(whose)e(v)-5 b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5
-b(alue)40 b Fq(HH)1110 677 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e
-(digits\))150 837 y Fs(enable)870 971 y(enable)46 b([-n])h([-p])f([-f)h
+b(Shell)30 b(Builtin)h(Commands)2069 b(45)630 299 y Fs(\\\\)384
+b Ft(bac)m(kslash)630 454 y Fs(\\0)p Fj(nnn)240 b Ft(the)32
+b(eigh)m(t-bit)i(c)m(haracter)g(whose)e(v)-5 b(alue)33
+b(is)f(the)g(o)s(ctal)i(v)-5 b(alue)32 b Fq(nnn)f Ft(\(zero)i(to)1110
+564 y(three)e(o)s(ctal)g(digits\))630 719 y Fs(\\x)p
+Fj(HH)288 b Ft(the)40 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5
+b(alue)39 b(is)h(the)f(hexadecimal)i(v)-5 b(alue)40 b
+Fq(HH)1110 829 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))150
+984 y Fs(enable)870 1116 y(enable)46 b([-n])h([-p])f([-f)h
 Fj(filename)11 b Fs(])45 b([-ads])h([)p Fj(name)57 b
-Fs(...)o(])630 1106 y Ft(Enable)36 b(and)f(disable)h(builtin)g(shell)g
+Fs(...)o(])630 1249 y Ft(Enable)36 b(and)f(disable)h(builtin)g(shell)g
 (commands.)56 b(Disabling)37 b(a)g(builtin)e(allo)m(ws)i(a)f(disk)630
-1215 y(command)e(whic)m(h)g(has)g(the)g(same)h(name)f(as)h(a)f(shell)h
-(builtin)e(to)i(b)s(e)f(executed)h(without)630 1325 y(sp)s(ecifying)27
+1358 y(command)e(whic)m(h)g(has)g(the)g(same)h(name)f(as)h(a)f(shell)h
+(builtin)e(to)i(b)s(e)f(executed)h(without)630 1468 y(sp)s(ecifying)27
 b(a)g(full)g(pathname,)g(ev)m(en)h(though)f(the)g(shell)g(normally)g
-(searc)m(hes)h(for)f(builtins)630 1435 y(b)s(efore)32
+(searc)m(hes)h(for)f(builtins)630 1577 y(b)s(efore)32
 b(disk)f(commands.)46 b(If)31 b(`)p Fs(-n)p Ft(')h(is)g(used,)g(the)g
 Fq(name)5 b Ft(s)32 b(b)s(ecome)h(disabled.)45 b(Otherwise)630
-1544 y Fq(name)5 b Ft(s)44 b(are)h(enabled.)82 b(F)-8
+1687 y Fq(name)5 b Ft(s)44 b(are)h(enabled.)82 b(F)-8
 b(or)45 b(example,)k(to)c(use)f(the)g Fs(test)f Ft(binary)h(found)f
-(via)h Fs($PATH)630 1654 y Ft(instead)31 b(of)f(the)h(shell)f(builtin)g
+(via)h Fs($PATH)630 1797 y Ft(instead)31 b(of)f(the)h(shell)f(builtin)g
 (v)m(ersion,)h(t)m(yp)s(e)g(`)p Fs(enable)e(-n)h(test)p
-Ft('.)630 1788 y(If)42 b(the)h(`)p Fs(-p)p Ft(')f(option)h(is)f
+Ft('.)630 1929 y(If)42 b(the)h(`)p Fs(-p)p Ft(')f(option)h(is)f
 (supplied,)j(or)d(no)h Fq(name)k Ft(argumen)m(ts)c(app)s(ear,)i(a)e
-(list)g(of)g(shell)630 1898 y(builtins)37 b(is)h(prin)m(ted.)63
+(list)g(of)g(shell)630 2039 y(builtins)37 b(is)h(prin)m(ted.)63
 b(With)38 b(no)f(other)h(argumen)m(ts,)j(the)d(list)g(consists)g(of)g
-(all)h(enabled)630 2007 y(shell)33 b(builtins.)46 b(The)32
+(all)h(enabled)630 2148 y(shell)33 b(builtins.)46 b(The)32
 b(`)p Fs(-a)p Ft(')h(option)g(means)f(to)i(list)f(eac)m(h)h(builtin)e
-(with)g(an)g(indication)i(of)630 2117 y(whether)c(or)g(not)h(it)g(is)f
-(enabled.)630 2252 y(The)40 b(`)p Fs(-f)p Ft(')g(option)g(means)g(to)h
+(with)g(an)g(indication)i(of)630 2258 y(whether)c(or)g(not)h(it)g(is)f
+(enabled.)630 2390 y(The)40 b(`)p Fs(-f)p Ft(')g(option)g(means)g(to)h
 (load)g(the)f(new)f(builtin)h(command)g Fq(name)45 b
-Ft(from)40 b(shared)630 2361 y(ob)5 b(ject)27 b Fq(\014lename)p
+Ft(from)40 b(shared)630 2500 y(ob)5 b(ject)27 b Fq(\014lename)p
 Ft(,)g(on)f(systems)g(that)h(supp)s(ort)d(dynamic)i(loading.)40
-b(The)26 b(`)p Fs(-d)p Ft(')g(option)h(will)630 2471
+b(The)26 b(`)p Fs(-d)p Ft(')g(option)h(will)630 2609
 y(delete)32 b(a)e(builtin)g(loaded)h(with)f(`)p Fs(-f)p
-Ft('.)630 2605 y(If)h(there)g(are)g(no)g(options,)h(a)f(list)h(of)f
+Ft('.)630 2742 y(If)h(there)g(are)g(no)g(options,)h(a)f(list)h(of)f
 (the)g(shell)g(builtins)g(is)g(displa)m(y)m(ed.)43 b(The)31
-b(`)p Fs(-s)p Ft(')f(option)630 2715 y(restricts)f Fs(enable)e
+b(`)p Fs(-s)p Ft(')f(option)630 2851 y(restricts)f Fs(enable)e
 Ft(to)i(the)f Fl(posix)g Ft(sp)s(ecial)h(builtins.)40
 b(If)27 b(`)p Fs(-s)p Ft(')i(is)f(used)g(with)g(`)p Fs(-f)p
-Ft(',)h(the)f(new)630 2824 y(builtin)i(b)s(ecomes)h(a)f(sp)s(ecial)h
+Ft(',)h(the)f(new)630 2961 y(builtin)i(b)s(ecomes)h(a)f(sp)s(ecial)h
 (builtin)f(\(see)i(Section)f(4.4)g([Sp)s(ecial)g(Builtins],)g(page)g
-(56\).)630 2959 y(The)26 b(return)f(status)h(is)g(zero)h(unless)e(a)i
+(56\).)630 3093 y(The)26 b(return)f(status)h(is)g(zero)h(unless)e(a)i
 Fq(name)k Ft(is)26 b(not)g(a)h(shell)f(builtin)g(or)g(there)g(is)g(an)g
-(error)630 3068 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g
-(ob)5 b(ject.)150 3228 y Fs(help)870 3362 y(help)47 b([-s])f([)p
-Fj(pattern)11 b Fs(])630 3497 y Ft(Displa)m(y)40 b(helpful)e
+(error)630 3203 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g
+(ob)5 b(ject.)150 3358 y Fs(help)870 3491 y(help)47 b([-s])f([)p
+Fj(pattern)11 b Fs(])630 3623 y Ft(Displa)m(y)40 b(helpful)e
 (information)h(ab)s(out)g(builtin)f(commands.)66 b(If)38
-b Fq(pattern)h Ft(is)g(sp)s(eci\014ed,)630 3606 y Fs(help)28
+b Fq(pattern)h Ft(is)g(sp)s(eci\014ed,)630 3733 y Fs(help)28
 b Ft(giv)m(es)i(detailed)g(help)e(on)h(all)h(commands)e(matc)m(hing)i
-Fq(pattern)p Ft(,)g(otherwise)f(a)g(list)h(of)630 3716
+Fq(pattern)p Ft(,)g(otherwise)f(a)g(list)h(of)630 3842
 y(the)36 b(builtins)f(is)h(prin)m(ted.)56 b(The)35 b(`)p
 Fs(-s)p Ft(')h(option)g(restricts)g(the)g(information)g(displa)m(y)m
-(ed)g(to)630 3826 y(a)c(short)g(usage)h(synopsis.)44
+(ed)g(to)630 3952 y(a)c(short)g(usage)h(synopsis.)44
 b(The)32 b(return)f(status)h(is)g(zero)h(unless)e(no)h(command)g(matc)m
-(hes)630 3935 y Fq(pattern)p Ft(.)150 4095 y Fs(let)870
-4229 y(let)47 b Fj(expression)55 b Fs([)p Fj(expression)11
-b Fs(])630 4364 y Ft(The)41 b Fs(let)g Ft(builtin)g(allo)m(ws)i
+(hes)630 4061 y Fq(pattern)p Ft(.)150 4217 y Fs(let)870
+4349 y(let)47 b Fj(expression)55 b Fs([)p Fj(expression)11
+b Fs(])630 4482 y Ft(The)41 b Fs(let)g Ft(builtin)g(allo)m(ws)i
 (arithmetic)f(to)h(b)s(e)d(p)s(erformed)g(on)i(shell)g(v)-5
-b(ariables.)74 b(Eac)m(h)630 4473 y Fq(expression)31
+b(ariables.)74 b(Eac)m(h)630 4591 y Fq(expression)31
 b Ft(is)g(ev)-5 b(aluated)32 b(according)f(to)h(the)f(rules)g(giv)m(en)
-h(b)s(elo)m(w)f(in)f(Section)i(6.5)g([Shell)630 4583
+h(b)s(elo)m(w)f(in)f(Section)i(6.5)g([Shell)630 4701
 y(Arithmetic],)51 b(page)46 b(74.)87 b(If)45 b(the)g(last)h
 Fq(expression)g Ft(ev)-5 b(aluates)47 b(to)f(0,)k Fs(let)44
-b Ft(returns)g(1;)630 4692 y(otherwise)31 b(0)g(is)f(returned.)150
-4852 y Fs(local)870 4986 y(local)46 b([)p Fj(option)11
+b Ft(returns)g(1;)630 4810 y(otherwise)31 b(0)g(is)f(returned.)150
+4966 y Fs(local)870 5098 y(local)46 b([)p Fj(option)11
 b Fs(])45 b Fj(name)11 b Fs([=)p Fj(value)g Fs(])44 b(...)630
-5121 y Ft(F)-8 b(or)27 b(eac)m(h)g(argumen)m(t,)g(a)f(lo)s(cal)h(v)-5
+5230 y Ft(F)-8 b(or)27 b(eac)m(h)g(argumen)m(t,)g(a)f(lo)s(cal)h(v)-5
 b(ariable)27 b(named)e Fq(name)31 b Ft(is)26 b(created,)i(and)d
-(assigned)h Fq(v)-5 b(alue)p Ft(.)630 5230 y(The)37 b
+(assigned)h Fq(v)-5 b(alue)p Ft(.)630 5340 y(The)37 b
 Fq(option)h Ft(can)f(b)s(e)g(an)m(y)h(of)f(the)h(options)g(accepted)g
-(b)m(y)g Fs(declare)p Ft(.)59 b Fs(local)36 b Ft(can)i(only)630
-5340 y(b)s(e)j(used)h(within)f(a)i(function;)48 b(it)42
-b(mak)m(es)h(the)f(v)-5 b(ariable)43 b Fq(name)48 b Ft(ha)m(v)m(e)43
-b(a)f(visible)h(scop)s(e)p eop end
+(b)m(y)g Fs(declare)p Ft(.)59 b Fs(local)36 b Ft(can)i(only)p
+eop end
 %%Page: 46 52
 TeXDict begin 46 51 bop 150 -116 a Ft(46)2572 b(Bash)31
-b(Reference)g(Man)m(ual)630 299 y(restricted)39 b(to)g(that)g(function)
-f(and)f(its)i(c)m(hildren.)64 b(The)38 b(return)f(status)h(is)h(zero)g
-(unless)630 408 y Fs(local)g Ft(is)h(used)g(outside)g(a)h(function,)h
-(an)e(in)m(v)-5 b(alid)41 b Fq(name)46 b Ft(is)40 b(supplied,)i(or)e
-Fq(name)45 b Ft(is)c(a)630 518 y(readonly)30 b(v)-5 b(ariable.)150
-682 y Fs(logout)870 819 y(logout)46 b([)p Fj(n)11 b Fs(])630
-956 y Ft(Exit)31 b(a)g(login)g(shell,)g(returning)e(a)i(status)g(of)f
-Fq(n)g Ft(to)h(the)g(shell's)f(paren)m(t.)150 1121 y
-Fs(printf)870 1258 y(printf)46 b([-v)h Fj(var)11 b Fs(])46
-b Fj(format)57 b Fs([)p Fj(arguments)11 b Fs(])630 1395
+b(Reference)g(Man)m(ual)630 299 y(b)s(e)41 b(used)h(within)f(a)i
+(function;)48 b(it)42 b(mak)m(es)h(the)f(v)-5 b(ariable)43
+b Fq(name)48 b Ft(ha)m(v)m(e)43 b(a)f(visible)h(scop)s(e)630
+408 y(restricted)c(to)g(that)g(function)f(and)f(its)i(c)m(hildren.)64
+b(The)38 b(return)f(status)h(is)h(zero)g(unless)630 518
+y Fs(local)g Ft(is)h(used)g(outside)g(a)h(function,)h(an)e(in)m(v)-5
+b(alid)41 b Fq(name)46 b Ft(is)40 b(supplied,)i(or)e
+Fq(name)45 b Ft(is)c(a)630 628 y(readonly)30 b(v)-5 b(ariable.)150
+778 y Fs(logout)870 908 y(logout)46 b([)p Fj(n)11 b Fs(])630
+1039 y Ft(Exit)31 b(a)g(login)g(shell,)g(returning)e(a)i(status)g(of)f
+Fq(n)g Ft(to)h(the)g(shell's)f(paren)m(t.)150 1189 y
+Fs(printf)870 1319 y(printf)46 b([-v)h Fj(var)11 b Fs(])46
+b Fj(format)57 b Fs([)p Fj(arguments)11 b Fs(])630 1450
 y Ft(W)-8 b(rite)27 b(the)g(formatted)f Fq(argumen)m(ts)k
 Ft(to)d(the)f(standard)f(output)h(under)e(the)i(con)m(trol)i(of)e(the)
-630 1504 y Fq(format)p Ft(.)41 b(The)28 b Fq(format)j
+630 1559 y Fq(format)p Ft(.)41 b(The)28 b Fq(format)j
 Ft(is)e(a)g(c)m(haracter)i(string)d(whic)m(h)h(con)m(tains)h(three)f(t)
-m(yp)s(es)g(of)g(ob)5 b(jects:)630 1614 y(plain)28 b(c)m(haracters,)j
+m(yp)s(es)g(of)g(ob)5 b(jects:)630 1669 y(plain)28 b(c)m(haracters,)j
 (whic)m(h)d(are)h(simply)f(copied)h(to)h(standard)d(output,)i(c)m
-(haracter)h(escap)s(e)630 1724 y(sequences,)g(whic)m(h)f(are)g(con)m(v)
+(haracter)h(escap)s(e)630 1778 y(sequences,)g(whic)m(h)f(are)g(con)m(v)
 m(erted)i(and)d(copied)i(to)f(the)h(standard)e(output,)h(and)g(format)
-630 1833 y(sp)s(eci\014cations,)39 b(eac)m(h)e(of)g(whic)m(h)f(causes)g
+630 1888 y(sp)s(eci\014cations,)39 b(eac)m(h)e(of)g(whic)m(h)f(causes)g
 (prin)m(ting)g(of)h(the)f(next)h(successiv)m(e)g Fq(argumen)m(t)p
-Ft(.)630 1943 y(In)31 b(addition)h(to)h(the)e(standard)g
+Ft(.)630 1998 y(In)31 b(addition)h(to)h(the)e(standard)g
 Fs(printf\(1\))f Ft(formats,)i(`)p Fs(\045b)p Ft(')g(causes)g
-Fs(printf)e Ft(to)j(expand)630 2052 y(bac)m(kslash)39
+Fs(printf)e Ft(to)j(expand)630 2107 y(bac)m(kslash)39
 b(escap)s(e)g(sequences)f(in)h(the)f(corresp)s(onding)f
 Fq(argumen)m(t)p Ft(,)k(\(except)f(that)f(`)p Fs(\\c)p
-Ft(')630 2162 y(terminates)44 b(output,)j(bac)m(kslashes)d(in)f(`)p
+Ft(')630 2217 y(terminates)44 b(output,)j(bac)m(kslashes)d(in)f(`)p
 Fs(\\')p Ft(',)k(`)p Fs(\\")p Ft(',)g(and)c(`)p Fs(\\?)p
-Ft(')g(are)h(not)g(remo)m(v)m(ed,)k(and)630 2271 y(o)s(ctal)25
+Ft(')g(are)h(not)g(remo)m(v)m(ed,)k(and)630 2326 y(o)s(ctal)25
 b(escap)s(es)f(b)s(eginning)f(with)g(`)p Fs(\\0)p Ft(')h(ma)m(y)g(con)m
 (tain)h(up)e(to)h(four)f(digits\),)j(and)d(`)p Fs(\045q)p
-Ft(')h(causes)630 2381 y Fs(printf)31 b Ft(to)i(output)f(the)h(corresp)
+Ft(')h(causes)630 2436 y Fs(printf)31 b Ft(to)i(output)f(the)h(corresp)
 s(onding)f Fq(argumen)m(t)j Ft(in)d(a)h(format)g(that)g(can)g(b)s(e)f
-(reused)630 2491 y(as)f(shell)f(input.)630 2628 y(The)24
+(reused)630 2545 y(as)f(shell)f(input.)630 2676 y(The)24
 b(`)p Fs(-v)p Ft(')h(option)g(causes)g(the)g(output)g(to)g(b)s(e)f
 (assigned)h(to)h(the)f(v)-5 b(ariable)25 b Fq(v)-5 b(ar)32
-b Ft(rather)24 b(than)630 2737 y(b)s(eing)30 b(prin)m(ted)g(to)h(the)g
-(standard)e(output.)630 2874 y(The)i Fq(format)i Ft(is)f(reused)e(as)i
+b Ft(rather)24 b(than)630 2785 y(b)s(eing)30 b(prin)m(ted)g(to)h(the)g
+(standard)e(output.)630 2915 y(The)i Fq(format)i Ft(is)f(reused)e(as)i
 (necessary)f(to)i(consume)e(all)h(of)f(the)h Fq(argumen)m(ts)p
-Ft(.)44 b(If)30 b(the)i Fq(for-)630 2984 y(mat)c Ft(requires)e(more)g
+Ft(.)44 b(If)30 b(the)i Fq(for-)630 3025 y(mat)c Ft(requires)e(more)g
 Fq(argumen)m(ts)k Ft(than)25 b(are)i(supplied,)e(the)h(extra)h(format)f
-(sp)s(eci\014cations)630 3093 y(b)s(eha)m(v)m(e)j(as)g(if)f(a)h(zero)g
+(sp)s(eci\014cations)630 3134 y(b)s(eha)m(v)m(e)j(as)g(if)f(a)h(zero)g
 (v)-5 b(alue)29 b(or)g(n)m(ull)f(string,)h(as)g(appropriate,)g(had)f(b)
-s(een)g(supplied.)38 b(The)630 3203 y(return)29 b(v)-5
+s(een)g(supplied.)38 b(The)630 3244 y(return)29 b(v)-5
 b(alue)31 b(is)g(zero)g(on)f(success,)h(non-zero)g(on)f(failure.)150
-3367 y Fs(read)870 3504 y(read)47 b([-ers])f([-a)h Fj(aname)11
+3395 y Fs(read)870 3525 y(read)47 b([-ers])f([-a)h Fj(aname)11
 b Fs(])45 b([-d)i Fj(delim)11 b Fs(])46 b([-n)h Fj(nchars)11
 b Fs(])45 b([-p)i Fj(prompt)11 b Fs(])45 b([-t)i Fj(time-)870
-3614 y(out)11 b Fs(])46 b([-u)h Fj(fd)11 b Fs(])46 b([)p
-Fj(name)57 b Fs(...])630 3751 y Ft(One)26 b(line)h(is)g(read)f(from)h
+3634 y(out)11 b Fs(])46 b([-u)h Fj(fd)11 b Fs(])46 b([)p
+Fj(name)57 b Fs(...])630 3765 y Ft(One)26 b(line)h(is)g(read)f(from)h
 (the)f(standard)g(input,)h(or)g(from)f(the)h(\014le)f(descriptor)h
-Fq(fd)i Ft(supplied)630 3861 y(as)37 b(an)g(argumen)m(t)h(to)f(the)h(`)
+Fq(fd)i Ft(supplied)630 3874 y(as)37 b(an)g(argumen)m(t)h(to)f(the)h(`)
 p Fs(-u)p Ft(')e(option,)k(and)c(the)i(\014rst)e(w)m(ord)g(is)h
-(assigned)h(to)f(the)h(\014rst)630 3970 y Fq(name)p Ft(,)29
+(assigned)h(to)f(the)h(\014rst)630 3984 y Fq(name)p Ft(,)29
 b(the)f(second)h(w)m(ord)e(to)i(the)g(second)f Fq(name)p
 Ft(,)h(and)e(so)i(on,)g(with)f(lefto)m(v)m(er)i(w)m(ords)e(and)630
-4080 y(their)g(in)m(terv)m(ening)h(separators)g(assigned)f(to)h(the)f
+4093 y(their)g(in)m(terv)m(ening)h(separators)g(assigned)f(to)h(the)f
 (last)h Fq(name)p Ft(.)40 b(If)27 b(there)i(are)f(few)m(er)g(w)m(ords)
-630 4189 y(read)44 b(from)f(the)g(input)g(stream)h(than)g(names,)j(the)
-c(remaining)h(names)g(are)g(assigned)630 4299 y(empt)m(y)31
+630 4203 y(read)44 b(from)f(the)g(input)g(stream)h(than)g(names,)j(the)
+c(remaining)h(names)g(are)g(assigned)630 4313 y(empt)m(y)31
 b(v)-5 b(alues.)41 b(The)30 b(c)m(haracters)i(in)e(the)h(v)-5
 b(alue)31 b(of)g(the)f Fs(IFS)g Ft(v)-5 b(ariable)31
-b(are)g(used)f(to)h(split)630 4408 y(the)37 b(line)h(in)m(to)g(w)m
+b(are)g(used)f(to)h(split)630 4422 y(the)37 b(line)h(in)m(to)g(w)m
 (ords.)61 b(The)36 b(bac)m(kslash)i(c)m(haracter)h(`)p
 Fs(\\)p Ft(')e(ma)m(y)h(b)s(e)f(used)f(to)i(remo)m(v)m(e)h(an)m(y)630
-4518 y(sp)s(ecial)h(meaning)g(for)f(the)g(next)h(c)m(haracter)h(read)e
+4532 y(sp)s(ecial)h(meaning)g(for)f(the)g(next)h(c)m(haracter)h(read)e
 (and)g(for)g(line)h(con)m(tin)m(uation.)69 b(If)39 b(no)630
-4628 y(names)28 b(are)h(supplied,)f(the)g(line)h(read)g(is)f(assigned)h
+4641 y(names)28 b(are)h(supplied,)f(the)g(line)h(read)g(is)f(assigned)h
 (to)g(the)f(v)-5 b(ariable)29 b Fs(REPLY)p Ft(.)39 b(The)28
-b(return)630 4737 y(co)s(de)i(is)f(zero,)i(unless)e(end-of-\014le)h(is)
+b(return)630 4751 y(co)s(de)i(is)f(zero,)i(unless)e(end-of-\014le)h(is)
 f(encoun)m(tered,)h Fs(read)f Ft(times)h(out,)g(or)f(an)h(in)m(v)-5
-b(alid)30 b(\014le)630 4847 y(descriptor)35 b(is)h(supplied)e(as)i(the)
+b(alid)30 b(\014le)630 4861 y(descriptor)35 b(is)h(supplied)e(as)i(the)
 f(argumen)m(t)h(to)g(`)p Fs(-u)p Ft('.)56 b(Options,)37
-b(if)e(supplied,)h(ha)m(v)m(e)h(the)630 4956 y(follo)m(wing)32
+b(if)e(supplied,)h(ha)m(v)m(e)h(the)630 4970 y(follo)m(wing)32
 b(meanings:)630 5121 y Fs(-a)e Fj(aname)114 b Ft(The)34
 b(w)m(ords)f(are)i(assigned)f(to)h(sequen)m(tial)h(indices)e(of)g(the)g
 (arra)m(y)h(v)-5 b(ariable)1110 5230 y Fq(aname)p Ft(,)29
@@ -8029,7 +8371,7 @@ Fj(command)39 b Fs(\))30 b Ft(inherit)g(the)1290 1132
 y Fs(ERROR)f Ft(trap.)630 1307 y Fs(extglob)144 b Ft(If)26
 b(set,)i(the)f(extended)f(pattern)h(matc)m(hing)g(features)g(describ)s
 (ed)e(ab)s(o)m(v)m(e)j(\(see)1110 1417 y(Section)j(3.5.8.1)i([P)m
-(attern)f(Matc)m(hing],)g(page)f(23\))h(are)f(enabled.)630
+(attern)f(Matc)m(hing],)g(page)f(24\))h(are)f(enabled.)630
 1592 y Fs(extquote)96 b Ft(If)49 b(set,)54 b Fs($')p
 Fj(string)11 b Fs(')46 b Ft(and)j Fs($")p Fj(string)11
 b Fs(")46 b Ft(quoting)k(is)f(p)s(erformed)e(within)1110
@@ -8290,21 +8632,22 @@ g(the)g(next)g(primary)g(prompt.)630 2315 y Fs(-e)384
 b Ft(Exit)37 b(immediately)h(if)e(a)h(simple)f(command)g(\(see)i
 (Section)f(3.2.1)h([Simple)1110 2425 y(Commands],)31
 b(page)i(8\))f(exits)g(with)g(a)g(non-zero)g(status,)g(unless)f(the)h
-(com-)1110 2534 y(mand)f(that)h(fails)h(is)f(part)f(of)h(the)g(command)
-g(list)g(immediately)h(follo)m(wing)1110 2644 y(a)41
-b Fs(while)d Ft(or)j Fs(until)e Ft(k)m(eyw)m(ord,)k(part)d(of)g(the)h
-(test)g(in)f(an)g Fs(if)g Ft(statemen)m(t,)1110 2754
-y(part)33 b(of)h(a)g Fs(&&)f Ft(or)g Fs(||)g Ft(list,)i(or)e(if)h(the)f
-(command's)h(return)e(status)i(is)f(b)s(eing)1110 2863
-y(in)m(v)m(erted)e(using)e Fs(!)p Ft(.)40 b(A)30 b(trap)f(on)h
-Fs(ERR)p Ft(,)f(if)h(set,)g(is)g(executed)h(b)s(efore)e(the)h(shell)
-1110 2973 y(exits.)630 3126 y Fs(-f)384 b Ft(Disable)31
-b(\014le)g(name)f(generation)i(\(globbing\).)630 3280
-y Fs(-h)384 b Ft(Lo)s(cate)33 b(and)e(remem)m(b)s(er)h(\(hash\))g
-(commands)f(as)h(they)g(are)g(lo)s(ok)m(ed)h(up)e(for)1110
-3389 y(execution.)42 b(This)29 b(option)i(is)g(enabled)f(b)m(y)g
-(default.)630 3543 y Fs(-k)384 b Ft(All)34 b(argumen)m(ts)g(in)f(the)h
-(form)f(of)g(assignmen)m(t)h(statemen)m(ts)i(are)d(placed)h(in)1110
+(com-)1110 2534 y(mand)24 b(that)h(fails)h(is)f(part)f(of)h(the)g
+(command)g(list)g(immediately)h(follo)m(wing)h(a)1110
+2644 y Fs(while)i Ft(or)h Fs(until)f Ft(k)m(eyw)m(ord,)i(part)f(of)h
+(the)f(test)i(in)e(an)g Fs(if)g Ft(statemen)m(t,)i(part)1110
+2754 y(of)d(a)f Fs(&&)g Ft(or)h Fs(||)f Ft(list,)h(an)m(y)g(command)f
+(in)h(a)f(pip)s(eline)g(but)g(the)h(last,)h(or)e(if)h(the)1110
+2863 y(command's)g(return)f(status)i(is)f(b)s(eing)g(in)m(v)m(erted)h
+(using)f Fs(!)p Ft(.)40 b(A)29 b(trap)g(on)h Fs(ERR)p
+Ft(,)1110 2973 y(if)g(set,)i(is)e(executed)h(b)s(efore)f(the)h(shell)f
+(exits.)630 3126 y Fs(-f)384 b Ft(Disable)31 b(\014le)g(name)f
+(generation)i(\(globbing\).)630 3280 y Fs(-h)384 b Ft(Lo)s(cate)33
+b(and)e(remem)m(b)s(er)h(\(hash\))g(commands)f(as)h(they)g(are)g(lo)s
+(ok)m(ed)h(up)e(for)1110 3389 y(execution.)42 b(This)29
+b(option)i(is)g(enabled)f(b)m(y)g(default.)630 3543 y
+Fs(-k)384 b Ft(All)34 b(argumen)m(ts)g(in)f(the)h(form)f(of)g
+(assignmen)m(t)h(statemen)m(ts)i(are)d(placed)h(in)1110
 3652 y(the)k(en)m(vironmen)m(t)g(for)g(a)g(command,)h(not)f(just)f
 (those)i(that)f(precede)g(the)1110 3762 y(command)30
 b(name.)630 3915 y Fs(-m)384 b Ft(Job)30 b(con)m(trol)i(is)e(enabled)h
@@ -8557,7 +8900,7 @@ g(instance)h(of)g(Bash.)p eop end
 TeXDict begin 58 63 bop 150 -116 a Ft(58)2572 b(Bash)31
 b(Reference)g(Man)m(ual)150 299 y Fs(BASH_ARGC)630 408
 y Ft(An)f(arra)m(y)h(v)-5 b(ariable)31 b(whose)f(v)-5
-b(alues)31 b(are)g(the)f(n)m(um)m(b)s(er)f(of)i(parameters)g(in)f(eac)m
+b(alues)31 b(are)g(the)f(n)m(um)m(b)s(er)g(of)g(parameters)h(in)f(eac)m
 (h)h(frame)g(of)630 518 y(the)26 b(curren)m(t)f(bash)g(execution)i
 (call)g(stac)m(k.)41 b(The)25 b(n)m(um)m(b)s(er)g(of)h(parameters)g(to)
 g(the)g(curren)m(t)630 628 y(subroutine)i(\(shell)i(function)g(or)f
@@ -8731,23 +9074,23 @@ b(ariable)36 b(con)m(taining)h(the)f(names)g(of)g(all)g(shell)g
 (functions)g(curren)m(tly)f(in)h(the)630 3203 y(execution)g(call)h
 (stac)m(k.)57 b(The)34 b(elemen)m(t)j(with)e(index)g(0)h(is)f(the)g
 (name)h(of)f(an)m(y)h(curren)m(tly-)630 3313 y(executing)i(shell)f
-(function.)58 b(The)37 b(b)s(ottom-most)g(elemen)m(t)h(is)f
-Fs(")p Ft(main)p Fs(")p Ft(.)58 b(This)36 b(v)-5 b(ariable)630
-3422 y(exists)33 b(only)g(when)f(a)h(shell)g(function)f(is)h
-(executing.)49 b(Assignmen)m(ts)33 b(to)g Fs(FUNCNAME)e
-Ft(ha)m(v)m(e)630 3532 y(no)36 b(e\013ect)h(and)e(return)f(an)i(error)f
-(status.)57 b(If)36 b Fs(FUNCNAME)d Ft(is)j(unset,)h(it)f(loses)g(its)g
-(sp)s(ecial)630 3641 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g
-(subsequen)m(tly)f(reset.)150 3806 y Fs(GLOBIGNORE)630
-3915 y Ft(A)38 b(colon-separated)i(list)f(of)f(patterns)g(de\014ning)f
-(the)h(set)g(of)h(\014lenames)f(to)g(b)s(e)g(ignored)630
-4025 y(b)m(y)31 b(\014lename)g(expansion.)43 b(If)31
-b(a)h(\014lename)f(matc)m(hed)h(b)m(y)f(a)g(\014lename)h(expansion)f
-(pattern)630 4134 y(also)i(matc)m(hes)g(one)f(of)g(the)g(patterns)g(in)
-f Fs(GLOBIGNORE)p Ft(,)f(it)i(is)g(remo)m(v)m(ed)h(from)e(the)h(list)h
-(of)630 4244 y(matc)m(hes.)150 4408 y Fs(GROUPS)192 b
-Ft(An)36 b(arra)m(y)g(v)-5 b(ariable)37 b(con)m(taining)g(the)f(list)h
-(of)f(groups)g(of)g(whic)m(h)f(the)i(curren)m(t)e(user)h(is)g(a)630
+(function.)61 b(The)36 b(b)s(ottom-most)i(elemen)m(t)h(is)e
+Fs("main")p Ft(.)59 b(This)36 b(v)-5 b(ariable)630 3422
+y(exists)33 b(only)g(when)f(a)h(shell)g(function)f(is)h(executing.)49
+b(Assignmen)m(ts)33 b(to)g Fs(FUNCNAME)e Ft(ha)m(v)m(e)630
+3532 y(no)36 b(e\013ect)h(and)e(return)f(an)i(error)f(status.)57
+b(If)36 b Fs(FUNCNAME)d Ft(is)j(unset,)h(it)f(loses)g(its)g(sp)s(ecial)
+630 3641 y(prop)s(erties,)30 b(ev)m(en)h(if)f(it)h(is)g(subsequen)m
+(tly)f(reset.)150 3806 y Fs(GLOBIGNORE)630 3915 y Ft(A)38
+b(colon-separated)i(list)f(of)f(patterns)g(de\014ning)f(the)h(set)g(of)
+h(\014lenames)f(to)g(b)s(e)g(ignored)630 4025 y(b)m(y)31
+b(\014lename)g(expansion.)43 b(If)31 b(a)h(\014lename)f(matc)m(hed)h(b)
+m(y)f(a)g(\014lename)h(expansion)f(pattern)630 4134 y(also)i(matc)m
+(hes)g(one)f(of)g(the)g(patterns)g(in)f Fs(GLOBIGNORE)p
+Ft(,)f(it)i(is)g(remo)m(v)m(ed)h(from)e(the)h(list)h(of)630
+4244 y(matc)m(hes.)150 4408 y Fs(GROUPS)192 b Ft(An)36
+b(arra)m(y)g(v)-5 b(ariable)37 b(con)m(taining)g(the)f(list)h(of)f
+(groups)g(of)g(whic)m(h)f(the)i(curren)m(t)e(user)h(is)g(a)630
 4518 y(mem)m(b)s(er.)47 b(Assignmen)m(ts)33 b(to)g Fs(GROUPS)e
 Ft(ha)m(v)m(e)j(no)f(e\013ect)h(and)e(return)g(an)g(error)g(status.)48
 b(If)630 4628 y Fs(GROUPS)29 b Ft(is)h(unset,)g(it)h(loses)g(its)g(sp)s
@@ -9079,10 +9422,10 @@ y(\(see)f(Section)h(3.2.4.2)g([Conditional)g(Constructs],)e(page)i
 h(terminal.)p eop end
 %%Page: 65 71
 TeXDict begin 65 70 bop 150 -116 a Ft(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(65)630 299 y(In)28
-b(an)h(in)m(terativ)m(e)i(shell,)e(the)g(v)-5 b(alue)30
-b(is)e(in)m(terpreted)h(as)g(the)g(n)m(um)m(b)s(er)f(of)h(seconds)f(to)
-i(w)m(ait)630 408 y(for)i(input)f(after)i(issuing)f(the)g(primary)g
+b(Shell)30 b(V)-8 b(ariables)2459 b(65)630 299 y(In)25
+b(an)h(in)m(teractiv)m(e)i(shell,)g(the)e(v)-5 b(alue)26
+b(is)g(in)m(terpreted)g(as)g(the)g(n)m(um)m(b)s(er)f(of)h(seconds)f(to)
+i(w)m(ait)630 408 y(for)32 b(input)f(after)i(issuing)f(the)g(primary)g
 (prompt)f(when)g(the)i(shell)f(is)h(in)m(teractiv)m(e.)49
 b(Bash)630 518 y(terminates)31 b(after)g(that)g(n)m(um)m(b)s(er)e(of)i
 (seconds)f(if)g(input)g(do)s(es)g(not)g(arriv)m(e.)150
@@ -9134,7 +9477,7 @@ b(alen)m(t)26 b(to)f(`)p Fs(-D)p Ft(')630 3119 y(except)31
 b(for)f(the)h(output)f(format.)150 3280 y Fs(--dump-strings)630
 3389 y Ft(Equiv)-5 b(alen)m(t)31 b(to)g(`)p Fs(-D)p Ft('.)150
 3550 y Fs(--help)192 b Ft(Displa)m(y)32 b(a)e(usage)h(message)h(on)e
-(standard)g(output)g(and)f(exit)j(sucessfully)-8 b(.)150
+(standard)g(output)g(and)f(exit)j(successfully)-8 b(.)150
 3711 y Fs(--init-file)27 b Fj(filename)150 3820 y Fs(--rcfile)h
 Fj(filename)630 3930 y Ft(Execute)42 b(commands)f(from)f
 Fq(\014lename)47 b Ft(\(instead)42 b(of)f(`)p Fs(~/.bashrc)p
@@ -9263,9 +9606,9 @@ b(reads)f(and)g(executes)h(commands)f(from)g(this)g(\014le,)i(then)e
 (status)e(of)h(the)g(last)g(command)f(executed)h(in)g(the)f(script.)40
 b(If)26 b(no)g(commands)g(are)h(executed,)150 1951 y(the)k(exit)g
 (status)g(is)f(0.)150 2221 y Fr(6.2)68 b(Bash)45 b(Startup)g(Files)275
-2470 y Ft(This)36 b(section)j(describs)e(ho)m(w)g(Bash)h(executes)h
-(its)f(startup)f(\014les.)62 b(If)37 b(an)m(y)h(of)g(the)g(\014les)f
-(exist)i(but)150 2579 y(cannot)26 b(b)s(e)e(read,)i(Bash)f(rep)s(orts)g
+2470 y Ft(This)34 b(section)i(describ)s(es)e(ho)m(w)h(Bash)g(executes)i
+(its)e(startup)g(\014les.)54 b(If)35 b(an)m(y)g(of)h(the)f(\014les)g
+(exist)h(but)150 2579 y(cannot)26 b(b)s(e)e(read,)i(Bash)f(rep)s(orts)g
 (an)g(error.)38 b(Tildes)25 b(are)h(expanded)e(in)g(\014le)i(names)f
 (as)g(describ)s(ed)f(ab)s(o)m(v)m(e)150 2689 y(under)29
 b(Tilde)h(Expansion)g(\(see)h(Section)g(3.5.2)i([Tilde)d(Expansion],)g
@@ -9394,10 +9737,10 @@ b(If)27 b(the)h Fs(-p)g Ft(option)g(is)g(supplied)e(at)j(in)m(v)m(o)s
 1540 y Fk(6.3.1)63 b(What)40 b(is)h(an)g(In)m(teractiv)m(e)e(Shell?)275
 1779 y Ft(An)25 b(in)m(teractiv)m(e)j(shell)d(is)h(one)f(started)h
 (without)g(non-option)f(argumen)m(ts,)i(unless)e(`)p
-Fs(-s)p Ft(')g(is)g(sp)s(eci\014ed,)150 1889 y(without)33
-b(sp)s(eci\014ying)f(the)h(`)p Fs(-c)p Ft(')f(option,)i(and)e(whose)h
-(input)e(and)i(error)f(output)g(are)h(b)s(oth)f(connected)150
-1998 y(to)f(terminals)g(\(as)g(determined)f(b)m(y)g Fs(isatty\(3\))p
+Fs(-s)p Ft(')g(is)g(sp)s(eci\014ed,)150 1889 y(without)34
+b(sp)s(ecifying)h(the)f(`)p Fs(-c)p Ft(')g(option,)j(and)c(whose)h
+(input)g(and)g(error)g(output)g(are)g(b)s(oth)g(connected)150
+1998 y(to)d(terminals)g(\(as)g(determined)f(b)m(y)g Fs(isatty\(3\))p
 Ft(\),)f(or)h(one)h(started)f(with)g(the)h(`)p Fs(-i)p
 Ft(')f(option.)275 2128 y(An)g(in)m(teractiv)m(e)j(shell)d(generally)i
 (reads)e(from)g(and)g(writes)g(to)h(a)g(user's)f(terminal.)275
@@ -9470,7 +9813,7 @@ f(31\).)154 2342 y(10.)61 b(In)26 b(the)h(absence)h(of)f(an)m(y)g
 b Fs(SIGINT)29 b Ft(will)h(in)m(terrupt)g(some)h(shell)g(builtins.)154
 2602 y(11.)61 b(An)40 b(in)m(teractiv)m(e)j(login)e(shell)g(sends)e(a)i
 Fs(SIGHUP)d Ft(to)j(all)g(jobs)f(on)g(exit)h(if)g(the)f
-Fs(hupoxexit)e Ft(shell)330 2712 y(option)31 b(has)f(b)s(een)g(enabled)
+Fs(huponexit)e Ft(shell)330 2712 y(option)31 b(has)f(b)s(een)g(enabled)
 g(\(see)h(Section)g(3.7.6)i([Signals],)e(page)g(31\).)154
 2863 y(12.)61 b(The)31 b(`)p Fs(-n)p Ft(')g(in)m(v)m(o)s(cation)i
 (option)e(is)h(ignored,)f(and)g(`)p Fs(set)f(-n)p Ft(')g(has)h(no)g
@@ -9827,7 +10170,7 @@ Fq(name)p Ft(.)40 b(These)29 b(subscripts)f(di\013er)h(only)150
 Fs(${name[*]})150 1920 y Ft(expands)20 b(to)h(a)g(single)g(w)m(ord)f
 (with)h(the)g(v)-5 b(alue)21 b(of)f(eac)m(h)i(arra)m(y)f(mem)m(b)s(er)f
 (separated)h(b)m(y)g(the)f(\014rst)g(c)m(haracter)150
-2029 y(of)38 b(the)g Fs(IFS)f Ft(v)-5 b(ariable,)41 b(and)c
+2030 y(of)38 b(the)g Fs(IFS)f Ft(v)-5 b(ariable,)41 b(and)c
 Fs(${name[@]})e Ft(expands)i(eac)m(h)i(elemen)m(t)g(of)f
 Fq(name)43 b Ft(to)c(a)f(separate)h(w)m(ord.)150 2139
 y(When)32 b(there)h(are)f(no)g(arra)m(y)h(mem)m(b)s(ers,)f
@@ -9932,30 +10275,29 @@ Ft(\),)g(starting)h(with)f(zero.)630 3447 y Fs(-n)384
 b Ft(Suppresses)27 b(the)j(normal)g(c)m(hange)g(of)g(directory)g(when)e
 (remo)m(ving)j(directo-)1110 3557 y(ries)f(from)g(the)h(stac)m(k,)h(so)
 f(that)g(only)f(the)h(stac)m(k)g(is)g(manipulated.)150
-3720 y Fs(pushd)870 3847 y(pushd)46 b([)p Fj(dir)58 b
-Fs(|)47 b(+)p Fj(N)58 b Fs(|)47 b Fj(-N)11 b Fs(])47
-b([-n])630 3975 y Ft(Sa)m(v)m(e)30 b(the)e(curren)m(t)g(directory)h(on)
-f(the)h(top)f(of)h(the)f(directory)h(stac)m(k)h(and)e(then)g
+3720 y Fs(pushd)870 3847 y(pushd)46 b([-n])h([+)p Fj(N)57
+b Fs(|)48 b Fj(-N)58 b Fs(|)47 b Fj(dir)57 b Fs(])630
+3975 y Ft(Sa)m(v)m(e)30 b(the)e(curren)m(t)g(directory)h(on)f(the)h
+(top)f(of)h(the)f(directory)h(stac)m(k)h(and)e(then)g
 Fs(cd)f Ft(to)i Fq(dir)p Ft(.)630 4084 y(With)i(no)f(argumen)m(ts,)h
 Fs(pushd)e Ft(exc)m(hanges)j(the)e(top)h(t)m(w)m(o)h(directories.)630
-4229 y Fs(+)p Fj(N)384 b Ft(Brings)29 b(the)f Fq(N)10
+4229 y Fs(-n)384 b Ft(Suppresses)26 b(the)i(normal)h(c)m(hange)g(of)f
+(directory)h(when)e(adding)h(directories)1110 4339 y(to)j(the)g(stac)m
+(k,)h(so)e(that)h(only)g(the)f(stac)m(k)i(is)f(manipulated.)630
+4484 y Fs(+)p Fj(N)384 b Ft(Brings)29 b(the)f Fq(N)10
 b Ft(th)29 b(directory)g(\(coun)m(ting)h(from)e(the)g(left)i(of)e(the)h
-(list)g(prin)m(ted)1110 4339 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)h
+(list)g(prin)m(ted)1110 4594 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)h
 (with)f(zero\))i(to)f(the)f(top)g(of)h(the)f(list)h(b)m(y)f(rotating)i
-(the)1110 4449 y(stac)m(k.)630 4594 y Fs(-)p Fj(N)384
+(the)1110 4703 y(stac)m(k.)630 4848 y Fs(-)p Fj(N)384
 b Ft(Brings)23 b(the)g Fq(N)10 b Ft(th)23 b(directory)h(\(coun)m(ting)g
 (from)e(the)i(righ)m(t)f(of)g(the)h(list)f(prin)m(ted)1110
-4703 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)h(with)f(zero\))i(to)f(the)
+4958 y(b)m(y)34 b Fs(dirs)p Ft(,)g(starting)h(with)f(zero\))i(to)f(the)
 f(top)g(of)h(the)f(list)h(b)m(y)f(rotating)i(the)1110
-4813 y(stac)m(k.)630 4958 y Fs(-n)384 b Ft(Suppresses)26
-b(the)i(normal)h(c)m(hange)g(of)f(directory)h(when)e(adding)h
-(directories)1110 5068 y(to)j(the)g(stac)m(k,)h(so)e(that)h(only)g(the)
-f(stac)m(k)i(is)f(manipulated.)630 5213 y Fj(dir)336
-b Ft(Mak)m(es)36 b(the)f(curren)m(t)g(w)m(orking)g(directory)g(b)s(e)f
-(the)h(top)g(of)g(the)g(stac)m(k,)j(and)1110 5322 y(then)30
-b(executes)i(the)e(equiv)-5 b(alen)m(t)32 b(of)f(`)p
-Fs(cd)f Fq(dir)7 b Ft('.)39 b Fs(cd)p Ft(s)30 b(to)h
-Fq(dir)p Ft(.)p eop end
+5068 y(stac)m(k.)630 5213 y Fj(dir)336 b Ft(Mak)m(es)36
+b(the)f(curren)m(t)g(w)m(orking)g(directory)g(b)s(e)f(the)h(top)g(of)g
+(the)g(stac)m(k,)j(and)1110 5322 y(then)30 b(executes)i(the)e(equiv)-5
+b(alen)m(t)32 b(of)f(`)p Fs(cd)f Fq(dir)7 b Ft('.)39
+b Fs(cd)p Ft(s)30 b(to)h Fq(dir)p Ft(.)p eop end
 %%Page: 79 85
 TeXDict begin 79 84 bop 150 -116 a Ft(Chapter)30 b(6:)41
 b(Bash)30 b(F)-8 b(eatures)2484 b(79)150 299 y Fr(6.9)68
@@ -11963,7 +12305,7 @@ b(substitution,)49 b(and)44 b(arithmetic)i(expansion,)j(as)c(describ)s
 (ed)150 1669 y(ab)s(o)m(v)m(e)38 b(\(see)f(Section)h(3.5)g([Shell)e
 (Expansions],)i(page)f(17\).)61 b(The)36 b(results)h(are)g(split)f
 (using)h(the)f(rules)150 1778 y(describ)s(ed)29 b(ab)s(o)m(v)m(e)i
-(\(see)f(Section)h(3.5.7)h([W)-8 b(ord)30 b(Splitting],)h(page)f(22\).)
+(\(see)f(Section)h(3.5.7)h([W)-8 b(ord)30 b(Splitting],)h(page)f(23\).)
 42 b(The)30 b(results)f(of)h(the)g(expansion)150 1888
 y(are)f(pre\014x-matc)m(hed)h(against)g(the)f(w)m(ord)g(b)s(eing)f
 (completed,)j(and)d(the)i(matc)m(hing)g(w)m(ords)e(b)s(ecome)i(the)150
@@ -12783,7 +13125,7 @@ b(but)35 b(need)g(to)150 649 y(determine)h(b)m(y)g(the)h(t)m(yp)s(e)f
 (of)g(host)h(Bash)f(will)h(run)d(on.)58 b(Usually)37
 b Fs(configure)d Ft(can)i(\014gure)g(that)g(out,)150
 758 y(but)c(if)h(it)g(prin)m(ts)g(a)g(message)h(sa)m(ying)g(it)f(can)h
-(not)f(guess)g(the)g(host)g(t)m(yp)s(e,)h(giv)m(e)g(it)f(the)g(`)p
+(not)f(guess)g(the)g(host)g(t)m(yp)s(e,)h(giv)m(e)g(it)f(the)h(`)p
 Fs(--host=TYPE)p Ft(')150 868 y(option.)39 b(`)p Fs(TYPE)p
 Ft(')25 b(can)g(either)g(b)s(e)g(a)g(short)g(name)g(for)g(the)g(system)
 g(t)m(yp)s(e,)h(suc)m(h)f(as)g(`)p Fs(sun4)p Ft(',)h(or)f(a)g
@@ -12986,7 +13328,7 @@ Ft(command)g(\(see)i(Section)f(3.2.4.2)i([Conditional)630
 (--enable-extended-glob)630 783 y Ft(Include)40 b(supp)s(ort)e(for)i
 (the)h(extended)f(pattern)h(matc)m(hing)g(features)g(describ)s(ed)e(ab)
 s(o)m(v)m(e)630 892 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e
-(Matc)m(hing],)i(page)e(23.)150 1048 y Fs(--enable-help-builtin)630
+(Matc)m(hing],)i(page)e(24.)150 1048 y Fs(--enable-help-builtin)630
 1157 y Ft(Include)24 b(the)h Fs(help)f Ft(builtin,)h(whic)m(h)g(displa)
 m(ys)f(help)h(on)f(shell)h(builtins)f(and)h(v)-5 b(ariables)25
 b(\(see)630 1267 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f
@@ -13093,8 +13435,8 @@ Ft(.)275 887 y(Once)41 b(y)m(ou)g(ha)m(v)m(e)h(determined)f(that)h(a)f
 Ft(command)i(to)150 996 y(submit)25 b(a)h(bug)g(rep)s(ort.)38
 b(If)26 b(y)m(ou)g(ha)m(v)m(e)h(a)f(\014x,)h(y)m(ou)f(are)g(encouraged)
 h(to)f(mail)h(that)f(as)g(w)m(ell!)40 b(Suggestions)150
-1106 y(and)20 b(`philosophical')j(bug)d(rep)s(orts)g(ma)m(y)i(b)s(e)f
-(mailed)g(to)h Fs(bug-bash@gnu.org)17 b Ft(or)k(p)s(osted)f(to)i(the)f
+1106 y(and)20 b(`philosophical')j(bug)d(rep)s(orts)g(ma)m(y)i(b)s(e)e
+(mailed)i(to)g Fs(bug-bash@gnu.org)17 b Ft(or)k(p)s(osted)f(to)i(the)f
 (Usenet)150 1215 y(newsgroup)29 b Fs(gnu.bash.bug)p Ft(.)275
 1350 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225
 1484 y Fp(\017)60 b Ft(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h
@@ -13288,7 +13630,7 @@ b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(57,)g(for)f
 (details.)225 5230 y Fp(\017)60 b Ft(The)44 b Fs(IFS)f
 Ft(v)-5 b(ariable)45 b(is)f(used)f(to)i(split)f(only)g(the)g(results)g
 (of)h(expansion,)i(not)d(all)h(w)m(ords)f(\(see)330 5340
-y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(22\).)41
+y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(23\).)41
 b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)p
 eop end
 %%Page: 133 139
@@ -13303,7 +13645,7 @@ Ft(\(see)e(Section)g(3.5.8)h([Filename)330 518 y(Expansion],)30
 b(page)h(23\).)225 660 y Fp(\017)60 b Ft(Bash)35 b(implemen)m(ts)g
 (extended)g(pattern)g(matc)m(hing)h(features)f(when)f(the)h
 Fs(extglob)d Ft(shell)j(option)330 769 y(is)30 b(enabled)h(\(see)g
-(Section)g(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(23\).)225
+(Section)g(3.5.8.1)i([P)m(attern)f(Matc)m(hing],)g(page)f(24\).)225
 911 y Fp(\017)60 b Ft(It)22 b(is)g(p)s(ossible)g(to)h(ha)m(v)m(e)g(a)f
 (v)-5 b(ariable)23 b(and)f(a)g(function)g(with)g(the)g(same)g(name;)j
 Fs(sh)d Ft(do)s(es)g(not)g(separate)330 1021 y(the)31
@@ -13316,7 +13658,7 @@ Ft(builtin,)i(and)e(th)m(us)330 1272 y(useful)i(recursiv)m(e)g
 b(ariable)25 b(assignmen)m(ts)g(preceding)e(commands)h(a\013ect)h(only)
 f(that)g(command,)h(ev)m(en)f(builtins)g(and)330 1524
 y(functions)36 b(\(see)h(Section)g(3.7.4)h([En)m(vironmen)m(t],)h(page)
-e(30\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)f(v)-5 b(ariable)37
+e(31\).)60 b(In)35 b Fs(sh)p Ft(,)j(all)f(v)-5 b(ariable)37
 b(assignmen)m(ts)330 1633 y(preceding)30 b(commands)g(are)h(global)h
 (unless)d(the)i(command)f(is)h(executed)g(from)f(the)g(\014le)h
 (system.)225 1775 y Fp(\017)60 b Ft(Bash)44 b(p)s(erforms)e(\014lename)
@@ -13550,7 +13892,7 @@ b(do)s(es)f(not)h(fork)f(a)h(subshell)e(when)h(redirecting)h(in)m(to)h
 4648 y(suc)m(h)d(as)h(an)f Fs(if)g Ft(or)g Fs(while)f
 Ft(statemen)m(t.)225 4775 y Fp(\017)60 b Ft(Bash)29 b(do)s(es)f(not)h
 (allo)m(w)h(un)m(balanced)f(quotes.)41 b(The)28 b(SVR4.2)h(shell)g
-(will)g(silen)m(tly)h(insert)f(a)g(needed)330 4884 y(closing)g(quote)g
+(will)g(silen)m(tly)i(insert)d(a)h(needed)330 4884 y(closing)g(quote)g
 (at)f Fs(EOF)f Ft(under)g(certain)h(circumstances.)41
 b(This)27 b(can)h(b)s(e)g(the)g(cause)g(of)g(some)h(hard-)330
 4994 y(to-\014nd)h(errors.)225 5121 y Fp(\017)60 b Ft(The)45
@@ -13739,7 +14081,7 @@ Ft(,)d(P)m(ostScript)i(or)f Fl(pdf)330 3493 y Ft(pro)s(duced)e(b)m(y)h
 b(.)330 3634 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m
 (ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f
 (follo)m(wing)330 3743 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g
-(legibly)-8 b(,)30 b(the)e(material)h(this)f(License)g(requires)f(to)h
+(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h
 (app)s(ear)f(in)h(the)330 3853 y(title)g(page.)40 b(F)-8
 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h
 (an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330
@@ -14733,7 +15075,7 @@ h(.)f(.)g(.)h(.)f(.)g(.)h(.)35 b Fb(65)2025 3695 y Fr(U)2025
 3811 y Fe(UID)14 b Fc(.)f(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)
 f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)40 b Fb(65)2025
-4044 y Fr(V)2025 4160 y Fe(visible-stats)18 b Fc(.)d(.)d(.)g(.)h(.)f(.)
+4044 y Fr(V)2025 4161 y Fe(visible-stats)18 b Fc(.)d(.)d(.)g(.)h(.)f(.)
 g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 (.)f(.)g(.)h(.)f(.)g(.)h(.)43 b Fb(96)p eop end
 %%Page: 151 157
@@ -15060,14 +15402,14 @@ Fc(.)12 b(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 (.)f(.)g(.)h(.)f(.)g(.)h(.)47 b Fb(89)150 4642 y(en)n(vironmen)n(t)10
 b Fc(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)35
-b Fb(30)150 4729 y(ev)l(aluation,)26 b(arithmetic)13
+b Fb(31)150 4729 y(ev)l(aluation,)26 b(arithmetic)13
 b Fc(.)h(.)e(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)
 f(.)g(.)h(.)f(.)g(.)h(.)f(.)39 b Fb(74)150 4817 y(ev)n(en)n(t)25
 b(designators)18 b Fc(.)c(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
 b Fb(117)150 4904 y(execution)26 b(en)n(vironmen)n(t)19
 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fb(29)150 4991 y(exit)25
+(.)f(.)g(.)h(.)f(.)g(.)h(.)45 b Fb(30)150 4991 y(exit)25
 b(status)17 b Fc(.)c(.)g(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)
 h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 (.)43 b Fb(3,)26 b(31)150 5078 y(expansion)16 b Fc(.)d(.)f(.)g(.)h(.)f
@@ -15157,7 +15499,7 @@ b Fb(7)2025 4860 y(login)26 b(shell)13 b Fc(.)h(.)e(.)g(.)h(.)f(.)g(.)h
 g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)39 b Fb(69)2025
 5127 y Fr(M)2025 5249 y Fb(matc)n(hing,)26 b(pattern)7
 b Fc(.)12 b(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h
-(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fb(23)2025
+(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)33 b Fb(24)2025
 5340 y(metac)n(haracter)17 b Fc(.)d(.)e(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 (.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 g(.)h(.)f(.)g(.)44 b Fb(3)p eop end
@@ -15189,7 +15531,7 @@ b(expansion)19 b Fc(.)12 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 (.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)44
 b Fb(23)150 1786 y(pattern)25 b(matc)n(hing)18 b Fc(.)13
 b(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
-(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(23)150
+(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)43 b Fb(24)150
 1875 y(pip)r(eline)15 b Fc(.)e(.)f(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g
 (.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)
 f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)41 b Fb(8)150 1963
@@ -15278,7 +15620,7 @@ f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)36
 b Fb(4)2025 3055 y(w)n(ord)26 b(splitting)21 b Fc(.)12
 b(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f
 (.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)46
-b Fb(22)2025 3304 y Fr(Y)2025 3421 y Fb(y)n(anking)25
+b Fb(23)2025 3304 y Fr(Y)2025 3421 y Fb(y)n(anking)25
 b(text)7 b Fc(.)k(.)i(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h
 (.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)h(.)f(.)g(.)h(.)f(.)
 g(.)33 b Fb(91)p eop end
index f0b39afa3549d719c53f05af5048cc6112af6d68..3c4f397d74439ae4ab08e20f6d42e46b1ae811b4 100644 (file)
@@ -1600,7 +1600,7 @@ Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the @samp{:-} expansion.
 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
+If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
 prefixed to the list.
 
 @item $@{!@var{prefix}*@}
@@ -2592,8 +2592,8 @@ under another shell.
 * Bourne Shell Builtins::      Builtin commands inherited from the Bourne
                                Shell.
 * Bash Builtins::              Table of builtins specific to Bash.
-* The Set Builtin::            This builtin is so overloaded it
-                               deserves its own section.
+* The Set Builtin::            Change the values of shell attributes and
+                               positional parameters.
 * Special Builtins::           Builtin commands classified specially by
                                POSIX.
 @end menu
@@ -3356,7 +3356,7 @@ the eight-bit character whose value is the hexadecimal value @var{HH}
 @item enable
 @btindex enable
 @example
-enable [-n] [-p] [-f @var{filename}] [-ads] [@var{name} @dots{}]
+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
@@ -3942,7 +3942,7 @@ This builtin is so complicated that it deserves its own section.
 @item set
 @btindex set
 @example
-set [--abefhkmnptuvxBCHP] [-o @var{option}] [@var{argument} @dots{}]
+set [--abefhkmnptuvxBCEHPT] [-o @var{option}] [@var{argument} @dots{}]
 @end example
 
 If no options or arguments are supplied, @code{set} displays the names
index 783654eaf8170339347beb6247de80d6a6fb163b..9298c4b5a1106793d0a935cc84b96d28081da2f2 100644 (file)
@@ -1600,7 +1600,7 @@ Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the @samp{:-} expansion.
 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
+If @var{offset} is 0, and the positional parameters are used, @code{$@@} is
 prefixed to the list.
 
 @item $@{!@var{prefix}*@}
@@ -2592,8 +2592,8 @@ under another shell.
 * Bourne Shell Builtins::      Builtin commands inherited from the Bourne
                                Shell.
 * Bash Builtins::              Table of builtins specific to Bash.
-* The Set Builtin::            This builtin is so overloaded it
-                               deserves its own section.
+* The Set Builtin::            Change the values of shell attributes and
+                               positional parameters.
 * Special Builtins::           Builtin commands classified specially by
                                POSIX.
 @end menu
@@ -3287,7 +3287,10 @@ Mark each @var{name} for export to subsequent commands via
 the environment.
 @end table
 
-Using @samp{+} instead of @samp{-} turns off the attribute instead.
+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.  If a variable name is followed by
 =@var{value}, the value of the variable is set to @var{value}.
@@ -3939,7 +3942,7 @@ This builtin is so complicated that it deserves its own section.
 @item set
 @btindex set
 @example
-set [--abefhkmnptuvxBCHP] [-o @var{option}] [@var{argument} @dots{}]
+set [--abefhkmnptuvxBCEHPT] [-o @var{option}] [@var{argument} @dots{}]
 @end example
 
 If no options or arguments are supplied, @code{set} displays the names
@@ -3964,10 +3967,11 @@ immediately, rather than before printing the next primary prompt.
 @item -e
 Exit immediately if a simple command (@pxref{Simple Commands}) exits
 with a non-zero status, unless 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 a @code{&&} or @code{||} list, or if the command's return
-status is being inverted using @code{!}.
+command list immediately following a @code{while} or @code{until} keyword,
+part of the test in an @code{if} statement,
+part of a @code{&&} or @code{||} list,
+any command in a pipeline but the last,
+or if the command's return status is being inverted using @code{!}.
 A trap on @code{ERR}, if set, is executed before the shell exits.
 
 @item -f
@@ -5738,7 +5742,7 @@ from the stack, so that only the stack is manipulated.
 @btindex pushd
 @item pushd
 @example
-pushd [@var{dir} | @var{+N} | @var{-N}] [-n]
+pushd [-n] [@var{+N} | @var{-N} | @var{dir} ]
 @end example
 
 Save the current directory on the top of the directory stack
@@ -5746,6 +5750,9 @@ 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
@@ -5754,9 +5761,6 @@ the list by rotating the stack.
 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 -n
-Suppresses the normal change of directory when adding directories
-to the stack, so that only the stack is manipulated.
 @item @var{dir}
 Makes the current working directory be the top of the stack, and then
 executes the equivalent of `@code{cd} @var{dir}'.
index 71541ca000a0123ccadc55623bce05b6dc7fe9d6..816a55e7e498d8a09b740731a6a54ff845ade300 100644 (file)
@@ -34,7 +34,7 @@
 \subsecentry{Word Splitting}{3}{5}{7}{22}
 \subsecentry{Filename Expansion}{3}{5}{8}{23}
 \subsubsecentry{Pattern Matching}{3}{5}{8}{1}{23}
-\subsecentry{Quote Removal}{3}{5}{9}{24}
+\subsecentry{Quote Removal}{3}{5}{9}{25}
 \secentry{Redirections}{3}{6}{25}
 \subsecentry{Redirecting Input}{3}{6}{1}{26}
 \subsecentry{Redirecting Output}{3}{6}{2}{26}
index 81313f2e10ed936e1282f48e4bf9f0193fb93e0c..f3ae071fee6b7681d495ced3458d24eb873e814a 100644 (file)
@@ -338,64 +338,67 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      environment.
 
               Using `+' instead of `-' turns off the attribute  instead,  with
-              the  exception that +\b+a\ba may not be used to destroy an array vari-
-              able.  When used in a function, makes each _\bn_\ba_\bm_\be local,  as  with
-              the  l\blo\boc\bca\bal\bl  command.   If a variable name is followed by =_\bv_\ba_\bl_\bu_\be,
-              the value of the variable is set to _\bv_\ba_\bl_\bu_\be.  The return value  is
-              0 unless an invalid option is encountered, an attempt is made to
-              define a function using ``-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 (see A\bAr\brr\bra\bay\bys\bs above), one of the _\bn_\ba_\bm_\be_\bs is not a
-              valid shell variable name, an attempt is made to turn off  read-
-              only  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 -\b-f\bf.
-
-       d\bdi\bir\brs\bs [\b[-\b-c\bcl\blp\bpv\bv]\b] [\b[+\b+_\bn]\b] [\b[-\b-_\bn]\b]
-              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  p\bpu\bus\bsh\bhd\bd  command;  the  p\bpo\bop\bpd\bd  command  removes
+              the exceptions that +\b+a\ba may not be used to destroy an array vari-
+              able and +\b+r\br w\bwi\bil\bll\bl n\bno\bot\bt r\bre\bem\bmo\bov\bve\be t\bth\bhe\be r\bre\bea\bad\bdo\bon\bnl\bly\by a\bat\btt\btr\bri\bib\bbu\but\bte\be.\b.   W\bWh\bhe\ben\bn  u\bus\bse\bed\bd
+              i\bin\bn a\ba f\bfu\bun\bnc\bct\bti\bio\bon\bn,\b, m\bma\bak\bke\bes\bs e\bea\bac\bch\bh _\bn_\ba_\bm_\be l\blo\boc\bca\bal\bl,\b, a\bas\bs w\bwi\bit\bth\bh t\bth\bhe\be l\blo\boc\bca\bal\bl command.
+              If a variable name is followed by =_\bv_\ba_\bl_\bu_\be, the value of the vari-
+              able  is  set to _\bv_\ba_\bl_\bu_\be.  The return value is 0 unless an invalid
+              option is encountered, an attempt is made to define  a  function
+              using  ``-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 (see
+              A\bAr\brr\bra\bay\bys\bs above), one of the _\bn_\ba_\bm_\be_\bs is not a  valid  shell  variable
+              name, an attempt is made to turn off readonly status for a read-
+              only variable, an attempt is made to turn off array  status  for
+              an  array variable, or an attempt is made to display a non-exis-
+              tent function with -\b-f\bf.
+
+       d\bdi\bir\brs\bs [\b[+\b+_\bn]\b] [\b[-\b-_\bn]\b] [\b[-\b-c\bcp\bpl\blv\bv]\b]
+              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  p\bpu\bus\bsh\bhd\bd  command;  the  p\bpo\bop\bpd\bd command removes
               entries from the list.
               +\b+_\bn     Displays the _\bnth entry counting from the left of the list
                      shown by d\bdi\bir\brs\bs when invoked without options, starting with
                      zero.
-              -\b-_\bn     Displays  the  _\bnth  entry  counting from the right of the
+              -\b-_\bn     Displays the _\bnth entry counting from  the  right  of  the
                      list shown by d\bdi\bir\brs\bs when invoked without options, starting
                      with zero.
               -\b-c\bc     Clears  the  directory  stack  by  deleting  all  of  the
                      entries.
-              -\b-l\bl     Produces a longer listing;  the  default  listing  format
+              -\b-l\bl     Produces  a  longer  listing;  the default listing format
                      uses a tilde to denote the home directory.
               -\b-p\bp     Print the directory stack with one entry per line.
-              -\b-v\bv     Print  the  directory stack with one entry per line, pre-
+              -\b-v\bv     Print the directory stack with one entry per  line,  pre-
                      fixing each entry with its index in the stack.
 
-              The return value is 0 unless an invalid option is supplied or  _\bn
+              The  return value is 0 unless an invalid option is supplied or _\bn
               indexes beyond the end of the directory stack.
 
        d\bdi\bis\bso\bow\bwn\bn [-\b-a\bar\br] [-\b-h\bh] [_\bj_\bo_\bb_\bs_\bp_\be_\bc ...]
-              Without  options,  each  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is  removed  from the table of
-              active jobs.  If the -\b-h\bh option is given,  each  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is  not
-              removed from the table, but is marked so that S\bSI\bIG\bGH\bHU\bUP\bP is not sent
-              to the job if the shell receives a S\bSI\bIG\bGH\bHU\bUP\bP.   If  no  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is
-              present,  and  neither the -\b-a\ba nor the -\b-r\br option is supplied, the
-              _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb is used.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied, the  -\b-a\ba  option
-              means  to  remove or mark all jobs; the -\b-r\br option without a _\bj_\bo_\bb_\b-
-              _\bs_\bp_\be_\bc argument restricts operation to running jobs.   The  return
-              value is 0 unless a _\bj_\bo_\bb_\bs_\bp_\be_\bc does not specify a valid job.
+              Without options, each _\bj_\bo_\bb_\bs_\bp_\be_\bc  is  removed  from  the  table  of
+              active  jobs.   If _\bj_\bo_\bb_\bs_\bp_\be_\bc is not present, and neither -\b-a\ba n\bno\bor\br -\b-r\br
+              i\bis\bs s\bsu\bup\bpp\bpl\bli\bie\bed\bd,\b, t\bth\bhe\be s\bsh\bhe\bel\bll\bl'\b's\bs n\bno\bot\bti\bio\bon\bn o\bof\bf t\bth\bhe\be _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb i\bis\bs u\bus\bse\bed\bd.\b.   I\bIf\bf
+              t\bth\bhe\be -\b-h\bh o\bop\bpt\bti\bio\bon\bn i\bis\bs g\bgi\biv\bve\ben\bn,\b, e\bea\bac\bch\bh _\bj_\bo_\bb_\bs_\bp_\be_\bc is not removed from the ta-
+              ble, but is marked so that S\bSI\bIG\bGH\bHU\bUP\bP is not sent to the job if  the
+              shell  receives a S\bSI\bIG\bGH\bHU\bUP\bP.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is present, and neither
+              the -\b-a\ba nor the -\b-r\br option is supplied, the _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb  is  used.
+              If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied, the -\b-a\ba option means to remove or mark
+              all jobs; the -\b-r\br option without  a  _\bj_\bo_\bb_\bs_\bp_\be_\bc  argument  restricts
+              operation  to running jobs.  The return value is 0 unless a _\bj_\bo_\bb_\b-
+              _\bs_\bp_\be_\bc does not specify a valid job.
 
        e\bec\bch\bho\bo [-\b-n\bne\beE\bE] [_\ba_\br_\bg ...]
-              Output  the  _\ba_\br_\bgs,  separated  by spaces, followed by a newline.
+              Output the _\ba_\br_\bgs, separated by spaces,  followed  by  a  newline.
               The return status is always 0.  If -\b-n\bn is specified, the trailing
-              newline  is  suppressed.  If the -\b-e\be option is given, interpreta-
-              tion of the following backslash-escaped characters  is  enabled.
-              The  -\b-E\bE option disables the interpretation of these escape char-
-              acters, even on systems where they are interpreted  by  default.
-              The  x\bxp\bpg\bg_\b_e\bec\bch\bho\bo  shell option may be used to dynamically determine
-              whether or not e\bec\bch\bho\bo expands these escape characters by  default.
-              e\bec\bch\bho\b does  not  interpret  -\b--\b- to mean the end of options.  e\bec\bch\bho\bo
+              newline is suppressed.  If the -\b-e\be option is  given,  interpreta-
+              tion  of  the following backslash-escaped characters is enabled.
+              The -\b-E\bE option disables the interpretation of these escape  char-
+              acters,  even  on systems where they are interpreted by default.
+              The x\bxp\bpg\bg_\b_e\bec\bch\bho\bo shell option may be used to  dynamically  determine
+              whether  or not e\bec\bch\bho\bo expands these escape characters by default.
+              e\bec\bch\bho\bdoes not interpret -\b--\b- to mean the  end  of  options.   e\bec\bch\bho\bo
               interprets the following escape sequences:
               \\b\a\ba     alert (bell)
               \\b\b\bb     backspace
@@ -407,52 +410,52 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               \\b\t\bt     horizontal tab
               \\b\v\bv     vertical tab
               \\b\\\b\     backslash
-              \\b\0\b0_\bn_\bn_\bn  the eight-bit character whose value is  the  octal  value
+              \\b\0\b0_\bn_\bn_\bn  the  eight-bit  character  whose value is the octal value
                      _\bn_\bn_\bn (zero to three octal digits)
-              \\b\x\bx_\bH_\bH   the  eight-bit  character  whose value is the hexadecimal
+              \\b\x\bx_\bH_\bH   the eight-bit character whose value  is  the  hexadecimal
                      value _\bH_\bH (one or two hex digits)
 
        e\ben\bna\bab\bbl\ble\be [-\b-a\bad\bdn\bnp\bps\bs] [-\b-f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [_\bn_\ba_\bm_\be ...]
-              Enable and disable builtin shell commands.  Disabling a  builtin
+              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 -\b-n\bn is used, each  _\bn_\ba_\bm_\be  is  disabled;  otherwise,  _\bn_\ba_\bm_\be_\b are
+              to  be  executed without specifying a full pathname, even though
+              the shell normally searches for builtins before  disk  commands.
+              If  -\b-n\bn  is  used,  each  _\bn_\ba_\bm_\be  is disabled; otherwise, _\bn_\ba_\bm_\be_\bs are
               enabled.  For example, to use the t\bte\bes\bst\bt binary found via the P\bPA\bAT\bTH\bH
-              instead of the shell builtin version, run  ``enable  -n  test''.
-              The  -\b-f\bf  option  means to load the new builtin command _\bn_\ba_\bm_\be from
+              instead  of  the  shell builtin version, run ``enable -n test''.
+              The -\b-f\bf option means to load the new builtin  command  _\bn_\ba_\bm_\b from
               shared object _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, on systems that support dynamic loading.
-              The  -\b-d\bd  option will delete a builtin previously loaded with -\b-f\bf.
+              The -\b-d\bd option will delete a builtin previously loaded  with  -\b-f\bf.
               If no _\bn_\ba_\bm_\be arguments are given, or if the -\b-p\bp option is supplied,
               a list of shell builtins is printed.  With no other option argu-
-              ments, the list consists of all enabled shell builtins.   If  -\b-n\bn
-              is  supplied, only disabled builtins are printed.  If -\b-a\ba is sup-
-              plied, the list printed includes all builtins, with  an  indica-
-              tion  of whether or not each is enabled.  If -\b-s\bs is supplied, the
-              output is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The  return
-              value  is  0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there is an
+              ments,  the  list consists of all enabled shell builtins.  If -\b-n\bn
+              is supplied, only disabled builtins are printed.  If -\b-a\ba is  sup-
+              plied,  the  list printed includes all builtins, with an indica-
+              tion of whether or not each is enabled.  If -\b-s\bs is supplied,  the
+              output  is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The return
+              value is 0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there  is  an
               error loading a new builtin from a shared object.
 
        e\bev\bva\bal\bl [_\ba_\br_\bg ...]
-              The _\ba_\br_\bgs are read and concatenated together into a  single  com-
-              mand.   This command is then read and executed by the shell, and
-              its exit status is returned as the value of e\bev\bva\bal\bl.  If there  are
+              The  _\ba_\br_\bgs  are read and concatenated together into a single com-
+              mand.  This command is then read and executed by the shell,  and
+              its  exit status is returned as the value of e\bev\bva\bal\bl.  If there are
               no _\ba_\br_\bg_\bs, or only null arguments, e\bev\bva\bal\bl returns 0.
 
        e\bex\bxe\bec\bc [-\b-c\bcl\bl] [-\b-a\ba _\bn_\ba_\bm_\be] [_\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs]]
-              If  _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new process
-              is created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.   If
+              If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new  process
+              is  created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  If
               the -\b-l\bl option is supplied, the shell places a dash at the begin-
-              ning of the zeroth arg passed to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  This is what _\bl_\bo_\bg_\bi_\bn(1)
-              does.  The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed with an empty
-              environment.  If -\b-a\ba is supplied, the shell passes  _\bn_\ba_\bm_\be  as  the
-              zeroth  argument  to the executed command.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd cannot be
-              executed for some reason, a non-interactive shell exits,  unless
-              the  shell  option e\bex\bxe\bec\bcf\bfa\bai\bil\bl is enabled, in which case it returns
-              failure.  An interactive shell returns failure if the file  can-
-              not  be executed.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd 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.
+              ning  of  the  zeroth  argument passed to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  This is what
+              _\bl_\bo_\bg_\bi_\bn(1) does.  The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed with
+              an  empty environment.  If -\b-a\ba is supplied, the shell passes _\bn_\ba_\bm_\be
+              as the zeroth argument to the executed command.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd can-
+              not  be executed for some reason, a non-interactive shell exits,
+              unless the shell option e\bex\bxe\bec\bcf\bfa\bai\bil\bl is enabled, in  which  case  it
+              returns  failure.   An  interactive shell returns failure if the
+              file cannot be executed.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is not specified, any redi-
+              rections take effect in the current shell, and the return status
+              is 0.  If there is a redirection error, the return status is  1.
 
        e\bex\bxi\bit\bt [_\bn]
               Cause  the  shell  to exit with a status of _\bn.  If _\bn is omitted,
@@ -692,6 +695,9 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               removes the top directory from the stack, and performs a  c\bcd\bd  to
               the new top directory.  Arguments, if supplied, have the follow-
               ing meanings:
+              -\b-n\bn     Suppresses the normal change of directory  when  removing
+                     directories  from  the  stack,  so that only the stack is
+                     manipulated.
               +\b+_\bn     Removes the _\bnth entry counting from the left of the  list
                      shown  by  d\bdi\bir\brs\bs, starting with zero.  For example: ``popd
                      +0'' removes the first directory, ``popd +1'' the second.
@@ -699,9 +705,6 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      shown by d\bdi\bir\brs\bs, starting with zero.  For  example:  ``popd
                      -0''  removes the last directory, ``popd -1'' the next to
                      last.
-              -\b-n\bn     Suppresses the normal change of directory  when  removing
-                     directories  from  the  stack,  so that only the stack is
-                     manipulated.
 
               If the p\bpo\bop\bpd\bd command is successful, a d\bdi\bir\brs\bs is performed as  well,
               and  the  return  status is 0.  p\bpo\bop\bpd\bd returns false if an invalid
@@ -733,22 +736,22 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               null string, as appropriate,  had  been  supplied.   The  return
               value is zero on success, non-zero on failure.
 
-       p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
        p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [+_\bn] [-_\bn]
+       p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
               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:
+              -\b-n\bn     Suppresses  the  normal  change  of directory when adding
+                     directories to the stack,  so  that  only  the  stack  is
+                     manipulated.
               +\b+_\bn     Rotates  the  stack  so  that the _\bnth directory (counting
                      from the left of the list shown by  d\bdi\bir\brs\bs,  starting  with
                      zero) is at the top.
               -\b-_\bn     Rotates  the  stack  so  that the _\bnth directory (counting
                      from the right of the list shown by d\bdi\bir\brs\bs,  starting  with
                      zero) is at the top.
-              -\b-n\bn     Suppresses  the  normal  change  of directory when adding
-                     directories to the stack,  so  that  only  the  stack  is
-                     manipulated.
               _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top, making it the
                      new current working directory.
 
@@ -863,10 +866,10 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       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  w\bwh\bhi\bil\ble\be  or  u\bun\bnt\bti\bil\bl  keyword,
-                      part  of the test in an _\bi_\bf statement, part of a &\b&&\b& or |\b||\b|
-                      list, or if the command's return value is being inverted
-                      via  !\b!.   A  trap on E\bER\bRR\bR, if set, is executed before the
-                      shell exits.
+                      part  of the test in an i\bif\bf statement, part of a &\b&&\b& or |\b||\b|
+                      list, any command in a pipeline but the last, or if  the
+                      command's  return value is being inverted via !\b!.  A trap
+                      on E\bER\bRR\bR, if set, is executed before the shell exits.
               -\b-f\bf      Disable pathname expansion.
               -\b-h\bh      Remember the location of commands as they are looked  up
                       for execution.  This is enabled by default.
index d996c66d9b61ebb49755de0c7d8436d72937dd2d..3ef16cb75d5074b8a8386f4a97c51b1f78b16f5f 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.19.1
-%%CreationDate: Tue Oct  3 08:54:29 2006
+%%CreationDate: Tue Dec 12 14:43:07 2006
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%+ font Times-Italic
@@ -309,13 +309,13 @@ F 1.314(plied, the name and v)144 440.4 R 1.314
 (returns true unless a)3.814 F F3(name)3.814 E F0 1.313(is gi)3.814 F
 -.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E
 (which no alias has been de\214ned.)144 452.4 Q F2(bg)108 469.2 Q F0([)
-2.5 E F3(jobspec)A F0(...])2.5 E .847(Resume each suspended job)144
-481.2 R F3(jobspec)3.347 E F0 .847
-(in the background, as if it had been started with)3.347 F F2(&)3.347 E
-F0 5.847(.I)C(f)-5.847 E F3(job-)3.348 E(spec)144 493.2 Q F0 .689
-(is not present, the shell')3.189 F 3.189(sn)-.55 G .689(otion of the)
--3.189 F F3(curr)3.189 E .689(ent job)-.37 F F0 .689(is used.)3.189 F F2
-(bg)5.689 E F3(jobspec)4.929 E F0 .688(returns 0 unless run)3.499 F .418
+2.5 E F3(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144
+481.2 R F3(jobspec)3.244 E F0 .745
+(in the background, as if it had been started with)3.244 F F2(&)3.245 E
+F0 5.745(.I)C(f)-5.745 E F3(job-)4.985 E(spec)144 493.2 Q F0 .672
+(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the)
+-3.172 F F3(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F2
+(bg)5.671 E F3(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418
 (when job control is disabled or)144 505.2 R 2.919(,w)-.4 G .419
 (hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G
 (peci\214ed)-2.919 E F3(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G
@@ -738,814 +738,816 @@ E(UG)-.1 E F0(and)2.93 E F1(RETURN)2.93 E F0
 (traps from the calling shell.)180 398.4 Q(The trace attrib)5 E
 (ute has no special meaning for v)-.2 E(ariables.)-.25 E F1<ad78>144
 410.4 Q F0(Mark)25.3 E F2(name)2.5 E F0 2.5(sf)C(or e)-2.5 E
-(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .337
-(Using `+' instead of `\255' turns of)144 427.2 R 2.837(ft)-.25 G .337
-(he attrib)-2.837 F .337(ute instead, with the e)-.2 F .336
-(xception that)-.15 F F1(+a)2.836 E F0 .336(may not be used)2.836 F .792
-(to destro)144 439.2 R 3.293(ya)-.1 G 3.293(na)-3.293 G .793(rray v)
--3.293 F 3.293(ariable. When)-.25 F .793(used in a function, mak)3.293 F
-.793(es each)-.1 F F2(name)3.293 E F0 .793(local, as with the)3.293 F F1
-(local)3.293 E F0 2.843(command. If)144 451.2 R 2.843(av)2.843 G .342
-(ariable name is follo)-3.093 F .342(wed by =)-.25 F F2(value)A F0 2.842
-(,t)C .342(he v)-2.842 F .342(alue of the v)-.25 F .342
-(ariable is set to)-.25 F F2(value)2.842 E F0 5.342(.T)C(he)-5.342 E .8
-(return v)144 463.2 R .8(alue is 0 unless an in)-.25 F -.25(va)-.4 G
-.801
-(lid option is encountered, an attempt is made to de\214ne a function)
-.25 F(using)144 475.2 Q/F5 10/Courier@0 SF 1.039(\255f foo=bar)3.539 F
-F0 3.539(,a)C 3.539(na)-3.539 G 1.038(ttempt is made to assign a v)
--3.539 F 1.038(alue to a readonly v)-.25 F 1.038(ariable, an attempt is)
--.25 F .974(made to assign a v)144 487.2 R .974(alue to an array v)-.25
-F .974(ariable without using the compound assignment syntax \(see)-.25 F
-F1(Arrays)144 499.2 Q F0(abo)2.86 E -.15(ve)-.15 G .36(\), one of the)
-.15 F F2(names)2.86 E F0 .36(is not a v)2.86 F .36(alid shell v)-.25 F
-.36(ariable name, an attempt is made to turn of)-.25 F(f)-.25 E .056
-(readonly status for a readonly v)144 511.2 R .057
-(ariable, an attempt is made to turn of)-.25 F 2.557(fa)-.25 G .057
-(rray status for an array v)-2.557 F(ari-)-.25 E
-(able, or an attempt is made to display a non-e)144 523.2 Q
-(xistent function with)-.15 E F1<ad66>2.5 E F0(.)A F1
-(dirs [\255clpv] [+)108 540 Q F2(n)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1(])A
-F0 -.4(Wi)144 552 S .329
+(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .121
+(Using `+' instead of `\255' turns of)144 427.2 R 2.621(ft)-.25 G .121
+(he attrib)-2.621 F .121(ute instead, with the e)-.2 F .12
+(xceptions that)-.15 F F1(+a)2.62 E F0 .12(may not be used)2.62 F 1.236
+(to destro)144 439.2 R 3.736(ya)-.1 G 3.737(na)-3.736 G 1.237(rray v)
+-3.737 F 1.237(ariable and)-.25 F F1 1.237(+r will not r)3.737 F(emo)
+-.18 E 1.437 -.1(ve t)-.1 H 1.237(he r).1 F 1.237(eadonly attrib)-.18 F
+3.737(ute. When)-.2 F 1.237(used in a)3.737 F .312(function, mak)144
+451.2 R .312(es each)-.1 F F2(name)2.812 E F1 .311
+(local, as with the local)2.812 F F0 2.811(command. If)2.811 F 2.811(av)
+2.811 G .311(ariable name is follo)-3.061 F .311(wed by)-.25 F(=)144
+463.2 Q F2(value)A F0 3.238(,t)C .738(he v)-3.238 F .738(alue of the v)
+-.25 F .738(ariable is set to)-.25 F F2(value)3.238 E F0 5.738(.T)C .738
+(he return v)-5.738 F .739(alue is 0 unless an in)-.25 F -.25(va)-.4 G
+.739(lid option is).25 F .603
+(encountered, an attempt is made to de\214ne a function using)144 475.2
+R/F5 10/Courier@0 SF .603(\255f foo=bar)3.103 F F0 3.103(,a)C 3.103(na)
+-3.103 G .603(ttempt is made to)-3.103 F 1.242(assign a v)144 487.2 R
+1.242(alue to a readonly v)-.25 F 1.242
+(ariable, an attempt is made to assign a v)-.25 F 1.243
+(alue to an array v)-.25 F(ariable)-.25 E 1.386
+(without using the compound assignment syntax \(see)144 499.2 R F1
+(Arrays)3.886 E F0(abo)3.886 E -.15(ve)-.15 G 1.386(\), one of the).15 F
+F2(names)3.886 E F0 1.386(is not a)3.886 F -.25(va)144 511.2 S .171
+(lid shell v).25 F .171(ariable name, an attempt is made to turn of)-.25
+F 2.671(fr)-.25 G .171(eadonly status for a readonly v)-2.671 F .172
+(ariable, an)-.25 F .96(attempt is made to turn of)144 523.2 R 3.46(fa)
+-.25 G .96(rray status for an array v)-3.46 F .96
+(ariable, or an attempt is made to display a)-.25 F(non-e)144 535.2 Q
+(xistent function with)-.15 E F1<ad66>2.5 E F0(.)A F1(dirs [+)108 552 Q
+F2(n)A F1 2.5(][)C<ad>-2.5 E F2(n)A F1 2.5(][)C(\255cplv])-2.5 E F0 -.4
+(Wi)144 564 S .328
 (thout options, displays the list of currently remembered directories.)
-.4 F .328(The def)5.328 F .328(ault display is on a)-.1 F 1.238
-(single line with directory names separated by spaces.)144 564 R 1.238
-(Directories are added to the list with the)6.238 F F1(pushd)144 576 Q
+.4 F .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238
+(single line with directory names separated by spaces.)144 576 R 1.238
+(Directories are added to the list with the)6.238 F F1(pushd)144 588 Q
 F0(command; the)2.5 E F1(popd)2.5 E F0(command remo)2.5 E -.15(ve)-.15 G
-2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 588 Q F2(n)A F0 1.565
-(Displays the)25.3 F F2(n)4.065 E F0 1.565
-(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F1
-(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 600 Q F1<ad>144 612 Q F2(n)A
+2.5(se).15 G(ntries from the list.)-2.5 E F1(+)144 600 Q F2(n)A F0 1.564
+(Displays the)25.3 F F2(n)4.064 E F0 1.565
+(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F1
+(dirs)4.065 E F0 1.565(when in)4.065 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
+(without options, starting with zero.)180 612 Q F1<ad>144 624 Q F2(n)A
 F0 1.194(Displays the)25.3 F F2(n)3.694 E F0 1.194
 (th entry counting from the right of the list sho)B 1.194(wn by)-.25 F
 F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 624 Q F1<ad63>144 636 Q F0
+(without options, starting with zero.)180 636 Q F1<ad63>144 648 Q F0
 (Clears the directory stack by deleting all of the entries.)25.86 E F1
-<ad6c>144 648 Q F0 .324(Produces a longer listing; the def)27.52 F .324
+<ad6c>144 660 Q F0 .324(Produces a longer listing; the def)27.52 F .324
 (ault listing format uses a tilde to denote the home direc-)-.1 F(tory)
-180 660 Q(.)-.65 E F1<ad70>144 672 Q F0
+180 672 Q(.)-.65 E F1<ad70>144 684 Q F0
 (Print the directory stack with one entry per line.)24.74 E F1<ad76>144
-684 Q F0 .272(Print the directory stack with one entry per line, pre\
-\214xing each entry with its inde)25.3 F 2.773(xi)-.15 G 2.773(nt)-2.773
-G(he)-2.773 E(stack.)180 696 Q .258(The return v)144 712.8 R .258
-(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
-(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe)
--.15 G 2.758(sb).15 G -.15(ey)-2.758 G .258(ond the end of the direc-)
-.15 F(tory stack.)144 724.8 Q(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735
-E(5)203.725 E 0 Cg EP
+696 Q F0 .273(Print the directory stack with one entry per line, pre\
+\214xing each entry with its inde)25.3 F 2.772(xi)-.15 G 2.772(nt)-2.772
+G(he)-2.772 E(stack.)180 708 Q 1.706(The return v)144 724.8 R 1.706
+(alue is 0 unless an in)-.25 F -.25(va)-.4 G 1.707
+(lid option is supplied or).25 F F2(n)4.207 E F0(inde)4.207 E -.15(xe)
+-.15 G 4.207(sb).15 G -.15(ey)-4.207 G 1.707(ond the end of the).15 F
+(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(5)203.725 E 0 Cg EP
 %%Page: 6 6
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(diso)108 84 Q(wn)-.1 E F0([)2.5 E F1(\255ar)A F0 2.5
-(][)C F1<ad68>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(jobspec)-2.5 E
-F0(...])2.5 E -.4(Wi)144 96 S .33(thout options, each).4 F F2(jobspec)
-4.57 E F0 .33(is remo)3.14 F -.15(ve)-.15 G 2.83(df).15 G .331
-(rom the table of acti)-2.83 F .631 -.15(ve j)-.25 H 2.831(obs. If).15 F
-(the)2.831 E F1<ad68>2.831 E F0 .331(option is gi)2.831 F -.15(ve)-.25 G
-(n,).15 E(each)144 108 Q F2(jobspec)4.521 E F0 .281(is not remo)3.091 F
--.15(ve)-.15 G 2.78(df).15 G .28(rom the table, b)-2.78 F .28
-(ut is mark)-.2 F .28(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)2.78
-E F0 .28(is not sent to the job if)2.53 F .223(the shell recei)144 120 R
--.15(ve)-.25 G 2.724(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0
-.224(If no)4.724 F F2(jobspec)4.464 E F0 .224
-(is present, and neither the)3.034 F F1<ad61>2.724 E F0 .224(nor the)
-2.724 F F1<ad72>2.724 E F0 .224(option is sup-)2.724 F .652(plied, the)
-144 132 R F2(curr)3.152 E .652(ent job)-.37 F F0 .652(is used.)3.152 F
-.652(If no)5.652 F F2(jobspec)4.892 E F0 .652(is supplied, the)3.462 F
-F1<ad61>3.152 E F0 .651(option means to remo)3.151 F .951 -.15(ve o)-.15
-H 3.151(rm).15 G(ark)-3.151 E .434(all jobs; the)144 144 R F1<ad72>2.934
-E F0 .434(option without a)2.934 F F2(jobspec)4.675 E F0(ar)3.245 E .435
-(gument restricts operation to running jobs.)-.18 F .435(The return)
-5.435 F -.25(va)144 156 S(lue is 0 unless a).25 E F2(jobspec)4.24 E F0
-(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 172.8 Q
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E
+(directory stack.)144 84 Q/F1 10/Times-Bold@0 SF(diso)108 100.8 Q(wn)-.1
+E F0([)2.5 E F1(\255ar)A F0 2.5(][)C F1<ad68>-2.5 E F0 2.5(][)C/F2 10
+/Times-Italic@0 SF(jobspec)-2.5 E F0(...])2.5 E -.4(Wi)144 112.8 S .295
+(thout options, each).4 F F2(jobspec)4.535 E F0 .295(is remo)3.105 F
+-.15(ve)-.15 G 2.795(df).15 G .295(rom the table of acti)-2.795 F .595
+-.15(ve j)-.25 H 2.795(obs. If).15 F F2(jobspec)4.535 E F0 .295
+(is not present,)3.105 F .243(and neither)144 124.8 R F1 .243
+(\255a nor \255r is supplied, the shell')2.743 F 2.743(sn)-.37 G .243
+(otion of the)-2.743 F F2(curr)2.743 E .243(ent job)-.37 F F1 .243
+(is used.)2.743 F .244(If the \255h option)5.243 F .334(is gi)144 136.8
+R -.1(ve)-.1 G .334(n, each).1 F F2(jobspec)4.574 E F0 .334(is not remo)
+3.144 F -.15(ve)-.15 G 2.834(df).15 G .334(rom the table, b)-2.834 F
+.334(ut is mark)-.2 F .334(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)
+2.834 E F0 .333(is not sent to)2.584 F 1.189(the job if the shell recei)
+144 148.8 R -.15(ve)-.25 G 3.689(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0
+SF(.)A F0 1.189(If no)5.689 F F2(jobspec)5.429 E F0 1.189
+(is present, and neither the)3.999 F F1<ad61>3.689 E F0 1.19(nor the)
+3.69 F F1<ad72>3.69 E F0 1.57(option is supplied, the)144 160.8 R F2
+(curr)4.07 E 1.57(ent job)-.37 F F0 1.57(is used.)4.07 F 1.569(If no)
+6.569 F F2(jobspec)5.809 E F0 1.569(is supplied, the)4.379 F F1<ad61>
+4.069 E F0 1.569(option means to)4.069 F(remo)144 172.8 Q .903 -.15
+(ve o)-.15 H 3.103(rm).15 G .603(ark all jobs; the)-3.103 F F1<ad72>
+3.103 E F0 .603(option without a)3.103 F F2(jobspec)4.843 E F0(ar)3.414
+E .604(gument restricts operation to running)-.18 F 2.5(jobs. The)144
+184.8 R(return v)2.5 E(alue is 0 unless a)-.25 E F2(jobspec)4.24 E F0
+(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E F1(echo)108 201.6 Q
 F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E
-.395(Output the)144 184.8 R F2(ar)2.895 E(g)-.37 E F0 .395
+.395(Output the)144 213.6 R F2(ar)2.895 E(g)-.37 E F0 .395
 (s, separated by spaces, follo)B .395(wed by a ne)-.25 F 2.895
 (wline. The)-.25 F .394(return status is al)2.895 F -.1(wa)-.1 G .394
 (ys 0.).1 F(If)5.394 E F1<ad6e>2.894 E F0 .548
-(is speci\214ed, the trailing ne)144 196.8 R .548(wline is suppressed.)
+(is speci\214ed, the trailing ne)144 225.6 R .548(wline is suppressed.)
 -.25 F .548(If the)5.548 F F1<ad65>3.048 E F0 .548(option is gi)3.048 F
--.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 208.8 Q
+-.15(ve)-.25 G .548(n, interpretation of the fol-).15 F(lo)144 237.6 Q
 .053(wing backslash-escaped characters is enabled.)-.25 F(The)5.053 E F1
 <ad45>2.553 E F0 .052(option disables the interpretation of these)2.552
-F 1.502(escape characters, e)144 220.8 R -.15(ve)-.25 G 4.002(no).15 G
+F 1.502(escape characters, e)144 249.6 R -.15(ve)-.25 G 4.002(no).15 G
 4.002(ns)-4.002 G 1.502(ystems where the)-4.002 F 4.002(ya)-.15 G 1.502
 (re interpreted by def)-4.002 F 4.003(ault. The)-.1 F F1(xpg_echo)4.003
 E F0(shell)4.003 E .009
-(option may be used to dynamically determine whether or not)144 232.8 R
+(option may be used to dynamically determine whether or not)144 261.6 R
 F1(echo)2.509 E F0 -.15(ex)2.509 G .009(pands these escape characters)
-.15 F .659(by def)144 244.8 R(ault.)-.1 E F1(echo)5.659 E F0 .659
+.15 F .659(by def)144 273.6 R(ault.)-.1 E F1(echo)5.659 E F0 .659
 (does not interpret)3.159 F F1<adad>3.159 E F0 .659
 (to mean the end of options.)3.159 F F1(echo)5.66 E F0 .66
-(interprets the follo)3.16 F(wing)-.25 E(escape sequences:)144 256.8 Q
-F1(\\a)144 268.8 Q F0(alert \(bell\))28.22 E F1(\\b)144 280.8 Q F0
-(backspace)27.66 E F1(\\c)144 292.8 Q F0(suppress trailing ne)28.78 E
-(wline)-.25 E F1(\\e)144 304.8 Q F0(an escape character)28.78 E F1(\\f)
-144 316.8 Q F0(form feed)29.89 E F1(\\n)144 328.8 Q F0(ne)27.66 E 2.5
-(wl)-.25 G(ine)-2.5 E F1(\\r)144 340.8 Q F0(carriage return)28.78 E F1
-(\\t)144 352.8 Q F0(horizontal tab)29.89 E F1(\\v)144 364.8 Q F0 -.15
-(ve)28.22 G(rtical tab).15 E F1(\\\\)144 376.8 Q F0(backslash)30.44 E F1
-(\\0)144 388.8 Q F2(nnn)A F0(the eight-bit character whose v)13.22 E
+(interprets the follo)3.16 F(wing)-.25 E(escape sequences:)144 285.6 Q
+F1(\\a)144 297.6 Q F0(alert \(bell\))28.22 E F1(\\b)144 309.6 Q F0
+(backspace)27.66 E F1(\\c)144 321.6 Q F0(suppress trailing ne)28.78 E
+(wline)-.25 E F1(\\e)144 333.6 Q F0(an escape character)28.78 E F1(\\f)
+144 345.6 Q F0(form feed)29.89 E F1(\\n)144 357.6 Q F0(ne)27.66 E 2.5
+(wl)-.25 G(ine)-2.5 E F1(\\r)144 369.6 Q F0(carriage return)28.78 E F1
+(\\t)144 381.6 Q F0(horizontal tab)29.89 E F1(\\v)144 393.6 Q F0 -.15
+(ve)28.22 G(rtical tab).15 E F1(\\\\)144 405.6 Q F0(backslash)30.44 E F1
+(\\0)144 417.6 Q F2(nnn)A F0(the eight-bit character whose v)13.22 E
 (alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0
-(\(zero to three octal digits\))2.5 E F1(\\x)144 400.8 Q F2(HH)A F0
+(\(zero to three octal digits\))2.5 E F1(\\x)144 429.6 Q F2(HH)A F0
 (the eight-bit character whose v)13.78 E(alue is the he)-.25 E
 (xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)
--.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(enable)108 417.6 Q F0([)2.5 E
+-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F1(enable)108 446.4 Q F0([)2.5 E
 F1(\255adnps)A F0 2.5(][)C F1<ad66>-2.5 E F2(\214lename)2.5 E F0 2.5(][)
-C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 429.6 R
+C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 458.4 R
 .278(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278
 (uiltin allo)-.2 F .278(ws a disk command which has)-.25 F .833
-(the same name as a shell b)144 441.6 R .834(uiltin to be e)-.2 F -.15
+(the same name as a shell b)144 470.4 R .834(uiltin to be e)-.2 F -.15
 (xe)-.15 G .834(cuted without specifying a full pathname, e).15 F -.15
 (ve)-.25 G 3.334(nt).15 G(hough)-3.334 E .99
-(the shell normally searches for b)144 453.6 R .989
+(the shell normally searches for b)144 482.4 R .989
 (uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .989
 (is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F 1.581
-(abled; otherwise,)144 465.6 R F2(names)4.082 E F0 1.582(are enabled.)
+(abled; otherwise,)144 494.4 R F2(names)4.082 E F0 1.582(are enabled.)
 4.082 F -.15(Fo)6.582 G 4.082(re).15 G 1.582(xample, to use the)-4.232 F
 F1(test)4.082 E F0 1.582(binary found via the)4.082 F F3 -.666(PA)4.082
-G(TH)-.189 E F0 .081(instead of the shell b)144 477.6 R .081(uiltin v)
+G(TH)-.189 E F0 .081(instead of the shell b)144 506.4 R .081(uiltin v)
 -.2 F .081(ersion, run)-.15 F/F5 10/Courier@0 SF .081(enable -n test)
 2.581 F F0 5.081(.T)C(he)-5.081 E F1<ad66>2.58 E F0 .08
-(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 489.6 S 1.524
+(option means to load the ne)2.58 F(w)-.25 E -.2(bu)144 518.4 S 1.524
 (iltin command).2 F F2(name)4.384 E F0 1.524(from shared object)4.204 F
 F2(\214lename)4.024 E F0 4.024(,o).18 G 4.024(ns)-4.024 G 1.524
-(ystems that support dynamic loading.)-4.024 F(The)144 501.6 Q F1<ad64>
+(ystems that support dynamic loading.)-4.024 F(The)144 530.4 Q F1<ad64>
 2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F
 .367(viously loaded with)-.25 F F1<ad66>2.866 E F0 5.366(.I)C 2.866(fn)
 -5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi)
--.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 513.6 R F1<ad70>
+-.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 542.4 R F1<ad70>
 2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399
 (uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
 F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144
-525.6 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
+554.4 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
 (is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F
 (If)5.098 E F1<ad61>2.598 E F0 1.916
-(is supplied, the list printed includes all b)144 537.6 R 1.916
+(is supplied, the list printed includes all b)144 566.4 R 1.916
 (uiltins, with an indication of whether or not each is)-.2 F 2.879
-(enabled. If)144 549.6 R F1<ad73>2.879 E F0 .379
+(enabled. If)144 578.4 R F1<ad73>2.879 E F0 .379
 (is supplied, the output is restricted to the POSIX)2.879 F F2(special)
 2.879 E F0 -.2(bu)2.878 G 2.878(iltins. The).2 F .378(return v)2.878 F
-(alue)-.25 E .994(is 0 unless a)144 561.6 R F2(name)3.854 E F0 .994
+(alue)-.25 E .994(is 0 unless a)144 590.4 R F2(name)3.854 E F0 .994
 (is not a shell b)3.674 F .994(uiltin or there is an error loading a ne)
 -.2 F 3.495(wb)-.25 G .995(uiltin from a shared)-3.695 F(object.)144
-573.6 Q F1 -2.3 -.15(ev a)108 590.4 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37
-E F0(...])2.5 E(The)144 602.4 Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C
+602.4 Q F1 -2.3 -.15(ev a)108 619.2 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37
+E F0(...])2.5 E(The)144 631.2 Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C
 .671(re read and concatenated together into a single command.)-3.171 F
-.67(This command is then read)5.67 F .495(and e)144 614.4 R -.15(xe)-.15
+.67(This command is then read)5.67 F .495(and e)144 643.2 R -.15(xe)-.15
 G .495(cuted by the shell, and its e).15 F .495
 (xit status is returned as the v)-.15 F .495(alue of)-.25 F F1 -2.3 -.15
 (ev a)2.995 H(l).15 E F0 5.495(.I)C 2.995(ft)-5.495 G .495(here are no)
--2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 626.4 Q
+-2.995 F F2(ar)2.995 E(gs)-.37 E F0(,).27 E(or only null ar)144 655.2 Q
 (guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E F1
-(exec)108 643.2 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
+(exec)108 672 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
 (name)2.5 E F0 2.5(][)C F2(command)-2.5 E F0([)2.5 E F2(ar)A(guments)
--.37 E F0(]])A(If)144 655.2 Q F2(command)3.006 E F0 .306
+-.37 E F0(]])A(If)144 684 Q F2(command)3.006 E F0 .306
 (is speci\214ed, it replaces the shell.)3.576 F .305(No ne)5.305 F 2.805
 (wp)-.25 G .305(rocess is created.)-2.805 F(The)5.305 E F2(ar)3.135 E
-(guments)-.37 E F0(become)3.075 E .176(the ar)144 667.2 R .176
-(guments to)-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G
-(he)-2.676 E F1<ad6c>2.676 E F0 .176
+(guments)-.37 E F0(become)3.075 E .176(the ar)144 696 R .176(guments to)
+-.18 F F2(command)2.676 E F0 5.176(.I)C 2.676(ft)-5.176 G(he)-2.676 E F1
+<ad6c>2.676 E F0 .176
 (option is supplied, the shell places a dash at the be)2.676 F .177
-(ginning of)-.15 F .16(the zeroth ar)144 679.2 R 2.66(gp)-.18 G .16
-(assed to)-2.66 F F2(command)2.66 E F0 5.16(.T).77 G .159(his is what)
--5.16 F F2(lo)2.659 E(gin)-.1 E F0 .159(\(1\) does.).24 F(The)5.159 E F1
-<ad63>2.659 E F0 .159(option causes)2.659 F F2(command)2.859 E F0(to)
-3.429 E 1.195(be e)144 691.2 R -.15(xe)-.15 G 1.195
-(cuted with an empty en).15 F 3.695(vironment. If)-.4 F F1<ad61>3.696 E
-F0 1.196(is supplied, the shell passes)3.696 F F2(name)4.056 E F0 1.196
-(as the zeroth)3.876 F(ar)144 703.2 Q .02(gument to the e)-.18 F -.15
-(xe)-.15 G .02(cuted command.).15 F(If)5.02 E F2(command)2.72 E F0 .02
-(cannot be e)3.29 F -.15(xe)-.15 G .02
-(cuted for some reason, a non-inter).15 F(-)-.2 E(acti)144 715.2 Q 1.066
--.15(ve s)-.25 H .766(hell e).15 F .766(xits, unless the shell option)
--.15 F F1(execfail)3.266 E F0 .766
-(is enabled, in which case it returns f)3.266 F 3.267(ailure. An)-.1 F
-(interacti)144 727.2 Q 1.519 -.15(ve s)-.25 H 1.219(hell returns f).15 F
-1.219(ailure if the \214le cannot be e)-.1 F -.15(xe)-.15 G 3.719
-(cuted. If).15 F F2(command)3.918 E F0 1.218(is not speci\214ed, an)
-4.488 F(y)-.15 E(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(6)203.725 E
-0 Cg EP
+(ginning of)-.15 F .5(the zeroth ar)144 708 R .5(gument passed to)-.18 F
+F2(command)3 E F0 5.499(.T).77 G .499(his is what)-5.499 F F2(lo)2.999 E
+(gin)-.1 E F0 .499(\(1\) does.).24 F(The)5.499 E F1<ad63>2.999 E F0 .499
+(option causes)2.999 F F2(com-)3.199 E(mand)144 720 Q F0 .638(to be e)
+3.908 F -.15(xe)-.15 G .638(cuted with an empty en).15 F 3.138
+(vironment. If)-.4 F F1<ad61>3.138 E F0 .638
+(is supplied, the shell passes)3.138 F F2(name)3.499 E F0 .639(as the)
+3.319 F(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(6)203.725 E 0 Cg EP
 %%Page: 7 7
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E .133
-(redirections tak)144 84 R 2.633(ee)-.1 G -.25(ff)-2.633 G .134
-(ect in the current shell, and the return status is 0.).25 F .134
-(If there is a redirection error)5.134 F(,)-.4 E
-(the return status is 1.)144 96 Q/F1 10/Times-Bold@0 SF(exit)108 112.8 Q
-F0([)2.5 E/F2 10/Times-Italic@0 SF(n)A F0 6.29(]C)C .096
-(ause the shell to e)-6.29 F .096(xit with a status of)-.15 F F2(n)2.596
-E F0 5.096(.I)C(f)-5.096 E F2(n)2.955 E F0 .095(is omitted, the e)2.835
-F .095(xit status is that of the last command)-.15 F -.15(exe)144 124.8
-S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9/Times-Bold@0 SF(EXIT)2.5 E F0
-(is e)2.25 E -.15(xe)-.15 G(cuted before the shell terminates.).15 E F1
-(export)108 141.6 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)-2.5
-E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 153.6 Q F0
-.256(The supplied)144 165.6 R F2(names)3.117 E F0 .257(are mark)3.027 F
-.257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257
-(vironment of subsequently e)-.4 F -.15(xe)-.15 G(cuted).15 E 2.627
-(commands. If)144 177.6 R(the)2.627 E F1<ad66>2.627 E F0 .127
-(option is gi)2.627 F -.15(ve)-.25 G .127(n, the).15 F F2(names)2.987 E
-F0 .127(refer to functions.)2.897 F .127(If no)5.127 F F2(names)2.987 E
-F0 .127(are gi)2.897 F -.15(ve)-.25 G .126(n, or if the).15 F F1<ad70>
-144 189.6 Q F0 .659(option is supplied, a list of all names that are e)
-3.159 F .66(xported in this shell is printed.)-.15 F(The)5.66 E F1<ad6e>
-3.16 E F0(option)3.16 E 1.587(causes the e)144 201.6 R 1.587
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E 1.078
+(zeroth ar)144 84 R 1.077(gument to the e)-.18 F -.15(xe)-.15 G 1.077
+(cuted command.).15 F(If)6.077 E/F1 10/Times-Italic@0 SF(command)3.777 E
+F0 1.077(cannot be e)4.347 F -.15(xe)-.15 G 1.077
+(cuted for some reason, a).15 F(non-interacti)144 96 Q .617 -.15(ve s)
+-.25 H .317(hell e).15 F .317(xits, unless the shell option)-.15 F/F2 10
+/Times-Bold@0 SF(execfail)2.817 E F0 .318
+(is enabled, in which case it returns f)2.817 F(ail-)-.1 E 2.505
+(ure. An)144 108 R(interacti)2.505 E .305 -.15(ve s)-.25 H .005
+(hell returns f).15 F .005(ailure if the \214le cannot be e)-.1 F -.15
+(xe)-.15 G 2.505(cuted. If).15 F F1(command)2.705 E F0 .005
+(is not speci\214ed,)3.275 F(an)144 120 Q 3.036(yr)-.15 G .536
+(edirections tak)-3.036 F 3.036(ee)-.1 G -.25(ff)-3.036 G .536
+(ect in the current shell, and the return status is 0.).25 F .536
+(If there is a redirection)5.536 F(error)144 132 Q 2.5(,t)-.4 G
+(he return status is 1.)-2.5 E F2(exit)108 148.8 Q F0([)2.5 E F1(n)A F0
+6.29(]C)C .096(ause the shell to e)-6.29 F .096(xit with a status of)
+-.15 F F1(n)2.596 E F0 5.096(.I)C(f)-5.096 E F1(n)2.955 E F0 .095
+(is omitted, the e)2.835 F .095(xit status is that of the last command)
+-.15 F -.15(exe)144 160.8 S 2.5(cuted. A).15 F(trap on)2.5 E/F3 9
+/Times-Bold@0 SF(EXIT)2.5 E F0(is e)2.25 E -.15(xe)-.15 G
+(cuted before the shell terminates.).15 E F2(export)108 177.6 Q F0([)2.5
+E F2(\255fn)A F0 2.5(][).833 G F1(name)-2.5 E F0([=)A F1(wor)A(d)-.37 E
+F0(]] ...)A F2(export \255p)108 189.6 Q F0 .256(The supplied)144 201.6 R
+F1(names)3.117 E F0 .257(are mark)3.027 F .257(ed for automatic e)-.1 F
+.257(xport to the en)-.15 F .257(vironment of subsequently e)-.4 F -.15
+(xe)-.15 G(cuted).15 E 2.627(commands. If)144 213.6 R(the)2.627 E F2
+<ad66>2.627 E F0 .127(option is gi)2.627 F -.15(ve)-.25 G .127(n, the)
+.15 F F1(names)2.987 E F0 .127(refer to functions.)2.897 F .127(If no)
+5.127 F F1(names)2.987 E F0 .127(are gi)2.897 F -.15(ve)-.25 G .126
+(n, or if the).15 F F2<ad70>144 225.6 Q F0 .659
+(option is supplied, a list of all names that are e)3.159 F .66
+(xported in this shell is printed.)-.15 F(The)5.66 E F2<ad6e>3.16 E F0
+(option)3.16 E 1.587(causes the e)144 237.6 R 1.587
 (xport property to be remo)-.15 F -.15(ve)-.15 G 4.086(df).15 G 1.586
-(rom each)-4.086 F F2(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G
-1.586(ariable name is follo)-4.336 F 1.586(wed by)-.25 F(=)144 213.6 Q
-F2(wor)A(d)-.37 E F0 2.803(,t)C .303(he v)-2.803 F .303(alue of the v)
--.25 F .304(ariable is set to)-.25 F F2(wor)2.804 E(d)-.37 E F0(.)A F1
+(rom each)-4.086 F F1(name)4.086 E F0 6.586(.I)C 4.086(fav)-6.586 G
+1.586(ariable name is follo)-4.336 F 1.586(wed by)-.25 F(=)144 249.6 Q
+F1(wor)A(d)-.37 E F0 2.803(,t)C .303(he v)-2.803 F .303(alue of the v)
+-.25 F .304(ariable is set to)-.25 F F1(wor)2.804 E(d)-.37 E F0(.)A F2
 (export)5.304 E F0 .304(returns an e)2.804 F .304
 (xit status of 0 unless an in)-.15 F -.25(va)-.4 G(lid).25 E .294
-(option is encountered, one of the)144 225.6 R F2(names)2.793 E F0 .293
+(option is encountered, one of the)144 261.6 R F1(names)2.793 E F0 .293
 (is not a v)2.793 F .293(alid shell v)-.25 F .293(ariable name, or)-.25
-F F1<ad66>2.793 E F0 .293(is supplied with a)2.793 F F2(name)144.36
-237.6 Q F0(that is not a function.)2.68 E F1(fc)108 254.4 Q F0([)2.5 E
-F1<ad65>A F2(ename)2.5 E F0 2.5(][)C F1(\255nlr)-2.5 E F0 2.5(][)C F2
-<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F2(last)-2.5 E F0(])A F1(fc \255s)108
-266.4 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2
-(cmd)-2.5 E F0(])A .477(Fix Command.)144 278.4 R .478
-(In the \214rst form, a range of commands from)5.477 F F2<8c72>4.888 E
-(st)-.1 E F0(to)3.658 E F2(last)3.068 E F0 .478
-(is selected from the his-)3.658 F .882(tory list.)144 290.4 R F2 -.45
-(Fi)5.882 G -.1(rs).45 G(t).1 E F0(and)4.062 E F2(last)3.472 E F0 .882
+F F2<ad66>2.793 E F0 .293(is supplied with a)2.793 F F1(name)144.36
+273.6 Q F0(that is not a function.)2.68 E F2(fc)108 290.4 Q F0([)2.5 E
+F2<ad65>A F1(ename)2.5 E F0 2.5(][)C F2(\255nlr)-2.5 E F0 2.5(][)C F1
+<8c72>-2.5 E(st)-.1 E F0 2.5(][)C F1(last)-2.5 E F0(])A F2(fc \255s)108
+302.4 Q F0([)2.5 E F1(pat)A F0(=)A F1 -.37(re)C(p).37 E F0 2.5(][)C F1
+(cmd)-2.5 E F0(])A .477(Fix Command.)144 314.4 R .478
+(In the \214rst form, a range of commands from)5.477 F F1<8c72>4.888 E
+(st)-.1 E F0(to)3.658 E F1(last)3.068 E F0 .478
+(is selected from the his-)3.658 F .882(tory list.)144 326.4 R F1 -.45
+(Fi)5.882 G -.1(rs).45 G(t).1 E F0(and)4.062 E F1(last)3.472 E F0 .882
 (may be speci\214ed as a string \(to locate the last command be)4.062 F
 .881(ginning with)-.15 F .797(that string\) or as a number \(an inde)144
-302.4 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F
+338.4 R 3.297(xi)-.15 G .797(nto the history list, where a ne)-3.297 F
 -.05(ga)-.15 G(ti).05 E 1.097 -.15(ve n)-.25 H .797(umber is used as an)
-.15 F(of)144 314.4 Q .277(fset from the current command number\).)-.25 F
-(If)5.277 E F2(last)2.867 E F0 .276
+.15 F(of)144 350.4 Q .277(fset from the current command number\).)-.25 F
+(If)5.277 E F1(last)2.867 E F0 .276
 (is not speci\214ed it is set to the current command)3.457 F .092
-(for listing \(so that)144 326.4 R/F4 10/Courier@0 SF .092
+(for listing \(so that)144 362.4 R/F4 10/Courier@0 SF .092
 (fc \255l \25510)2.592 F F0 .092(prints the last 10 commands\) and to)
-2.592 F F2<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72>
+2.592 F F1<8c72>4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F1<8c72>
 4.502 E(st)-.1 E F0 .093(is not)3.273 F
-(speci\214ed it is set to the pre)144 338.4 Q
-(vious command for editing and \25516 for listing.)-.25 E(The)144 362.4
-Q F1<ad6e>2.522 E F0 .022
+(speci\214ed it is set to the pre)144 374.4 Q
+(vious command for editing and \25516 for listing.)-.25 E(The)144 398.4
+Q F2<ad6e>2.522 E F0 .022
 (option suppresses the command numbers when listing.)2.522 F(The)5.022 E
-F1<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
-(rses the order of).15 F .438(the commands.)144 374.4 R .438(If the)
-5.438 F F1<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
+F2<ad72>2.522 E F0 .022(option re)2.522 F -.15(ve)-.25 G .022
+(rses the order of).15 F .438(the commands.)144 410.4 R .438(If the)
+5.438 F F2<ad6c>2.938 E F0 .438(option is gi)2.938 F -.15(ve)-.25 G .438
 (n, the commands are listed on standard output.).15 F(Otherwise,)5.438 E
-.335(the editor gi)144 386.4 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E
-F2(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835
+.335(the editor gi)144 422.4 R -.15(ve)-.25 G 2.835(nb).15 G(y)-2.835 E
+F1(ename)3.025 E F0 .335(is in)3.015 F -.2(vo)-.4 G -.1(ke).2 G 2.835
 (do).1 G 2.835(na\214)-2.835 G .335(le containing those commands.)-2.835
-F(If)5.334 E F2(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G
-(n,).15 E .63(the v)144 398.4 R .63(alue of the)-.25 F F3(FCEDIT)3.13 E
+F(If)5.334 E F1(ename)3.024 E F0 .334(is not gi)3.014 F -.15(ve)-.25 G
+(n,).15 E .63(the v)144 434.4 R .63(alue of the)-.25 F F3(FCEDIT)3.13 E
 F0 -.25(va)2.88 G .631(riable is used, and the v).25 F .631(alue of)-.25
 F F3(EDIT)3.131 E(OR)-.162 E F0(if)2.881 E F3(FCEDIT)3.131 E F0 .631
-(is not set.)2.881 F .631(If nei-)5.631 F 1.884(ther v)144 410.4 R 1.884
+(is not set.)2.881 F .631(If nei-)5.631 F 1.884(ther v)144 446.4 R 1.884
 (ariable is set, is used.)-.25 F 1.884
 (When editing is complete, the edited commands are echoed and)6.884 F
--.15(exe)144 422.4 S(cuted.).15 E .039(In the second form,)144 446.4 R
-F2(command)2.539 E F0 .039(is re-e)2.539 F -.15(xe)-.15 G .039
-(cuted after each instance of).15 F F2(pat)2.54 E F0 .04(is replaced by)
-2.54 F F2 -.37(re)2.54 G(p).37 E F0 5.04(.A)C(useful)-2.5 E .406
-(alias to use with this is)144 458.4 R F4 .406(r='fc \255s')2.906 F F0
+-.15(exe)144 458.4 S(cuted.).15 E .039(In the second form,)144 482.4 R
+F1(command)2.539 E F0 .039(is re-e)2.539 F -.15(xe)-.15 G .039
+(cuted after each instance of).15 F F1(pat)2.54 E F0 .04(is replaced by)
+2.54 F F1 -.37(re)2.54 G(p).37 E F0 5.04(.A)C(useful)-2.5 E .406
+(alias to use with this is)144 494.4 R F4 .406(r='fc \255s')2.906 F F0
 2.906(,s)C 2.906(ot)-2.906 G .406(hat typing)-2.906 F F4 6.406(rc)2.906
 G(c)-6.406 E F0 .406(runs the last command be)2.906 F .406(ginning with)
--.15 F F4(cc)144 470.4 Q F0(and typing)2.5 E F4(r)2.5 E F0(re-e)2.5 E
+-.15 F F4(cc)144 506.4 Q F0(and typing)2.5 E F4(r)2.5 E F0(re-e)2.5 E
 -.15(xe)-.15 G(cutes the last command.).15 E .142
-(If the \214rst form is used, the return v)144 494.4 R .142
+(If the \214rst form is used, the return v)144 530.4 R .142
 (alue is 0 unless an in)-.25 F -.25(va)-.4 G .142
-(lid option is encountered or).25 F F2<8c72>4.552 E(st)-.1 E F0(or)3.322
-E F2(last)2.732 E F0 .455(specify history lines out of range.)144 506.4
-R .454(If the)5.454 F F1<ad65>2.954 E F0 .454
+(lid option is encountered or).25 F F1<8c72>4.552 E(st)-.1 E F0(or)3.322
+E F1(last)2.732 E F0 .455(specify history lines out of range.)144 542.4
+R .454(If the)5.454 F F2<ad65>2.954 E F0 .454
 (option is supplied, the return v)2.954 F .454(alue is the v)-.25 F .454
-(alue of the)-.25 F .787(last command e)144 518.4 R -.15(xe)-.15 G .787
+(alue of the)-.25 F .787(last command e)144 554.4 R -.15(xe)-.15 G .787
 (cuted or f).15 F .788
 (ailure if an error occurs with the temporary \214le of commands.)-.1 F
 .788(If the)5.788 F 1.136
 (second form is used, the return status is that of the command re-e)144
-530.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F2(cmd)3.835 E F0 1.135
-(does not)4.405 F(specify a v)144 542.4 Q
-(alid history line, in which case)-.25 E F1(fc)2.5 E F0(returns f)2.5 E
-(ailure.)-.1 E F1(fg)108 559.2 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)
-144 571.2 Q F2(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413
+566.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F1(cmd)3.835 E F0 1.135
+(does not)4.405 F(specify a v)144 578.4 Q
+(alid history line, in which case)-.25 E F2(fc)2.5 E F0(returns f)2.5 E
+(ailure.)-.1 E F2(fg)108 595.2 Q F0([)2.5 E F1(jobspec)A F0(])A(Resume)
+144 607.2 Q F1(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413
 (ground, and mak)-.15 F 3.913(ei)-.1 G 3.913(tt)-3.913 G 1.413
-(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F2(jobspec)5.653 E F0
-1.414(is not present, the)4.223 F(shell')144 583.2 Q 3.117(sn)-.55 G
-.617(otion of the)-3.117 F F2(curr)3.117 E .617(ent job)-.37 F F0 .617
+(he current job)-3.913 F 6.413(.I)-.4 G(f)-6.413 E F1(jobspec)5.653 E F0
+1.414(is not present, the)4.223 F(shell')144 619.2 Q 3.117(sn)-.55 G
+.617(otion of the)-3.117 F F1(curr)3.117 E .617(ent job)-.37 F F0 .617
 (is used.)3.117 F .617(The return v)5.617 F .616
-(alue is that of the command placed into the)-.25 F(fore)144 595.2 Q
+(alue is that of the command placed into the)-.25 F(fore)144 631.2 Q
 .362(ground, or f)-.15 F .362
 (ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .363
-(hen run with job control enabled, if)-2.862 F F2(jobspec)145.74 607.2 Q
-F0 .004(does not specify a v)2.815 F .004(alid job or)-.25 F F2(jobspec)
+(hen run with job control enabled, if)-2.862 F F1(jobspec)145.74 643.2 Q
+F0 .004(does not specify a v)2.815 F .004(alid job or)-.25 F F1(jobspec)
 4.244 E F0 .004(speci\214es a job that w)2.814 F .004
-(as started without job control.)-.1 F F1(getopts)108 624 Q F2
-(optstring name)2.5 E F0([)2.5 E F2(ar)A(gs)-.37 E F0(])A F1(getopts)144
-636 Q F0 .793
-(is used by shell procedures to parse positional parameters.)3.293 F F2
+(as started without job control.)-.1 F F2(getopts)108 660 Q F1
+(optstring name)2.5 E F0([)2.5 E F1(ar)A(gs)-.37 E F0(])A F2(getopts)144
+672 Q F0 .793
+(is used by shell procedures to parse positional parameters.)3.293 F F1
 (optstring)6.023 E F0 .793(contains the option)3.513 F .15
-(characters to be recognized; if a character is follo)144 648 R .149
+(characters to be recognized; if a character is follo)144 684 R .149
 (wed by a colon, the option is e)-.25 F .149(xpected to ha)-.15 F .449
--.15(ve a)-.2 H(n).15 E(ar)144 660 Q .578
+-.15(ve a)-.2 H(n).15 E(ar)144 696 Q .578
 (gument, which should be separated from it by white space.)-.18 F .579
 (The colon and question mark char)5.579 F(-)-.2 E 1.665
-(acters may not be used as option characters.)144 672 R 1.665
-(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F1(getopts)
+(acters may not be used as option characters.)144 708 R 1.665
+(Each time it is in)6.665 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F2(getopts)
 4.165 E F0 1.665(places the ne)4.165 F(xt)-.15 E .796
-(option in the shell v)144 684 R(ariable)-.25 E F2(name)3.296 E F0 3.296
-(,i).18 G(nitializing)-3.296 E F2(name)3.657 E F0 .797(if it does not e)
+(option in the shell v)144 720 R(ariable)-.25 E F1(name)3.296 E F0 3.296
+(,i).18 G(nitializing)-3.296 E F1(name)3.657 E F0 .797(if it does not e)
 3.477 F .797(xist, and the inde)-.15 F 3.297(xo)-.15 G 3.297(ft)-3.297 G
-.797(he ne)-3.297 F(xt)-.15 E(ar)144 696 Q .085
-(gument to be processed into the v)-.18 F(ariable)-.25 E F3(OPTIND)2.585
-E/F5 9/Times-Roman@0 SF(.)A F3(OPTIND)4.585 E F0 .085
-(is initialized to 1 each time the shell)2.335 F .845
-(or a shell script is in)144 708 R -.2(vo)-.4 G -.1(ke).2 G 3.345
-(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E F1
-(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)-.18 E .804
-(into the v)144 720 R(ariable)-.25 E F3(OPT)3.304 E(ARG)-.81 E F5(.)A F0
-.803(The shell does not reset)5.304 F F3(OPTIND)3.303 E F0 .803
-(automatically; it must be manually)3.053 F(GNU Bash-3.0)72 768 Q
-(2004 Apr 20)148.735 E(7)203.725 E 0 Cg EP
+.797(he ne)-3.297 F(xt)-.15 E(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735
+E(7)203.725 E 0 Cg EP
 %%Page: 8 8
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E .293
-(reset between multiple calls to)144 84 R/F1 10/Times-Bold@0 SF(getopts)
-2.793 E F0 .293(within the same shell in)2.793 F -.2(vo)-.4 G .293
-(cation if a ne).2 F 2.793(ws)-.25 G .294(et of parameters)-2.793 F
-(is to be used.)144 96 Q 2.044(When the end of options is encountered,)
-144 120 R F1(getopts)4.543 E F0 -.15(ex)4.543 G 2.043
-(its with a return v).15 F 2.043(alue greater than zero.)-.25 F F1
-(OPTIND)144 132 Q F0(is set to the inde)2.5 E 2.5(xo)-.15 G 2.5(ft)-2.5
-G(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F1(name)2.5 E F0
-(is set to ?.)2.5 E F1(getopts)144 156 Q F0 2.392
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E(ar)144 84 Q
+.085(gument to be processed into the v)-.18 F(ariable)-.25 E/F1 9
+/Times-Bold@0 SF(OPTIND)2.585 E/F2 9/Times-Roman@0 SF(.)A F1(OPTIND)
+4.585 E F0 .085(is initialized to 1 each time the shell)2.335 F .845
+(or a shell script is in)144 96 R -.2(vo)-.4 G -.1(ke).2 G 3.345
+(d. When).1 F .845(an option requires an ar)3.345 F(gument,)-.18 E/F3 10
+/Times-Bold@0 SF(getopts)3.346 E F0 .846(places that ar)3.346 F(gument)
+-.18 E .804(into the v)144 108 R(ariable)-.25 E F1(OPT)3.304 E(ARG)-.81
+E F2(.)A F0 .803(The shell does not reset)5.304 F F1(OPTIND)3.303 E F0
+.803(automatically; it must be manually)3.053 F .293
+(reset between multiple calls to)144 120 R F3(getopts)2.793 E F0 .293
+(within the same shell in)2.793 F -.2(vo)-.4 G .293(cation if a ne).2 F
+2.793(ws)-.25 G .294(et of parameters)-2.793 F(is to be used.)144 132 Q
+2.044(When the end of options is encountered,)144 156 R F3(getopts)4.543
+E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.043
+(alue greater than zero.)-.25 F F3(OPTIND)144 168 Q F0
+(is set to the inde)2.5 E 2.5(xo)-.15 G 2.5(ft)-2.5 G
+(he \214rst non-option ar)-2.5 E(gument, and)-.18 E F3(name)2.5 E F0
+(is set to ?.)2.5 E F3(getopts)144 192 Q F0 2.392
 (normally parses the positional parameters, b)4.892 F 2.392
 (ut if more ar)-.2 F 2.393(guments are gi)-.18 F -.15(ve)-.25 G 4.893
-(ni).15 G(n)-4.893 E/F2 10/Times-Italic@0 SF(ar)4.893 E(gs)-.37 E F0(,)
-.27 E F1(getopts)144 168 Q F0(parses those instead.)2.5 E F1(getopts)144
-192 Q F0 1.166(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665
-(ays. If)-3.765 F 1.165(the \214rst character of)3.665 F F2(optstring)
-3.895 E F0 1.165(is a colon,)3.885 F F2(silent)4.005 E F0(error)4.345 E
-1.263(reporting is used.)144 204 R 1.263
+(ni).15 G(n)-4.893 E/F4 10/Times-Italic@0 SF(ar)4.893 E(gs)-.37 E F0(,)
+.27 E F3(getopts)144 204 Q F0(parses those instead.)2.5 E F3(getopts)144
+228 Q F0 1.166(can report errors in tw)3.666 F 3.665(ow)-.1 G 3.665
+(ays. If)-3.765 F 1.165(the \214rst character of)3.665 F F4(optstring)
+3.895 E F0 1.165(is a colon,)3.885 F F4(silent)4.005 E F0(error)4.345 E
+1.263(reporting is used.)144 240 R 1.263
 (In normal operation diagnostic messages are printed when in)6.263 F
--.25(va)-.4 G 1.263(lid options or).25 F .394(missing option ar)144 216
+-.25(va)-.4 G 1.263(lid options or).25 F .394(missing option ar)144 252
 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F(ariable)
--.25 E/F3 9/Times-Bold@0 SF(OPTERR)2.894 E F0 .394
-(is set to 0, no error messages)2.644 F(will be displayed, e)144 228 Q
--.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214rst character of)-2.5 E
-F2(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 252 R
--.25(va)-.4 G .666(lid option is seen,).25 F F1(getopts)3.166 E F0 .667
-(places ? into)3.167 F F2(name)3.527 E F0 .667
-(and, if not silent, prints an error message)3.347 F .4(and unsets)144
-264 R F3(OPT)2.9 E(ARG)-.81 E/F4 9/Times-Roman@0 SF(.)A F0(If)4.899 E F1
+-.25 E F1(OPTERR)2.894 E F0 .394(is set to 0, no error messages)2.644 F
+(will be displayed, e)144 264 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5
+G(he \214rst character of)-2.5 E F4(optstring)2.73 E F0(is not a colon.)
+2.72 E .666(If an in)144 288 R -.25(va)-.4 G .666(lid option is seen,)
+.25 F F3(getopts)3.166 E F0 .667(places ? into)3.167 F F4(name)3.527 E
+F0 .667(and, if not silent, prints an error message)3.347 F .4
+(and unsets)144 300 R F1(OPT)2.9 E(ARG)-.81 E F2(.)A F0(If)4.899 E F3
 (getopts)2.899 E F0 .399
-(is silent, the option character found is placed in)2.899 F F3(OPT)2.899
+(is silent, the option character found is placed in)2.899 F F1(OPT)2.899
 E(ARG)-.81 E F0 .399(and no)2.649 F(diagnostic message is printed.)144
-276 Q 1.241(If a required ar)144 300 R 1.241(gument is not found, and)
--.18 F F1(getopts)3.741 E F0 1.241(is not silent, a question mark \()
-3.741 F F1(?).833 E F0 3.742(\)i).833 G 3.742(sp)-3.742 G 1.242
-(laced in)-3.742 F F2(name)144 312 Q F0(,).18 E F3(OPT)2.735 E(ARG)-.81
+312 Q 1.241(If a required ar)144 336 R 1.241(gument is not found, and)
+-.18 F F3(getopts)3.741 E F0 1.241(is not silent, a question mark \()
+3.741 F F3(?).833 E F0 3.742(\)i).833 G 3.742(sp)-3.742 G 1.242
+(laced in)-3.742 F F4(name)144 348 Q F0(,).18 E F1(OPT)2.735 E(ARG)-.81
 E F0 .234(is unset, and a diagnostic message is printed.)2.485 F(If)
-5.234 E F1(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F1
-(:).833 E F0(\)).833 E(is placed in)144 324 Q F2(name)2.86 E F0(and)2.68
-E F3(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25
-E F1(getopts)144 348 Q F0 .902
+5.234 E F3(getopts)2.734 E F0 .234(is silent, then a colon \()2.734 F F3
+(:).833 E F0(\)).833 E(is placed in)144 360 Q F4(name)2.86 E F0(and)2.68
+E F1(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25
+E F3(getopts)144 384 Q F0 .902
 (returns true if an option, speci\214ed or unspeci\214ed, is found.)
 3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F
-(options is encountered or an error occurs.)144 360 Q F1(hash)108 376.8
-Q F0([)2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E F2(\214lename)2.5 E
-F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5 E F0(])A -.15(Fo)
-144 388.8 S 3.555(re).15 G(ach)-3.555 E F2(name)3.555 E F0 3.555(,t).18
+(options is encountered or an error occurs.)144 396 Q F3(hash)108 412.8
+Q F0([)2.5 E F3(\255lr)A F0 2.5(][)C F3<ad70>-2.5 E F4(\214lename)2.5 E
+F0 2.5(][)C F3(\255dt)-2.5 E F0 2.5(][)C F4(name)-2.5 E F0(])A -.15(Fo)
+144 424.8 S 3.555(re).15 G(ach)-3.555 E F4(name)3.555 E F0 3.555(,t).18
 G 1.054(he full \214le name of the command is determined by searching t\
-he directories in)-3.555 F F1($P)144 400.8 Q -.95(AT)-.74 G(H).95 E F0
-.349(and remembered.)2.849 F .349(If the)5.349 F F1<ad70>2.849 E F0 .349
-(option is supplied, no path search is performed, and)2.849 F F2
+he directories in)-3.555 F F3($P)144 436.8 Q -.95(AT)-.74 G(H).95 E F0
+.349(and remembered.)2.849 F .349(If the)5.349 F F3<ad70>2.849 E F0 .349
+(option is supplied, no path search is performed, and)2.849 F F4
 (\214lename)4.76 E F0 .452
-(is used as the full \214le name of the command.)144 412.8 R(The)5.452 E
-F1<ad72>2.952 E F0 .452(option causes the shell to for)2.952 F .452
-(get all remem-)-.18 F .592(bered locations.)144 424.8 R(The)5.592 E F1
+(is used as the full \214le name of the command.)144 448.8 R(The)5.452 E
+F3<ad72>2.952 E F0 .452(option causes the shell to for)2.952 F .452
+(get all remem-)-.18 F .592(bered locations.)144 460.8 R(The)5.592 E F3
 <ad64>3.092 E F0 .593(option causes the shell to for)3.092 F .593
-(get the remembered location of each)-.18 F F2(name)3.093 E F0(.)A .021
-(If the)144 436.8 R F1<ad74>2.521 E F0 .021
-(option is supplied, the full pathname to which each)2.521 F F2(name)
+(get the remembered location of each)-.18 F F4(name)3.093 E F0(.)A .021
+(If the)144 472.8 R F3<ad74>2.521 E F0 .021
+(option is supplied, the full pathname to which each)2.521 F F4(name)
 2.52 E F0 .02(corresponds is printed.)2.52 F .02(If multi-)5.02 F(ple)
-144 448.8 Q F2(name)3.703 E F0(ar)3.703 E 1.203
-(guments are supplied with)-.18 F F1<ad74>3.703 E F0 3.703(,t)C(he)
--3.703 E F2(name)3.703 E F0 1.204
-(is printed before the hashed full pathname.)3.703 F(The)144 460.8 Q F1
+144 484.8 Q F4(name)3.703 E F0(ar)3.703 E 1.203
+(guments are supplied with)-.18 F F3<ad74>3.703 E F0 3.703(,t)C(he)
+-3.703 E F4(name)3.703 E F0 1.204
+(is printed before the hashed full pathname.)3.703 F(The)144 496.8 Q F3
 <ad6c>3.216 E F0 .715(option causes output to be displayed in a format \
 that may be reused as input.)3.216 F .715(If no ar)5.715 F(gu-)-.18 E
-1.183(ments are gi)144 472.8 R -.15(ve)-.25 G 1.183(n, or if only).15 F
-F1<ad6c>3.683 E F0 1.184
+1.183(ments are gi)144 508.8 R -.15(ve)-.25 G 1.183(n, or if only).15 F
+F3<ad6c>3.683 E F0 1.184
 (is supplied, information about remembered commands is printed.)3.684 F
-(The return status is true unless a)144 484.8 Q F2(name)2.86 E F0
+(The return status is true unless a)144 520.8 Q F4(name)2.86 E F0
 (is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25
-E F1(help)108 501.6 Q F0([)2.5 E F1<ad73>A F0 2.5(][)C F2(pattern)-2.5 E
-F0(])A .867(Display helpful information about b)144 513.6 R .867
-(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .866
-(is speci\214ed,)3.607 F F1(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 G
+E F3(help)108 537.6 Q F0([)2.5 E F3<ad73>A F0 2.5(][)C F4(pattern)-2.5 E
+F0(])A .867(Display helpful information about b)144 549.6 R .867
+(uiltin commands.)-.2 F(If)5.867 E F4(pattern)4.617 E F0 .866
+(is speci\214ed,)3.607 F F3(help)3.366 E F0(gi)3.366 E -.15(ve)-.25 G
 3.366(sd).15 G(etailed)-3.366 E .306(help on all commands matching)144
-525.6 R F2(pattern)2.806 E F0 2.807(;o).24 G .307
+561.6 R F4(pattern)2.806 E F0 2.807(;o).24 G .307
 (therwise help for all the b)-2.807 F .307
-(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 537.6
-R(The)5.596 E F1<ad73>3.096 E F0 .596
+(uiltins and shell control struc-)-.2 F .596(tures is printed.)144 573.6
+R(The)5.596 E F3<ad73>3.096 E F0 .596
 (option restricts the information displayed to a short usage synopsis.)
 3.096 F(The)5.596 E(return status is 0 unless no command matches)144
-549.6 Q F2(pattern)2.5 E F0(.).24 E F1(history [)108 566.4 Q F2(n)A F1
-(])A(history \255c)108 578.4 Q(history \255d)108 590.4 Q F2(of)2.5 E
-(fset)-.18 E F1(history \255anrw)108 602.4 Q F0([)2.5 E F2(\214lename)A
-F0(])A F1(history \255p)108 614.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2
-(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 626.4 Q F2(ar)
-2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)
-144 638.4 S .752
+585.6 Q F4(pattern)2.5 E F0(.).24 E F3(history [)108 602.4 Q F4(n)A F3
+(])A(history \255c)108 614.4 Q(history \255d)108 626.4 Q F4(of)2.5 E
+(fset)-.18 E F3(history \255anrw)108 638.4 Q F0([)2.5 E F4(\214lename)A
+F0(])A F3(history \255p)108 650.4 Q F4(ar)2.5 E(g)-.37 E F0([)2.5 E F4
+(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A F3(history \255s)108 662.4 Q F4(ar)
+2.5 E(g)-.37 E F0([)2.5 E F4(ar)A 2.5(g.)-.37 G(..)-2.5 E F0(])A -.4(Wi)
+144 674.4 S .752
 (th no options, display the command history list with line numbers.).4 F
-.752(Lines listed with a)5.752 F F1(*)3.252 E F0(ha)3.252 E -.15(ve)-.2
-G 1.231(been modi\214ed.)144 650.4 R 1.231(An ar)6.231 F 1.231
-(gument of)-.18 F F2(n)4.091 E F0 1.231(lists only the last)3.971 F F2
+.752(Lines listed with a)5.752 F F3(*)3.252 E F0(ha)3.252 E -.15(ve)-.2
+G 1.231(been modi\214ed.)144 686.4 R 1.231(An ar)6.231 F 1.231
+(gument of)-.18 F F4(n)4.091 E F0 1.231(lists only the last)3.971 F F4
 (n)4.091 E F0 3.73(lines. If)3.97 F 1.23(the shell v)3.73 F(ariable)-.25
-E F1(HISTTIME-)3.73 E(FORMA)144 662.4 Q(T)-.95 E F0 .249
-(is set and not null, it is used as a format string for)2.749 F F2
+E F3(HISTTIME-)3.73 E(FORMA)144 698.4 Q(T)-.95 E F0 .249
+(is set and not null, it is used as a format string for)2.749 F F4
 (strftime)2.75 E F0 .25(\(3\) to display the time stamp)B .379
-(associated with each displayed history entry)144 674.4 R 5.379(.N)-.65
+(associated with each displayed history entry)144 710.4 R 5.379(.N)-.65
 G 2.878(oi)-5.379 G(nterv)-2.878 E .378
 (ening blank is printed between the format-)-.15 F .814
-(ted time stamp and the history line.)144 686.4 R(If)5.814 E F2
+(ted time stamp and the history line.)144 722.4 R(If)5.814 E F4
 (\214lename)3.314 E F0 .814
 (is supplied, it is used as the name of the history)3.314 F
-(\214le; if not, the v)144 698.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0
-(is used.)2.25 E(Options, if supplied, ha)5 E .3 -.15(ve t)-.2 H
-(he follo).15 E(wing meanings:)-.25 E F1<ad63>144 710.4 Q F0
-(Clear the history list by deleting all the entries.)25.86 E
 (GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(8)203.725 E 0 Cg EP
 %%Page: 9 9
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF<ad64>144 84 Q/F2 10/Times-Italic@0 SF(of)2.5 E(fset)
--.18 E F0(Delete the history entry at position)180 96 Q F2(of)2.5 E
-(fset)-.18 E F0(.)A F1<ad61>144 108 Q F0 .599(Append the `)25.3 F(`ne)
--.74 E(w')-.25 E 3.099('h)-.74 G .598
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E
+(\214le; if not, the v)144 84 Q(alue of)-.25 E/F1 9/Times-Bold@0 SF
+(HISTFILE)2.5 E F0(is used.)2.25 E(Options, if supplied, ha)5 E .3 -.15
+(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E/F2 10/Times-Bold@0 SF
+<ad63>144 96 Q F0(Clear the history list by deleting all the entries.)
+25.86 E F2<ad64>144 108 Q/F3 10/Times-Italic@0 SF(of)2.5 E(fset)-.18 E
+F0(Delete the history entry at position)180 120 Q F3(of)2.5 E(fset)-.18
+E F0(.)A F2<ad61>144 132 Q F0 .599(Append the `)25.3 F(`ne)-.74 E(w')
+-.25 E 3.099('h)-.74 G .598
 (istory lines \(history lines entered since the be)-3.099 F .598
-(ginning of the current)-.15 F F1(bash)180 120 Q F0
-(session\) to the history \214le.)2.5 E F1<ad6e>144 132 Q F0 .854(Read \
+(ginning of the current)-.15 F F2(bash)180 144 Q F0
+(session\) to the history \214le.)2.5 E F2<ad6e>144 156 Q F0 .854(Read \
 the history lines not already read from the history \214le into the cur\
 rent history list.)24.74 F .773
-(These are lines appended to the history \214le since the be)180 144 R
-.772(ginning of the current)-.15 F F1(bash)3.272 E F0(ses-)3.272 E
-(sion.)180 156 Q F1<ad72>144 168 Q F0(Read the contents of the history \
-\214le and use them as the current history)25.86 E(.)-.65 E F1<ad77>144
-180 Q F0(Write the current history to the history \214le, o)23.08 E -.15
+(These are lines appended to the history \214le since the be)180 168 R
+.772(ginning of the current)-.15 F F2(bash)3.272 E F0(ses-)3.272 E
+(sion.)180 180 Q F2<ad72>144 192 Q F0(Read the contents of the history \
+\214le and use them as the current history)25.86 E(.)-.65 E F2<ad77>144
+204 Q F0(Write the current history to the history \214le, o)23.08 E -.15
 (ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G(ontents.)
--2.5 E F1<ad70>144 192 Q F0 .625
-(Perform history substitution on the follo)24.74 F(wing)-.25 E F2(ar)
+-2.5 E F2<ad70>144 216 Q F0 .625
+(Perform history substitution on the follo)24.74 F(wing)-.25 E F3(ar)
 3.125 E(gs)-.37 E F0 .626(and display the result on the standard)3.125 F
-2.975(output. Does)180 204 R .475
-(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
+2.975(output. Does)180 228 R .475
+(not store the results in the history list.)2.975 F(Each)5.475 E F3(ar)
 2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
-(normal history e)180 216 Q(xpansion.)-.15 E F1<ad73>144 228 Q F0 .362
-(Store the)26.41 F F2(ar)3.192 E(gs)-.37 E F0 .363
+(normal history e)180 240 Q(xpansion.)-.15 E F2<ad73>144 252 Q F0 .362
+(Store the)26.41 F F3(ar)3.192 E(gs)-.37 E F0 .363
 (in the history list as a single entry)3.132 F 5.363(.T)-.65 G .363
-(he last command in the history list is)-5.363 F(remo)180 240 Q -.15(ve)
--.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0
-(are added.)2.77 E .28(If the)144 256.8 R F1(HISTTIMEFORMA)2.78 E(T)-.95
+(he last command in the history list is)-5.363 F(remo)180 264 Q -.15(ve)
+-.15 G 2.5(db).15 G(efore the)-2.5 E F3(ar)2.83 E(gs)-.37 E F0
+(are added.)2.77 E .28(If the)144 280.8 R F2(HISTTIMEFORMA)2.78 E(T)-.95
 E F0 .28
 (is set, the time stamp information associated with each history entry)
-2.78 F .216(is written to the history \214le.)144 268.8 R .216
+2.78 F .216(is written to the history \214le.)144 292.8 R .216
 (The return v)5.216 F .216(alue is 0 unless an in)-.25 F -.25(va)-.4 G
 .216(lid option is encountered, an error).25 F .422
-(occurs while reading or writing the history \214le, an in)144 280.8 R
--.25(va)-.4 G(lid).25 E F2(of)2.922 E(fset)-.18 E F0 .422
-(is supplied as an ar)2.922 F .421(gument to)-.18 F F1<ad64>2.921 E F0
-(,)A(or the history e)144 292.8 Q(xpansion supplied as an ar)-.15 E
-(gument to)-.18 E F1<ad70>2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(jobs)108
-309.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5(][)C F2(jobspec)A F0(... ])2.5
-E F1(jobs \255x)108 321.6 Q F2(command)2.5 E F0([)2.5 E F2(ar)2.5 E(gs)
--.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 333.6 Q .3
+(occurs while reading or writing the history \214le, an in)144 304.8 R
+-.25(va)-.4 G(lid).25 E F3(of)2.922 E(fset)-.18 E F0 .422
+(is supplied as an ar)2.922 F .421(gument to)-.18 F F2<ad64>2.921 E F0
+(,)A(or the history e)144 316.8 Q(xpansion supplied as an ar)-.15 E
+(gument to)-.18 E F2<ad70>2.5 E F0 -.1(fa)2.5 G(ils.).1 E F2(jobs)108
+333.6 Q F0([)2.5 E F2(\255lnprs)A F0 2.5(][)C F3(jobspec)A F0(... ])2.5
+E F2(jobs \255x)108 345.6 Q F3(command)2.5 E F0([)2.5 E F3(ar)2.5 E(gs)
+-.37 E F0(... ])2.5 E(The \214rst form lists the acti)144 357.6 Q .3
 -.15(ve j)-.25 H 2.5(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H
-(he follo).15 E(wing meanings:)-.25 E F1<ad6c>144 345.6 Q F0
-(List process IDs in addition to the normal information.)27.52 E F1
-<ad70>144 357.6 Q F0(List only the process ID of the job')24.74 E 2.5
-(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F1<ad6e>144 369.6 Q F0
+(he follo).15 E(wing meanings:)-.25 E F2<ad6c>144 369.6 Q F0
+(List process IDs in addition to the normal information.)27.52 E F2
+<ad70>144 381.6 Q F0(List only the process ID of the job')24.74 E 2.5
+(sp)-.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad6e>144 393.6 Q F0
 .193(Display information only about jobs that ha)24.74 F .494 -.15(ve c)
 -.2 H .194(hanged status since the user w).15 F .194(as last noti-)-.1 F
-(\214ed of their status.)180 381.6 Q F1<ad72>144 393.6 Q F0
-(Restrict output to running jobs.)25.86 E F1<ad73>144 405.6 Q F0
-(Restrict output to stopped jobs.)26.41 E(If)144 422.4 Q F2(jobspec)
+(\214ed of their status.)180 405.6 Q F2<ad72>144 417.6 Q F0
+(Restrict output to running jobs.)25.86 E F2<ad73>144 429.6 Q F0
+(Restrict output to stopped jobs.)26.41 E(If)144 446.4 Q F3(jobspec)
 4.554 E F0 .314(is gi)3.124 F -.15(ve)-.25 G .314
 (n, output is restricted to information about that job).15 F 5.313(.T)
--.4 G .313(he return status is 0 unless)-5.313 F(an in)144 434.4 Q -.25
+-.4 G .313(he return status is 0 unless)-5.313 F(an in)144 458.4 Q -.25
 (va)-.4 G(lid option is encountered or an in).25 E -.25(va)-.4 G(lid).25
-E F2(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 451.2 R F1
-<ad78>2.894 E F0 .394(option is supplied,)2.894 F F1(jobs)2.894 E F0
-.394(replaces an)2.894 F(y)-.15 E F2(jobspec)4.634 E F0 .394(found in)
-3.204 F F2(command)3.094 E F0(or)3.664 E F2(ar)3.224 E(gs)-.37 E F0 .395
-(with the corre-)3.164 F(sponding process group ID, and e)144 463.2 Q
--.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar)
+E F3(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 475.2 R F2
+<ad78>2.894 E F0 .394(option is supplied,)2.894 F F2(jobs)2.894 E F0
+.394(replaces an)2.894 F(y)-.15 E F3(jobspec)4.634 E F0 .394(found in)
+3.204 F F3(command)3.094 E F0(or)3.664 E F3(ar)3.224 E(gs)-.37 E F0 .395
+(with the corre-)3.164 F(sponding process group ID, and e)144 487.2 Q
+-.15(xe)-.15 G(cutes).15 E F3(command)2.7 E F0(passing it)3.27 E F3(ar)
 2.5 E(gs)-.37 E F0 2.5(,r).27 G(eturning its e)-2.5 E(xit status.)-.15 E
-F1(kill)108 480 Q F0([)2.5 E F1<ad73>A F2(sigspec)2.5 E F0(|)2.5 E F1
-<ad6e>2.5 E F2(signum)2.5 E F0(|)2.5 E F1<ad>2.5 E F2(sigspec)A F0 2.5
-(][)C F2(pid)-2.5 E F0(|)2.5 E F2(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F1
-(kill \255l)108 492 Q F0([)2.5 E F2(sigspec)A F0(|)2.5 E F2 -.2(ex)2.5 G
-(it_status).2 E F0(])A .12(Send the signal named by)144 504 R F2
-(sigspec)2.96 E F0(or)2.93 E F2(signum)2.96 E F0 .119
-(to the processes named by)2.939 F F2(pid)3.869 E F0(or)3.389 E F2
-(jobspec)2.619 E F0(.).31 E F2(sigspec)5.459 E F0(is)2.929 E .318
-(either a case-insensiti)144 516 R .618 -.15(ve s)-.25 H .318
-(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.818 E F0 .319
-(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319
-(pre\214x\) or a signal)2.569 F(number;)144 528 Q F2(signum)4.189 E F0
-1.349(is a signal number)4.169 F 6.349(.I)-.55 G(f)-6.349 E F2(sigspec)
-4.189 E F0 1.349(is not present, then)4.159 F F3(SIGTERM)3.849 E F0
-1.348(is assumed.)3.599 F(An)6.348 E(ar)144 540 Q .522(gument of)-.18 F
-F1<ad6c>3.023 E F0 .523(lists the signal names.)3.023 F .523(If an)5.523
+F2(kill)108 504 Q F0([)2.5 E F2<ad73>A F3(sigspec)2.5 E F0(|)2.5 E F2
+<ad6e>2.5 E F3(signum)2.5 E F0(|)2.5 E F2<ad>2.5 E F3(sigspec)A F0 2.5
+(][)C F3(pid)-2.5 E F0(|)2.5 E F3(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F2
+(kill \255l)108 516 Q F0([)2.5 E F3(sigspec)A F0(|)2.5 E F3 -.2(ex)2.5 G
+(it_status).2 E F0(])A .12(Send the signal named by)144 528 R F3
+(sigspec)2.96 E F0(or)2.93 E F3(signum)2.96 E F0 .119
+(to the processes named by)2.939 F F3(pid)3.869 E F0(or)3.389 E F3
+(jobspec)2.619 E F0(.).31 E F3(sigspec)5.459 E F0(is)2.929 E .318
+(either a case-insensiti)144 540 R .618 -.15(ve s)-.25 H .318
+(ignal name such as).15 F F1(SIGKILL)2.818 E F0 .319
+(\(with or without the)2.569 F F1(SIG)2.819 E F0 .319
+(pre\214x\) or a signal)2.569 F(number;)144 552 Q F3(signum)4.189 E F0
+1.349(is a signal number)4.169 F 6.349(.I)-.55 G(f)-6.349 E F3(sigspec)
+4.189 E F0 1.349(is not present, then)4.159 F F1(SIGTERM)3.849 E F0
+1.348(is assumed.)3.599 F(An)6.348 E(ar)144 564 Q .522(gument of)-.18 F
+F2<ad6c>3.023 E F0 .523(lists the signal names.)3.023 F .523(If an)5.523
 F 3.023(ya)-.15 G -.18(rg)-3.023 G .523(uments are supplied when).18 F
-F1<ad6c>3.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523(n, the names)
-.15 F .28(of the signals corresponding to the ar)144 552 R .28
-(guments are listed, and the return status is 0.)-.18 F(The)5.28 E F2
--.2(ex)2.78 G(it_status).2 E F0(ar)144 564 Q .377(gument to)-.18 F F1
+F2<ad6c>3.023 E F0 .523(is gi)3.023 F -.15(ve)-.25 G .523(n, the names)
+.15 F .28(of the signals corresponding to the ar)144 576 R .28
+(guments are listed, and the return status is 0.)-.18 F(The)5.28 E F3
+-.2(ex)2.78 G(it_status).2 E F0(ar)144 588 Q .377(gument to)-.18 F F2
 <ad6c>2.877 E F0 .378
 (is a number specifying either a signal number or the e)2.877 F .378
-(xit status of a process termi-)-.15 F .594(nated by a signal.)144 576 R
-F1(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F
+(xit status of a process termi-)-.15 F .594(nated by a signal.)144 600 R
+F2(kill)5.593 E F0 .593(returns true if at least one signal w)3.093 F
 .593(as successfully sent, or f)-.1 F .593(alse if an error)-.1 F
-(occurs or an in)144 588 Q -.25(va)-.4 G(lid option is encountered.).25
-E F1(let)108 604.8 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A(g)-.37 E F0
-(...])2.5 E(Each)144 616.8 Q F2(ar)3.964 E(g)-.37 E F0 1.134
+(occurs or an in)144 612 Q -.25(va)-.4 G(lid option is encountered.).25
+E F2(let)108 628.8 Q F3(ar)2.5 E(g)-.37 E F0([)2.5 E F3(ar)A(g)-.37 E F0
+(...])2.5 E(Each)144 640.8 Q F3(ar)3.964 E(g)-.37 E F0 1.134
 (is an arithmetic e)3.854 F 1.134(xpression to be e)-.15 F -.25(va)-.25
-G 1.135(luated \(see).25 F F3 1.135(ARITHMETIC EV)3.635 F(ALU)-1.215 E
+G 1.135(luated \(see).25 F F1 1.135(ARITHMETIC EV)3.635 F(ALU)-1.215 E
 -.855(AT)-.54 G(ION).855 E/F4 9/Times-Roman@0 SF(\).)A F0 1.135(If the)
-5.635 F(last)144 628.8 Q F2(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G
-(luates to 0,).25 E F1(let)2.5 E F0(returns 1; 0 is returned otherwise.)
-2.5 E F1(local)108 645.6 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(name)
--2.5 E F0([=)A F2(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 657.6 S
+5.635 F(last)144 652.8 Q F3(ar)2.83 E(g)-.37 E F0 -.25(eva)2.72 G
+(luates to 0,).25 E F2(let)2.5 E F0(returns 1; 0 is returned otherwise.)
+2.5 E F2(local)108 669.6 Q F0([)2.5 E F3(option)A F0 2.5(][)C F3(name)
+-2.5 E F0([=)A F3(value)A F0 2.5(].)C(..])-2.5 E -.15(Fo)144 681.6 S
 2.56(re).15 G .06(ach ar)-2.56 F .06(gument, a local v)-.18 F .06
-(ariable named)-.25 F F2(name)2.92 E F0 .06(is created, and assigned)
-2.74 F F2(value)2.56 E F0 5.06(.T).18 G(he)-5.06 E F2(option)2.56 E F0
-.06(can be)2.56 F(an)144 669.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652
-(he options accepted by)-3.152 F F1(declar)3.152 E(e)-.18 E F0 5.652(.W)
-C(hen)-5.652 E F1(local)3.152 E F0 .653
+(ariable named)-.25 F F3(name)2.92 E F0 .06(is created, and assigned)
+2.74 F F3(value)2.56 E F0 5.06(.T).18 G(he)-5.06 E F3(option)2.56 E F0
+.06(can be)2.56 F(an)144 693.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652
+(he options accepted by)-3.152 F F2(declar)3.152 E(e)-.18 E F0 5.652(.W)
+C(hen)-5.652 E F2(local)3.152 E F0 .653
 (is used within a function, it causes the v)3.152 F(ari-)-.25 E(able)144
-681.6 Q F2(name)3.721 E F0 .861(to ha)3.541 F 1.161 -.15(ve a v)-.2 H
+705.6 Q F3(name)3.721 E F0 .861(to ha)3.541 F 1.161 -.15(ve a v)-.2 H
 .861(isible scope restricted to that function and its children.).15 F
--.4(Wi)5.86 G .86(th no operands,).4 F F1(local)144 693.6 Q F0 1.164
+-.4(Wi)5.86 G .86(th no operands,).4 F F2(local)144 717.6 Q F0 1.164
 (writes a list of local v)3.664 F 1.165
 (ariables to the standard output.)-.25 F 1.165(It is an error to use)
-6.165 F F1(local)3.665 E F0 1.165(when not)3.665 F .233
-(within a function.)144 705.6 R .233(The return status is 0 unless)5.233
-F F1(local)2.733 E F0 .233(is used outside a function, an in)2.733 F
--.25(va)-.4 G(lid).25 E F2(name)3.092 E F0(is)2.912 E(supplied, or)144
-717.6 Q F2(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E
-(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(9)203.725 E 0 Cg EP
+6.165 F F2(local)3.665 E F0 1.165(when not)3.665 F .233
+(within a function.)144 729.6 R .233(The return status is 0 unless)5.233
+F F2(local)2.733 E F0 .233(is used outside a function, an in)2.733 F
+-.25(va)-.4 G(lid).25 E F3(name)3.092 E F0(is)2.912 E(GNU Bash-3.0)72
+768 Q(2004 Apr 20)148.735 E(9)203.725 E 0 Cg EP
 %%Page: 10 10
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(logout)108 84 Q F0(Exit a login shell.)9.33 E F1(popd)
-108 100.8 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E/F2 10
-/Times-Italic@0 SF(n)A F0 2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144
-112.8 Q -.15(ve)-.15 G 2.799(se).15 G .299
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E
+(supplied, or)144 84 Q/F1 10/Times-Italic@0 SF(name)2.5 E F0
+(is a readonly v)2.5 E(ariable.)-.25 E/F2 10/Times-Bold@0 SF(logout)108
+100.8 Q F0(Exit a login shell.)9.33 E F2(popd)108 117.6 Q F0<5bad>2.5 E
+F2(n)A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0(])A
+(Remo)144 129.6 Q -.15(ve)-.15 G 2.799(se).15 G .299
 (ntries from the directory stack.)-2.799 F -.4(Wi)5.299 G .299(th no ar)
 .4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 G .3
 (he top directory from the)-2.799 F 1.479(stack, and performs a)144
-124.8 R F1(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479
+141.6 R F2(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479
 (op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.478
 (uments, if supplied, ha).18 F 1.778 -.15(ve t)-.2 H 1.478(he follo).15
-F(wing)-.25 E(meanings:)144 136.8 Q F1(+)144 148.8 Q F2(n)A F0(Remo)25.3
-E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E F0 .14
-(th entry counting from the left of the list sho)B .14(wn by)-.25 F F1
-(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
-160.8 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0
+F(wing)-.25 E(meanings:)144 153.6 Q F2<ad6e>144 165.6 Q F0 .551
+(Suppresses the normal change of directory when remo)24.74 F .551
+(ving directories from the stack, so)-.15 F
+(that only the stack is manipulated.)180 177.6 Q F2(+)144 189.6 Q F1(n)A
+F0(Remo)25.3 E -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F1(n)2.64 E F0
+.14(th entry counting from the left of the list sho)B .14(wn by)-.25 F
+F2(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
+201.6 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0
 (remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
--.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F1<ad>144 172.8 Q F2(n)A F0
-(Remo)25.3 E -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F2(n)3.76 E F0
-1.259(th entry counting from the right of the list sho)B 1.259(wn by)
--.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F 2.5
-(zero. F)180 184.8 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0
-(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65
-E F3(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E F1<ad6e>144 196.8
-Q F0 .551(Suppresses the normal change of directory when remo)24.74 F
-.551(ving directories from the stack, so)-.15 F
-(that only the stack is manipulated.)180 208.8 Q .644(If the)144 225.6 R
-F1(popd)3.144 E F0 .644(command is successful, a)3.144 F F1(dirs)3.143 E
-F0 .643(is performed as well, and the return status is 0.)3.143 F F1
-(popd)5.643 E F0 .415(returns f)144 237.6 R .415(alse if an in)-.1 F
--.25(va)-.4 G .415
-(lid option is encountered, the directory stack is empty).25 F 2.916
+-.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F2<ad>144 213.6 Q F1(n)A F0
+(Remo)25.3 E -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F1(n)3.759 E F0
+1.259(th entry counting from the right of the list sho)B 1.26(wn by)-.25
+F F2(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180
+225.6 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo)2.5 E -.15
+(ve)-.15 G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3(popd -1)2.5
+E F0(the ne)2.5 E(xt to last.)-.15 E .644(If the)144 242.4 R F2(popd)
+3.144 E F0 .644(command is successful, a)3.144 F F2(dirs)3.143 E F0 .643
+(is performed as well, and the return status is 0.)3.143 F F2(popd)5.643
+E F0 .415(returns f)144 254.4 R .415(alse if an in)-.1 F -.25(va)-.4 G
+.415(lid option is encountered, the directory stack is empty).25 F 2.916
 (,an)-.65 G(on-e)-2.916 E .416(xistent direc-)-.15 F
-(tory stack entry is speci\214ed, or the directory change f)144 249.6 Q
-(ails.)-.1 E F1(printf)108 266.4 Q F0([)2.5 E F1<ad76>A F2(var)2.5 E F0
-(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .372
-(Write the formatted)144 278.4 R F2(ar)2.872 E(guments)-.37 E F0 .372
-(to the standard output under the control of the)2.872 F F2(format)2.872
-E F0 5.372(.T)C(he)-5.372 E F2(format)2.872 E F0 1.804(is a character s\
+(tory stack entry is speci\214ed, or the directory change f)144 266.4 Q
+(ails.)-.1 E F2(printf)108 283.2 Q F0([)2.5 E F2<ad76>A F1(var)2.5 E F0
+(])A F1(format)2.5 E F0([)2.5 E F1(ar)A(guments)-.37 E F0(])A .372
+(Write the formatted)144 295.2 R F1(ar)2.872 E(guments)-.37 E F0 .372
+(to the standard output under the control of the)2.872 F F1(format)2.872
+E F0 5.372(.T)C(he)-5.372 E F1(format)2.872 E F0 1.804(is a character s\
 tring which contains three types of objects: plain characters, which ar\
-e simply)144 290.4 R .159
+e simply)144 307.2 R .159
 (copied to standard output, character escape sequences, which are con)
-144 302.4 R -.15(ve)-.4 G .158(rted and copied to the stan-).15 F .499(\
+144 319.2 R -.15(ve)-.4 G .158(rted and copied to the stan-).15 F .499(\
 dard output, and format speci\214cations, each of which causes printing\
- of the ne)144 314.4 R .5(xt successi)-.15 F -.15(ve)-.25 G F2(ar)3.15 E
-(gu-)-.37 E(ment)144 326.4 Q F0 5.424(.I)C 2.924(na)-5.424 G .424
-(ddition to the standard)-2.924 F F2(printf)2.924 E F0 .424
-(\(1\) formats,)B F1(%b)2.924 E F0(causes)2.923 E F1(printf)2.923 E F0
+ of the ne)144 331.2 R .5(xt successi)-.15 F -.15(ve)-.25 G F1(ar)3.15 E
+(gu-)-.37 E(ment)144 343.2 Q F0 5.424(.I)C 2.924(na)-5.424 G .424
+(ddition to the standard)-2.924 F F1(printf)2.924 E F0 .424
+(\(1\) formats,)B F2(%b)2.924 E F0(causes)2.923 E F2(printf)2.923 E F0
 .423(to e)2.923 F .423(xpand backslash escape)-.15 F .976
-(sequences in the corresponding)144 338.4 R F2(ar)3.476 E(gument)-.37 E
-F0(\(e)3.476 E .976(xcept that)-.15 F F1(\\c)3.476 E F0 .976
-(terminates output, backslashes in)3.476 F F1<5c08>3.477 E F0(,)A F1
-(\\")3.477 E F0(,)A(and)144 350.4 Q F1(\\?)3.422 E F0 .922(are not remo)
+(sequences in the corresponding)144 355.2 R F1(ar)3.476 E(gument)-.37 E
+F0(\(e)3.476 E .976(xcept that)-.15 F F2(\\c)3.476 E F0 .976
+(terminates output, backslashes in)3.476 F F2<5c08>3.477 E F0(,)A F2
+(\\")3.477 E F0(,)A(and)144 367.2 Q F2(\\?)3.422 E F0 .922(are not remo)
 3.422 F -.15(ve)-.15 G .922(d, and octal escapes be).15 F .922
-(ginning with)-.15 F F1(\\0)3.422 E F0 .921
-(may contain up to four digits\), and)3.422 F F1(%q)144 362.4 Q F0
-(causes)3.63 E F1(printf)3.63 E F0 1.13(to output the corresponding)3.63
-F F2(ar)3.631 E(gument)-.37 E F0 1.131
-(in a format that can be reused as shell)3.631 F(input.)144 374.4 Q(The)
-144 398.4 Q F1<ad76>2.904 E F0 .404
+(ginning with)-.15 F F2(\\0)3.422 E F0 .921
+(may contain up to four digits\), and)3.422 F F2(%q)144 379.2 Q F0
+(causes)3.63 E F2(printf)3.63 E F0 1.13(to output the corresponding)3.63
+F F1(ar)3.631 E(gument)-.37 E F0 1.131
+(in a format that can be reused as shell)3.631 F(input.)144 391.2 Q(The)
+144 415.2 Q F2<ad76>2.904 E F0 .404
 (option causes the output to be assigned to the v)2.904 F(ariable)-.25 E
-F2(var)2.904 E F0 .404(rather than being printed to the)2.904 F
-(standard output.)144 410.4 Q(The)144 434.4 Q F2(format)3.423 E F0 .923
-(is reused as necessary to consume all of the)3.423 F F2(ar)3.423 E
-(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F2(format)
-3.423 E F0 .924(requires more)3.424 F F2(ar)144 446.4 Q(guments)-.37 E
+F1(var)2.904 E F0 .404(rather than being printed to the)2.904 F
+(standard output.)144 427.2 Q(The)144 451.2 Q F1(format)3.423 E F0 .923
+(is reused as necessary to consume all of the)3.423 F F1(ar)3.423 E
+(guments)-.37 E F0 5.923(.I)C 3.423(ft)-5.923 G(he)-3.423 E F1(format)
+3.423 E F0 .924(requires more)3.424 F F1(ar)144 463.2 Q(guments)-.37 E
 F0 .033(than are supplied, the e)2.534 F .033
 (xtra format speci\214cations beha)-.15 F .333 -.15(ve a)-.2 H 2.533(si)
 .15 G 2.533(faz)-2.533 G .033(ero v)-2.533 F .033(alue or null string,)
--.25 F(as appropriate, had been supplied.)144 458.4 Q(The return v)5 E
-(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F1(pushd)
-108 475.2 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C F2(dir)-2.5 E F0(])A F1
-(pushd)108 487.2 Q F0([)2.5 E F1<ad6e>A F0 2.5(][)C(+)-2.5 E F2(n)A F0
-2.5(][)C<ad>-2.5 E F2(n)A F0(])A .639(Adds a directory to the top of th\
-e directory stack, or rotates the stack, making the ne)144 499.2 R 3.14
-(wt)-.25 G .64(op of the)-3.14 F 1.316(stack the current w)144 511.2 R
-1.316(orking directory)-.1 F 6.316(.W)-.65 G 1.315(ith no ar)-6.716 F
-1.315(guments, e)-.18 F 1.315(xchanges the top tw)-.15 F 3.815(od)-.1 G
-1.315(irectories and)-3.815 F .871
-(returns 0, unless the directory stack is empty)144 523.2 R 5.871(.A)
--.65 G -.18(rg)-5.871 G .872(uments, if supplied, ha).18 F 1.172 -.15
-(ve t)-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 535.2 Q
-F1(+)144 547.2 Q F2(n)A F0 1.268(Rotates the stack so that the)25.3 F F2
-(n)3.768 E F0 1.267
-(th directory \(counting from the left of the list sho)B 1.267(wn by)
--.25 F F1(dirs)180 559.2 Q F0 2.5(,s)C
-(tarting with zero\) is at the top.)-2.5 E F1<ad>144 571.2 Q F2(n)A F0
-.92(Rotates the stack so that the)25.3 F F2(n)3.42 E F0 .92
+-.25 F(as appropriate, had been supplied.)144 475.2 Q(The return v)5 E
+(alue is zero on success, non-zero on f)-.25 E(ailure.)-.1 E F2(pushd)
+108 492 Q F0([)2.5 E F2<ad6e>A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C
+<ad>-2.5 E F1(n)A F0(])A F2(pushd)108 504 Q F0([)2.5 E F2<ad6e>A F0 2.5
+(][)C F1(dir)-2.5 E F0(])A .639(Adds a directory to the top of the dire\
+ctory stack, or rotates the stack, making the ne)144 516 R 3.14(wt)-.25
+G .64(op of the)-3.14 F 1.316(stack the current w)144 528 R 1.316
+(orking directory)-.1 F 6.316(.W)-.65 G 1.315(ith no ar)-6.716 F 1.315
+(guments, e)-.18 F 1.315(xchanges the top tw)-.15 F 3.815(od)-.1 G 1.315
+(irectories and)-3.815 F .871
+(returns 0, unless the directory stack is empty)144 540 R 5.871(.A)-.65
+G -.18(rg)-5.871 G .872(uments, if supplied, ha).18 F 1.172 -.15(ve t)
+-.2 H .872(he follo).15 F .872(wing mean-)-.25 F(ings:)144 552 Q F2
+<ad6e>144 564 Q F0 .902(Suppresses the normal change of directory when \
+adding directories to the stack, so that)24.74 F
+(only the stack is manipulated.)180 576 Q F2(+)144 588 Q F1(n)A F0 1.267
+(Rotates the stack so that the)25.3 F F1(n)3.767 E F0 1.268
+(th directory \(counting from the left of the list sho)B 1.268(wn by)
+-.25 F F2(dirs)180 600 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
+-2.5 E F2<ad>144 612 Q F1(n)A F0 .92(Rotates the stack so that the)25.3
+F F1(n)3.42 E F0 .92
 (th directory \(counting from the right of the list sho)B .92(wn by)-.25
-F F1(dirs)180 583.2 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
--2.5 E F1<ad6e>144 595.2 Q F0 .902(Suppresses the normal change of dire\
-ctory when adding directories to the stack, so that)24.74 F
-(only the stack is manipulated.)180 607.2 Q F2(dir)144.35 619.2 Q F0
-(Adds)23.98 E F2(dir)2.85 E F0
+F F2(dirs)180 624 Q F0 2.5(,s)C(tarting with zero\) is at the top.)-2.5
+E F1(dir)144.35 636 Q F0(Adds)23.98 E F1(dir)2.85 E F0
 (to the directory stack at the top, making it the ne)3.23 E 2.5(wc)-.25
-G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .488(If the)144 636 R
-F1(pushd)2.988 E F0 .488(command is successful, a)2.988 F F1(dirs)2.988
-E F0 .488(is performed as well.)2.988 F .489
-(If the \214rst form is used,)5.488 F F1(pushd)2.989 E F0 1.04
-(returns 0 unless the cd to)144 648 R F2(dir)3.89 E F0 -.1(fa)4.27 G
-3.539(ils. W).1 F 1.039(ith the second form,)-.4 F F1(pushd)3.539 E F0
-1.039(returns 0 unless the directory)3.539 F .846(stack is empty)144 660
-R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack element i\
-s speci\214ed, or the directory change to the)-.15 F(speci\214ed ne)144
-672 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E(ails.)-.1 E F1(pwd)108
-688.8 Q F0([)2.5 E F1(\255LP)A F0(])A .845
-(Print the absolute pathname of the current w)144 700.8 R .845
+G(urrent w)-2.5 E(orking directory)-.1 E(.)-.65 E .488(If the)144 652.8
+R F2(pushd)2.988 E F0 .488(command is successful, a)2.988 F F2(dirs)
+2.988 E F0 .488(is performed as well.)2.988 F .489
+(If the \214rst form is used,)5.488 F F2(pushd)2.989 E F0 1.04
+(returns 0 unless the cd to)144 664.8 R F1(dir)3.89 E F0 -.1(fa)4.27 G
+3.539(ils. W).1 F 1.039(ith the second form,)-.4 F F2(pushd)3.539 E F0
+1.039(returns 0 unless the directory)3.539 F .846(stack is empty)144
+676.8 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent directory stack ele\
+ment is speci\214ed, or the directory change to the)-.15 F
+(speci\214ed ne)144 688.8 Q 2.5(wc)-.25 G(urrent directory f)-2.5 E
+(ails.)-.1 E F2(pwd)108 705.6 Q F0([)2.5 E F2(\255LP)A F0(])A .845
+(Print the absolute pathname of the current w)144 717.6 R .845
 (orking directory)-.1 F 5.844(.T)-.65 G .844
 (he pathname printed contains no)-5.844 F .181(symbolic links if the)144
-712.8 R F1<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F1
-.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F1
-(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264
-(enabled. If)144 724.8 R(the)3.264 E F1<ad4c>3.264 E F0 .763
-(option is used, the pathname printed may contain symbolic links.)3.264
-F .763(The return)5.763 F(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E
-(10)198.725 E 0 Cg EP
+729.6 R F2<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F2
+.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2
+(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F(GNU Bash-3.0)
+72 768 Q(2004 Apr 20)148.735 E(10)198.725 E 0 Cg EP
 %%Page: 11 11
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E 1.36(status\
- is 0 unless an error occurs while reading the name of the current dire\
-ctory or an in)144 84 R -.25(va)-.4 G(lid).25 E(option is supplied.)144
-96 Q/F1 10/Times-Bold@0 SF -.18(re)108 112.8 S(ad).18 E F0([)2.5 E F1
-(\255ers)A F0 2.5(][)C F1<ad75>-2.5 E/F2 10/Times-Italic@0 SF(fd)2.5 E
-F0 2.5(][)C F1<ad74>-2.5 E F2(timeout)2.5 E F0 2.5(][)C F1<ad61>-2.5 E
-F2(aname)2.5 E F0 2.5(][)C F1<ad70>-2.5 E F2(pr)2.5 E(ompt)-.45 E F0 2.5
-(][)C F1<ad6e>-2.5 E F2(nc)2.5 E(har)-.15 E(s)-.1 E F0 2.5(][)C F1<ad64>
--2.5 E F2(delim)2.5 E F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .516(One\
- line is read from the standard input, or from the \214le descriptor)144
-124.8 R F2(fd)3.016 E F0 .516(supplied as an ar)3.016 F .516(gument to)
--.18 F(the)144 136.8 Q F1<ad75>2.538 E F0 .038
-(option, and the \214rst w)2.538 F .038(ord is assigned to the \214rst)
--.1 F F2(name)2.539 E F0 2.539(,t).18 G .039(he second w)-2.539 F .039
-(ord to the second)-.1 F F2(name)2.539 E F0(,).18 E .42
-(and so on, with lefto)144 148.8 R -.15(ve)-.15 G 2.92(rw).15 G .42
-(ords and their interv)-3.02 F .42
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E 3.264
+(enabled. If)144 84 R(the)3.264 E/F1 10/Times-Bold@0 SF<ad4c>3.264 E F0
+.763(option is used, the pathname printed may contain symbolic links.)
+3.264 F .763(The return)5.763 F 1.36(status is 0 unless an error occurs\
+ while reading the name of the current directory or an in)144 96 R -.25
+(va)-.4 G(lid).25 E(option is supplied.)144 108 Q F1 -.18(re)108 124.8 S
+(ad).18 E F0([)2.5 E F1(\255ers)A F0 2.5(][)C F1<ad75>-2.5 E/F2 10
+/Times-Italic@0 SF(fd)2.5 E F0 2.5(][)C F1<ad74>-2.5 E F2(timeout)2.5 E
+F0 2.5(][)C F1<ad61>-2.5 E F2(aname)2.5 E F0 2.5(][)C F1<ad70>-2.5 E F2
+(pr)2.5 E(ompt)-.45 E F0 2.5(][)C F1<ad6e>-2.5 E F2(nc)2.5 E(har)-.15 E
+(s)-.1 E F0 2.5(][)C F1<ad64>-2.5 E F2(delim)2.5 E F0 2.5(][)C F2(name)
+-2.5 E F0(...])2.5 E .516(One line is read from the standard input, or \
+from the \214le descriptor)144 136.8 R F2(fd)3.016 E F0 .516
+(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 148.8 Q F1
+<ad75>2.538 E F0 .038(option, and the \214rst w)2.538 F .038
+(ord is assigned to the \214rst)-.1 F F2(name)2.539 E F0 2.539(,t).18 G
+.039(he second w)-2.539 F .039(ord to the second)-.1 F F2(name)2.539 E
+F0(,).18 E .42(and so on, with lefto)144 160.8 R -.15(ve)-.15 G 2.92(rw)
+.15 G .42(ords and their interv)-3.02 F .42
 (ening separators assigned to the last)-.15 F F2(name)2.92 E F0 5.42(.I)
-.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 160.8 R .54(wer w)-.25
+.18 G 2.92(ft)-5.42 G(here)-2.92 E .54(are fe)144 172.8 R .54(wer w)-.25
 F .541(ords read from the input stream than names, the remaining names \
-are assigned empty)-.1 F -.25(va)144 172.8 S 2.511(lues. The).25 F .011
+are assigned empty)-.1 F -.25(va)144 184.8 S 2.511(lues. The).25 F .011
 (characters in)2.511 F/F3 9/Times-Bold@0 SF(IFS)2.511 E F0 .011
 (are used to split the line into w)2.261 F 2.511(ords. The)-.1 F .011
 (backslash character \()2.511 F F1(\\)A F0 2.51(\)m)C(ay)-2.51 E 1.89
-(be used to remo)144 184.8 R 2.19 -.15(ve a)-.15 H 2.19 -.15(ny s).15 H
+(be used to remo)144 196.8 R 2.19 -.15(ve a)-.15 H 2.19 -.15(ny s).15 H
 1.891(pecial meaning for the ne).15 F 1.891
 (xt character read and for line continuation.)-.15 F
-(Options, if supplied, ha)144 196.8 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F1<ad61>144 208.8 Q F2(aname)2.5 E F0 1.05(The w)
-180 220.8 R 1.049
+(Options, if supplied, ha)144 208.8 Q .3 -.15(ve t)-.2 H(he follo).15 E
+(wing meanings:)-.25 E F1<ad61>144 220.8 Q F2(aname)2.5 E F0 1.05(The w)
+180 232.8 R 1.049
 (ords are assigned to sequential indices of the array v)-.1 F(ariable)
 -.25 E F2(aname)3.549 E F0 3.549(,s).18 G 1.049(tarting at 0.)-3.549 F
-F2(aname)180.33 232.8 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5
+F2(aname)180.33 244.8 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5
 -.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F2(name)2.5 E F0
-(ar)2.5 E(guments are ignored.)-.18 E F1<ad64>144 244.8 Q F2(delim)2.5 E
-F0(The \214rst character of)180 256.8 Q F2(delim)2.5 E F0
+(ar)2.5 E(guments are ignored.)-.18 E F1<ad64>144 256.8 Q F2(delim)2.5 E
+F0(The \214rst character of)180 268.8 Q F2(delim)2.5 E F0
 (is used to terminate the input line, rather than ne)2.5 E(wline.)-.25 E
-F1<ad65>144 268.8 Q F0 .372
+F1<ad65>144 280.8 Q F0 .372
 (If the standard input is coming from a terminal,)25.86 F F1 -.18(re)
 2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E
 -.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E
-(to obtain the line.)180 280.8 Q F1<ad6e>144 292.8 Q F2(nc)2.5 E(har)
--.15 E(s)-.1 E F1 -.18(re)180 304.8 S(ad).18 E F0 1.395
+(to obtain the line.)180 292.8 Q F1<ad6e>144 304.8 Q F2(nc)2.5 E(har)
+-.15 E(s)-.1 E F1 -.18(re)180 316.8 S(ad).18 E F0 1.395
 (returns after reading)3.895 F F2(nc)3.895 E(har)-.15 E(s)-.1 E F0 1.395
 (characters rather than w)3.895 F 1.394(aiting for a complete line of)
--.1 F(input.)180 316.8 Q F1<ad70>144 328.8 Q F2(pr)2.5 E(ompt)-.45 E F0
-(Display)180 340.8 Q F2(pr)3.66 E(ompt)-.45 E F0 1.161
+-.1 F(input.)180 328.8 Q F1<ad70>144 340.8 Q F2(pr)2.5 E(ompt)-.45 E F0
+(Display)180 352.8 Q F2(pr)3.66 E(ompt)-.45 E F0 1.161
 (on standard error)3.66 F 3.661(,w)-.4 G 1.161(ithout a trailing ne)
--3.661 F 1.161(wline, before attempting to read)-.25 F(an)180 352.8 Q
+-3.661 F 1.161(wline, before attempting to read)-.25 F(an)180 364.8 Q
 2.5(yi)-.15 G 2.5(nput. The)-2.5 F
 (prompt is displayed only if input is coming from a terminal.)2.5 E F1
-<ad72>144 364.8 Q F0 .544(Backslash does not act as an escape character)
+<ad72>144 376.8 Q F0 .544(Backslash does not act as an escape character)
 25.86 F 5.543(.T)-.55 G .543(he backslash is considered to be part of)
--5.543 F(the line.)180 376.8 Q(In particular)5 E 2.5(,ab)-.4 G
+-5.543 F(the line.)180 388.8 Q(In particular)5 E 2.5(,ab)-.4 G
 (ackslash-ne)-2.5 E(wline pair may not be used as a line continuation.)
--.25 E F1<ad73>144 388.8 Q F0(Silent mode.)26.41 E
+-.25 E F1<ad73>144 400.8 Q F0(Silent mode.)26.41 E
 (If input is coming from a terminal, characters are not echoed.)5 E F1
-<ad74>144 400.8 Q F2(timeout)2.5 E F0(Cause)180 412.8 Q F1 -.18(re)3.548
+<ad74>144 412.8 Q F2(timeout)2.5 E F0(Cause)180 424.8 Q F1 -.18(re)3.548
 G(ad).18 E F0 1.048(to time out and return f)3.548 F 1.048
 (ailure if a complete line of input is not read within)-.1 F F2(timeout)
-180 424.8 Q F0 2.92(seconds. This)2.92 F .42(option has no ef)2.92 F .42
+180 436.8 Q F0 2.92(seconds. This)2.92 F .42(option has no ef)2.92 F .42
 (fect if)-.25 F F1 -.18(re)2.92 G(ad).18 E F0 .42
-(is not reading input from the terminal)2.92 F(or a pipe.)180 436.8 Q F1
-<ad75>144 448.8 Q F2(fd)2.5 E F0(Read input from \214le descriptor)14.46
-E F2(fd)2.5 E F0(.)A .191(If no)144 465.6 R F2(names)3.051 E F0 .191
+(is not reading input from the terminal)2.92 F(or a pipe.)180 448.8 Q F1
+<ad75>144 460.8 Q F2(fd)2.5 E F0(Read input from \214le descriptor)14.46
+E F2(fd)2.5 E F0(.)A .191(If no)144 477.6 R F2(names)3.051 E F0 .191
 (are supplied, the line read is assigned to the v)2.961 F(ariable)-.25 E
 F3(REPL)2.692 E(Y)-.828 E/F4 9/Times-Roman@0 SF(.)A F0 .192
 (The return code is zero,)4.692 F 1.218
-(unless end-of-\214le is encountered,)144 477.6 R F1 -.18(re)3.718 G(ad)
+(unless end-of-\214le is encountered,)144 489.6 R F1 -.18(re)3.718 G(ad)
 .18 E F0 1.217(times out, or an in)3.718 F -.25(va)-.4 G 1.217
-(lid \214le descriptor is supplied as the).25 F(ar)144 489.6 Q
-(gument to)-.18 E F1<ad75>2.5 E F0(.)A F1 -.18(re)108 506.4 S(adonly).18
+(lid \214le descriptor is supplied as the).25 F(ar)144 501.6 Q
+(gument to)-.18 E F1<ad75>2.5 E F0(.)A F1 -.18(re)108 518.4 S(adonly).18
 E F0([)2.5 E F1(\255apf)A F0 2.5(][)C F2(name)-2.5 E F0([=)A F2(wor)A(d)
--.37 E F0 2.5(].)C(..])-2.5 E .77(The gi)144 518.4 R -.15(ve)-.25 G(n)
+-.37 E F0 2.5(].)C(..])-2.5 E .77(The gi)144 530.4 R -.15(ve)-.25 G(n)
 .15 E F2(names)3.27 E F0 .77(are mark)3.27 F .77(ed readonly; the v)-.1
 F .77(alues of these)-.25 F F2(names)3.63 E F0 .77
-(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 530.4 R
+(may not be changed by subse-)3.54 F 1.097(quent assignment.)144 542.4 R
 1.097(If the)6.097 F F1<ad66>3.597 E F0 1.097
 (option is supplied, the functions corresponding to the)3.597 F F2
-(names)3.596 E F0 1.096(are so)3.596 F(mark)144 542.4 Q 2.872(ed. The)
+(names)3.596 E F0 1.096(are so)3.596 F(mark)144 554.4 Q 2.872(ed. The)
 -.1 F F1<ad61>2.872 E F0 .372(option restricts the v)2.872 F .372
 (ariables to arrays.)-.25 F .372(If no)5.372 F F2(name)3.232 E F0(ar)
 3.053 E .373(guments are gi)-.18 F -.15(ve)-.25 G .373(n, or if the).15
-F F1<ad70>144 554.4 Q F0 .796
+F F1<ad70>144 566.4 Q F0 .796
 (option is supplied, a list of all readonly names is printed.)3.297 F
 (The)5.796 E F1<ad70>3.296 E F0 .796(option causes output to be)3.296 F
-.828(displayed in a format that may be reused as input.)144 566.4 R .828
+.828(displayed in a format that may be reused as input.)144 578.4 R .828
 (If a v)5.828 F .828(ariable name is follo)-.25 F .828(wed by =)-.25 F
-F2(wor)A(d)-.37 E F0 3.328(,t)C(he)-3.328 E -.25(va)144 578.4 S .405
+F2(wor)A(d)-.37 E F0 3.328(,t)C(he)-3.328 E -.25(va)144 590.4 S .405
 (lue of the v).25 F .405(ariable is set to)-.25 F F2(wor)2.905 E(d)-.37
 E F0 5.405(.T)C .404(he return status is 0 unless an in)-5.405 F -.25
 (va)-.4 G .404(lid option is encountered,).25 F 1.069(one of the)144
-590.4 R F2(names)3.929 E F0 1.069(is not a v)3.839 F 1.069(alid shell v)
+602.4 R F2(names)3.929 E F0 1.069(is not a v)3.839 F 1.069(alid shell v)
 -.25 F 1.069(ariable name, or)-.25 F F1<ad66>3.569 E F0 1.069
 (is supplied with a)3.569 F F2(name)3.929 E F0 1.069(that is not a)3.749
-F(function.)144 602.4 Q F1 -.18(re)108 619.2 S(tur).18 E(n)-.15 E F0([)
-2.5 E F2(n)A F0(])A .587(Causes a function to e)144 631.2 R .587
+F(function.)144 614.4 Q F1 -.18(re)108 631.2 S(tur).18 E(n)-.15 E F0([)
+2.5 E F2(n)A F0(])A .587(Causes a function to e)144 643.2 R .587
 (xit with the return v)-.15 F .587(alue speci\214ed by)-.25 F F2(n)3.087
 E F0 5.587(.I).24 G(f)-5.587 E F2(n)3.447 E F0 .586
 (is omitted, the return status is)3.327 F 1.335
-(that of the last command e)144 643.2 R -.15(xe)-.15 G 1.335
+(that of the last command e)144 655.2 R -.15(xe)-.15 G 1.335
 (cuted in the function body).15 F 6.335(.I)-.65 G 3.835(fu)-6.335 G
 1.335(sed outside a function, b)-3.835 F 1.335(ut during)-.2 F -.15(exe)
-144 655.2 S .794(cution of a script by the).15 F F1(.)3.294 E F0(\()
+144 667.2 S .794(cution of a script by the).15 F F1(.)3.294 E F0(\()
 5.794 E F1(sour)A(ce)-.18 E F0 3.294(\)c)C .794
 (ommand, it causes the shell to stop e)-3.294 F -.15(xe)-.15 G .794
-(cuting that script).15 F .245(and return either)144 667.2 R F2(n)3.105
+(cuting that script).15 F .245(and return either)144 679.2 R F2(n)3.105
 E F0 .246(or the e)2.985 F .246(xit status of the last command e)-.15 F
 -.15(xe)-.15 G .246(cuted within the script as the e).15 F .246
-(xit sta-)-.15 F .082(tus of the script.)144 679.2 R .082
+(xit sta-)-.15 F .082(tus of the script.)144 691.2 R .082
 (If used outside a function and not during e)5.082 F -.15(xe)-.15 G .082
 (cution of a script by).15 F F1(.)2.582 E F0 2.581(,t).833 G .081
-(he return sta-)-2.581 F 2.305(tus is f)144 691.2 R 4.805(alse. An)-.1 F
+(he return sta-)-2.581 F 2.305(tus is f)144 703.2 R 4.805(alse. An)-.1 F
 4.805(yc)-.15 G 2.305(ommand associated with the)-4.805 F F1(RETURN)
 4.805 E F0 2.306(trap is e)4.806 F -.15(xe)-.15 G 2.306(cuted before e)
 .15 F -.15(xe)-.15 G(cution).15 E(resumes after the function or script.)
-144 703.2 Q(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(11)198.725 E 0
+144 715.2 Q(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(11)198.725 E 0
 Cg EP
 %%Page: 12 12
 %%BeginPageSetup
@@ -1584,800 +1586,801 @@ H(nly when job control is enabled.).15 E F1<ad65>144 216 Q F0 1.693
 -.15(ve)-.15 G 4.194(\)e).15 G 1.694(xits with a)-4.344 F .012
 (non-zero status.)184 228 R .012(The shell does not e)5.012 F .011
 (xit if the command that f)-.15 F .011(ails is part of the command)-.1 F
-.624(list immediately follo)184 240 R .624(wing a)-.25 F F1(while)3.124
-E F0(or)3.124 E F1(until)3.124 E F0 -.1(ke)3.124 G(yw)-.05 E .624
-(ord, part of the test in an)-.1 F F2(if)3.134 E F0(statement,)5.084 E
-.426(part of a)184 252 R F1(&&)2.926 E F0(or)2.926 E/F4 10/Symbol SF
-<efef>2.926 E F0 .426(list, or if the command')2.926 F 2.926(sr)-.55 G
-.426(eturn v)-2.926 F .426(alue is being in)-.25 F -.15(ve)-.4 G .425
-(rted via).15 F F1(!)2.925 E F0 5.425(.A)C(trap)-2.5 E(on)184 264 Q F1
-(ERR)2.5 E F0 2.5(,i)C 2.5(fs)-2.5 G(et, is e)-2.5 E -.15(xe)-.15 G
-(cuted before the shell e).15 E(xits.)-.15 E F1<ad66>144 276 Q F0
-(Disable pathname e)30.97 E(xpansion.)-.15 E F1<ad68>144 288 Q F0 2.238
-(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G 2.239
-(re look)-4.738 F 2.239(ed up for e)-.1 F -.15(xe)-.15 G 4.739
-(cution. This).15 F(is)4.739 E(enabled by def)184 300 Q(ault.)-.1 E F1
-<ad6b>144 312 Q F0 .514(All ar)28.74 F .514
+.718(list immediately follo)184 240 R .718(wing a)-.25 F F1(while)3.218
+E F0(or)3.218 E F1(until)3.219 E F0 -.1(ke)3.219 G(yw)-.05 E .719
+(ord, part of the test in an)-.1 F F1(if)3.219 E F0(statement,)3.219 E
+1.164(part of a)184 252 R F1(&&)3.664 E F0(or)3.664 E/F4 10/Symbol SF
+<efef>3.664 E F0 1.164(list, an)3.664 F 3.664(yc)-.15 G 1.164
+(ommand in a pipeline b)-3.664 F 1.164(ut the last, or if the command')
+-.2 F(s)-.55 E .699(return v)184 264 R .699(alue is being in)-.25 F -.15
+(ve)-.4 G .699(rted via).15 F F1(!)3.199 E F0 5.699(.A)C .699(trap on)
+-2.5 F F1(ERR)3.199 E F0 3.2(,i)C 3.2(fs)-3.2 G .7(et, is e)-3.2 F -.15
+(xe)-.15 G .7(cuted before the shell).15 F -.15(ex)184 276 S(its.).15 E
+F1<ad66>144 288 Q F0(Disable pathname e)30.97 E(xpansion.)-.15 E F1
+<ad68>144 300 Q F0 2.239(Remember the location of commands as the)28.74
+F 4.738(ya)-.15 G 2.238(re look)-4.738 F 2.238(ed up for e)-.1 F -.15
+(xe)-.15 G 4.738(cution. This).15 F(is)4.738 E(enabled by def)184 312 Q
+(ault.)-.1 E F1<ad6b>144 324 Q F0 .513(All ar)28.74 F .514
 (guments in the form of assignment statements are placed in the en)-.18
-F .513(vironment for a)-.4 F
-(command, not just those that precede the command name.)184 324 Q F1
-<ad6d>144 336 Q F0 .148(Monitor mode.)25.97 F .148
-(Job control is enabled.)5.148 F .149(This option is on by def)5.148 F
-.149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .637
-(on systems that support it \(see)184 348 R F3 .636(JOB CONTR)3.136 F
-(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136(\). Background).15 F .636
-(processes run in a)3.136 F .641
-(separate process group and a line containing their e)184 360 R .642
-(xit status is printed upon their com-)-.15 F(pletion.)184 372 Q F1
-<ad6e>144 384 Q F0 .653(Read commands b)28.74 F .653(ut do not e)-.2 F
--.15(xe)-.15 G .653(cute them.).15 F .652
-(This may be used to check a shell script for)5.653 F(syntax errors.)184
-396 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
-F1<ad6f>144 408 Q F2(option\255name)2.5 E F0(The)184 420 Q F2
+F .514(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 336 Q F1
+<ad6d>144 348 Q F0 .149(Monitor mode.)25.97 F .149
+(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
+.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .636
+(on systems that support it \(see)184 360 R F3 .636(JOB CONTR)3.136 F
+(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136(\). Background).15 F .637
+(processes run in a)3.136 F .642
+(separate process group and a line containing their e)184 372 R .641
+(xit status is printed upon their com-)-.15 F(pletion.)184 384 Q F1
+<ad6e>144 396 Q F0 .652(Read commands b)28.74 F .652(ut do not e)-.2 F
+-.15(xe)-.15 G .652(cute them.).15 F .653
+(This may be used to check a shell script for)5.652 F(syntax errors.)184
+408 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
+F1<ad6f>144 420 Q F2(option\255name)2.5 E F0(The)184 432 Q F2
 (option\255name)2.5 E F0(can be one of the follo)2.5 E(wing:)-.25 E F1
-(allexport)184 432 Q F0(Same as)224 444 Q F1<ad61>2.5 E F0(.)A F1
-(braceexpand)184 456 Q F0(Same as)224 468 Q F1<ad42>2.5 E F0(.)A F1
-(emacs)184 480 Q F0 .089(Use an emacs-style command line editing interf)
+(allexport)184 444 Q F0(Same as)224 456 Q F1<ad61>2.5 E F0(.)A F1
+(braceexpand)184 468 Q F0(Same as)224 480 Q F1<ad42>2.5 E F0(.)A F1
+(emacs)184 492 Q F0 .089(Use an emacs-style command line editing interf)
 13.9 F 2.589(ace. This)-.1 F .089(is enabled by def)2.589 F(ault)-.1 E
-.95(when the shell is interacti)224 492 R -.15(ve)-.25 G 3.45(,u).15 G
+.95(when the shell is interacti)224 504 R -.15(ve)-.25 G 3.45(,u).15 G
 .95(nless the shell is started with the)-3.45 F F1(\255\255noediting)
-3.45 E F0(option.)224 504 Q F1(errtrace)184 516 Q F0(Same as)5.03 E F1
-<ad45>2.5 E F0(.)A F1(functrace)184 528 Q F0(Same as)224 540 Q F1<ad54>
-2.5 E F0(.)A F1(err)184 552 Q(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5
-E F0(.)A F1(hashall)184 564 Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1
-(histexpand)184 576 Q F0(Same as)224 588 Q F1<ad48>2.5 E F0(.)A F1
-(history)184 600 Q F0 .586(Enable command history)10 F 3.087(,a)-.65 G
+3.45 E F0(option.)224 516 Q F1(errtrace)184 528 Q F0(Same as)5.03 E F1
+<ad45>2.5 E F0(.)A F1(functrace)184 540 Q F0(Same as)224 552 Q F1<ad54>
+2.5 E F0(.)A F1(err)184 564 Q(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5
+E F0(.)A F1(hashall)184 576 Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1
+(histexpand)184 588 Q F0(Same as)224 600 Q F1<ad48>2.5 E F0(.)A F1
+(history)184 612 Q F0 .587(Enable command history)10 F 3.087(,a)-.65 G
 3.087(sd)-3.087 G .587(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder)
 .15 E F3(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F5 9/Times-Roman@0 SF(.)A F0
-.587(This option is)5.087 F(on by def)224 612 Q(ault in interacti)-.1 E
-.3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 624 Q(eeof)-.18 E F0 1.657
-(The ef)224 636 R 1.657(fect is as if the shell command)-.25 F/F6 10
-/Courier@0 SF(IGNOREEOF=10)4.156 E F0 1.656(had been e)4.156 F -.15(xe)
--.15 G(cuted).15 E(\(see)224 648 Q F1(Shell V)2.5 E(ariables)-.92 E F0
-(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1 -.1(ke)184 660 S(yw).1 E(ord)-.1
-E F0(Same as)224 672 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 684 Q F0
-(Same as)5.56 E F1<ad6d>2.5 E F0(.)A F1(noclob)184 696 Q(ber)-.1 E F0
-(Same as)224 708 Q F1<ad43>2.5 E F0(.)A(GNU Bash-3.0)72 768 Q
-(2004 Apr 20)148.735 E(12)198.725 E 0 Cg EP
+.587(This option is)5.087 F(on by def)224 624 Q(ault in interacti)-.1 E
+.3 -.15(ve s)-.25 H(hells.).15 E F1(ignor)184 636 Q(eeof)-.18 E F0 1.656
+(The ef)224 648 R 1.656(fect is as if the shell command)-.25 F/F6 10
+/Courier@0 SF(IGNOREEOF=10)4.157 E F0 1.657(had been e)4.157 F -.15(xe)
+-.15 G(cuted).15 E(\(see)224 660 Q F1(Shell V)2.5 E(ariables)-.92 E F0
+(abo)2.5 E -.15(ve)-.15 G(\).).15 E F1 -.1(ke)184 672 S(yw).1 E(ord)-.1
+E F0(Same as)224 684 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 696 Q F0
+(Same as)5.56 E F1<ad6d>2.5 E F0(.)A(GNU Bash-3.0)72 768 Q(2004 Apr 20)
+148.735 E(12)198.725 E 0 Cg EP
 %%Page: 13 13
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(noexec)184 84 Q F0(Same as)11.12 E F1<ad6e>2.5 E F0(.)A
-F1(noglob)184 96 Q F0(Same as)11.1 E F1<ad66>2.5 E F0(.)A F1(nolog)5 E
-F0(Currently ignored.)2.5 E F1(notify)184 108 Q F0(Same as)15 E F1<ad62>
-2.5 E F0(.)A F1(nounset)184 120 Q F0(Same as)6.66 E F1<ad75>2.5 E F0(.)A
-F1(onecmd)184 132 Q F0(Same as)6.67 E F1<ad74>2.5 E F0(.)A F1(ph)184 144
+/Times-Bold@0 SF(noclob)184 84 Q(ber)-.1 E F0(Same as)224 96 Q F1<ad43>
+2.5 E F0(.)A F1(noexec)184 108 Q F0(Same as)11.12 E F1<ad6e>2.5 E F0(.)A
+F1(noglob)184 120 Q F0(Same as)11.1 E F1<ad66>2.5 E F0(.)A F1(nolog)5 E
+F0(Currently ignored.)2.5 E F1(notify)184 132 Q F0(Same as)15 E F1<ad62>
+2.5 E F0(.)A F1(nounset)184 144 Q F0(Same as)6.66 E F1<ad75>2.5 E F0(.)A
+F1(onecmd)184 156 Q F0(Same as)6.67 E F1<ad74>2.5 E F0(.)A F1(ph)184 168
 Q(ysical)-.15 E F0(Same as)5.14 E F1<ad50>2.5 E F0(.)A F1(pipefail)184
-156 Q F0 1.029(If set, the return v)7.77 F 1.029
-(alue of a pipeline is the v)-.25 F 1.03
-(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 168 R
+180 Q F0 1.03(If set, the return v)7.77 F 1.029
+(alue of a pipeline is the v)-.25 F 1.029
+(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 192 R
 1.136
 (xit with a non-zero status, or zero if all commands in the pipeline)
--.15 F -.15(ex)224 180 S(it successfully).15 E 5(.T)-.65 G
-(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 192 Q F0
-2.09(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
+-.15 F -.15(ex)224 204 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 216 Q F0
+2.091(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
 2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091
-(fers from the)-.25 F(POSIX standard to match the standard \()224 204 Q
-/F2 10/Times-Italic@0 SF(posix mode)A F0(\).)A F1(pri)184 216 Q(vileged)
--.1 E F0(Same as)224 228 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 240 S
-(rbose).1 E F0(Same as)7.33 E F1<ad76>2.5 E F0(.)A F1(vi)184 252 Q F0
+(fers from the)-.25 F(POSIX standard to match the standard \()224 228 Q
+/F2 10/Times-Italic@0 SF(posix mode)A F0(\).)A F1(pri)184 240 Q(vileged)
+-.1 E F0(Same as)224 252 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 264 S
+(rbose).1 E F0(Same as)7.33 E F1<ad76>2.5 E F0(.)A F1(vi)184 276 Q F0
 (Use a vi-style command line editing interf)32.22 E(ace.)-.1 E F1
-(xtrace)184 264 Q F0(Same as)13.35 E F1<ad78>2.5 E F0(.)A(If)184 282 Q
-F1<ad6f>3.053 E F0 .553(is supplied with no)3.053 F F2(option\255name)
-3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552
-(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184
-294 Q F0 1.071(is supplied with no)3.571 F F2(option\255name)3.571 E F0
-3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072
-(commands to recreate the current)3.572 F
-(option settings is displayed on the standard output.)184 306 Q F1<ad70>
-144 318 Q F0 -.45(Tu)28.74 G 1.072(rn on).45 F F2(privile)4.822 E -.1
-(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
+(xtrace)184 288 Q F0(Same as)13.35 E F1<ad78>2.5 E F0(.)A(If)184 306 Q
+F1<ad6f>3.052 E F0 .552(is supplied with no)3.052 F F2(option\255name)
+3.053 E F0 3.053(,t)C .553(he v)-3.053 F .553
+(alues of the current options are printed.)-.25 F(If)5.553 E F1(+o)184
+318 Q F0 1.072(is supplied with no)3.572 F F2(option\255name)3.572 E F0
+3.572(,a)C 1.071(series of)-.001 F F1(set)3.571 E F0 1.071
+(commands to recreate the current)3.571 F
+(option settings is displayed on the standard output.)184 330 Q F1<ad70>
+144 342 Q F0 -.45(Tu)28.74 G 1.071(rn on).45 F F2(privile)4.821 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F
 /F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)
--.27 E F0 1.071(\214les are not pro-)3.322 F 1.705
-(cessed, shell functions are not inherited from the en)184 330 R 1.705
-(vironment, and the)-.4 F F3(SHELLOPTS)4.206 E F0 -.25(va)184 342 S .019
+-.27 E F0 1.072(\214les are not pro-)3.322 F 1.705
+(cessed, shell functions are not inherited from the en)184 354 R 1.705
+(vironment, and the)-.4 F F3(SHELLOPTS)4.205 E F0 -.25(va)184 366 S .018
 (riable, if it appears in the en).25 F .019(vironment, is ignored.)-.4 F
-.018(If the shell is started with the ef)5.019 F(fec-)-.25 E(ti)184 354
-Q 1.158 -.15(ve u)-.25 H .859
+.019(If the shell is started with the ef)5.019 F(fec-)-.25 E(ti)184 378
+Q 1.159 -.15(ve u)-.25 H .859
 (ser \(group\) id not equal to the real user \(group\) id, and the).15 F
-F1<ad70>3.359 E F0 .859(option is not sup-)3.359 F .294
-(plied, these actions are tak)184 366 R .293(en and the ef)-.1 F(fecti)
+F1<ad70>3.359 E F0 .858(option is not sup-)3.359 F .293
+(plied, these actions are tak)184 390 R .293(en and the ef)-.1 F(fecti)
 -.25 E .593 -.15(ve u)-.25 H .293(ser id is set to the real user id.).15
-F .293(If the)5.293 F F1<ad70>2.793 E F0 1.195
-(option is supplied at startup, the ef)184 378 R(fecti)-.25 E 1.495 -.15
-(ve u)-.25 H 1.195(ser id is not reset.).15 F -.45(Tu)6.196 G 1.196
-(rning this option of).45 F(f)-.25 E(causes the ef)184 390 Q(fecti)-.25
+F .294(If the)5.294 F F1<ad70>2.794 E F0 1.196
+(option is supplied at startup, the ef)184 402 R(fecti)-.25 E 1.495 -.15
+(ve u)-.25 H 1.195(ser id is not reset.).15 F -.45(Tu)6.195 G 1.195
+(rning this option of).45 F(f)-.25 E(causes the ef)184 414 Q(fecti)-.25
 E .3 -.15(ve u)-.25 H
 (ser and group ids to be set to the real user and group ids.).15 E F1
-<ad74>144 402 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 G
-(cuting one command.).15 E F1<ad75>144 414 Q F0 -.35(Tr)28.74 G .445
+<ad74>144 426 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 G
+(cuting one command.).15 E F1<ad75>144 438 Q F0 -.35(Tr)28.74 G .444
 (eat unset v).35 F .444
 (ariables as an error when performing parameter e)-.25 F 2.944
-(xpansion. If)-.15 F -.15(ex)2.944 G .444(pansion is).15 F .519
-(attempted on an unset v)184 426 R .519
+(xpansion. If)-.15 F -.15(ex)2.945 G .445(pansion is).15 F .52
+(attempted on an unset v)184 450 R .519
 (ariable, the shell prints an error message, and, if not interacti)-.25
-F -.15(ve)-.25 G(,).15 E -.15(ex)184 438 S(its with a non-zero status.)
-.15 E F1<ad76>144 450 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
--.15 G(re read.)-2.5 E F1<ad78>144 462 Q F0 .315(After e)29.3 F .315
+F -.15(ve)-.25 G(,).15 E -.15(ex)184 462 S(its with a non-zero status.)
+.15 E F1<ad76>144 474 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
+-.15 G(re read.)-2.5 E F1<ad78>144 486 Q F0 .315(After e)29.3 F .315
 (xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25(fo)
 2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E
-F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184 474 R F1
+F1(select)2.815 E F0(command,)2.815 E 1.236(or arithmetic)184 498 R F1
 -.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F 1.236
 (xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E/F4 9/Times-Roman@0
 SF(,)A F0(follo)3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184
-486 Q(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E
-F1<ad42>144 498 Q F0 2.579(The shell performs brace e)27.63 F 2.578
+510 Q(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E
+F1<ad42>144 522 Q F0 2.578(The shell performs brace e)27.63 F 2.578
 (xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E
--.15(ve)-.15 G 5.078(\). This).15 F 2.578(is on by)5.078 F(def)184 510 Q
-(ault.)-.1 E F1<ad43>144 522 Q F0 .213(If set,)27.08 F F1(bash)2.713 E
-F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
+-.15(ve)-.15 G 5.079(\). This).15 F 2.579(is on by)5.079 F(def)184 534 Q
+(ault.)-.1 E F1<ad43>144 546 Q F0 .214(If set,)27.08 F F1(bash)2.714 E
+F0 .214(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
 (xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
-2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
-3.054(tors. This)184 534 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F
+3.053(tors. This)184 558 R .553(may be o)3.053 F -.15(ve)-.15 G .553
 (rridden when creating output \214les by using the redirection opera-)
-.15 F(tor)184 546 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
-<ad45>144 558 Q F0 .103(If set, an)27.63 F 2.603(yt)-.15 G .103(rap on)
--2.603 F F1(ERR)2.603 E F0 .104
-(is inherited by shell functions, command substitutions, and com-)2.603
-F .839(mands e)184 570 R -.15(xe)-.15 G .839(cuted in a subshell en).15
-F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
-(trap is normally not inherited in)3.338 F(such cases.)184 582 Q F1
-<ad48>144 594 Q F0(Enable)26.52 E F1(!)3.031 E F0 .531
-(style history substitution.)5.531 F .531(This option is on by def)5.531
-F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 606 Q -.15
-(ve)-.25 G(.).15 E F1<ad50>144 618 Q F0 1.165
+.15 F(tor)184 570 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 582 Q F0 .104(If set, an)27.63 F 2.604(yt)-.15 G .104(rap on)
+-2.604 F F1(ERR)2.604 E F0 .103
+(is inherited by shell functions, command substitutions, and com-)2.604
+F .838(mands e)184 594 R -.15(xe)-.15 G .838(cuted in a subshell en).15
+F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839
+(trap is normally not inherited in)3.339 F(such cases.)184 606 Q F1
+<ad48>144 618 Q F0(Enable)26.52 E F1(!)3.032 E F0 .532
+(style history substitution.)5.532 F .531(This option is on by def)5.532
+F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 630 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 642 Q F0 1.164
 (If set, the shell does not follo)28.19 F 3.664(ws)-.25 G 1.164
-(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.164
-(cuting commands such as).15 F F1(cd)3.664 E F0 2.821
-(that change the current w)184 630 R 2.822(orking directory)-.1 F 7.822
-(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.822
-(ysical directory structure)-.05 F 2.686(instead. By)184 642 R(def)2.686
+(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.165
+(cuting commands such as).15 F F1(cd)3.665 E F0 2.822
+(that change the current w)184 654 R 2.822(orking directory)-.1 F 7.822
+(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.821
+(ysical directory structure)-.05 F 2.685(instead. By)184 666 R(def)2.685
 E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186
 (ws the logical chain of directories when performing com-)-.25 F
-(mands which change the current directory)184 654 Q(.)-.65 E F1<ad54>144
-666 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(mands which change the current directory)184 678 Q(.)-.65 E F1<ad54>144
+690 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
 (DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89
 (are inherited by shell functions, command)3.39 F 1.932
-(substitutions, and commands e)184 678 R -.15(xe)-.15 G 1.932
+(substitutions, and commands e)184 702 R -.15(xe)-.15 G 1.932
 (cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E
-(UG)-.1 E F0(and)4.432 E F1(RETURN)184 690 Q F0
-(traps are normally not inherited in such cases.)2.5 E F1<adad>144 702 Q
-F0 .4(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401
-(his option, then the positional parameters are unset.)-2.901 F
-(Otherwise,)5.401 E(the positional parameters are set to the)184 714 Q
-F2(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G
-(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E F0(.)A
-(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(13)198.725 E 0 Cg EP
+(UG)-.1 E F0(and)4.432 E F1(RETURN)184 714 Q F0
+(traps are normally not inherited in such cases.)2.5 E(GNU Bash-3.0)72
+768 Q(2004 Apr 20)148.735 E(13)198.725 E 0 Cg EP
 %%Page: 14 14
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF<ad>144 84 Q F0 1.945
-(Signal the end of options, cause all remaining)34.3 F/F2 10
-/Times-Italic@0 SF(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G
-4.444(ea)-4.444 G 1.944(ssigned to the positional)-4.444 F 3.445
-(parameters. The)184 96 R F1<ad78>3.445 E F0(and)3.445 E F1<ad76>3.445 E
-F0 .945(options are turned of)3.445 F 3.445(f. If)-.25 F .946
-(there are no)3.445 F F2(ar)3.446 E(g)-.37 E F0 .946(s, the positional)B
-(parameters remain unchanged.)184 108 Q .425(The options are of)144
-124.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
+/Times-Bold@0 SF<adad>144 84 Q F0 .401(If no ar)28.6 F .401
+(guments follo)-.18 F 2.901(wt)-.25 G .401
+(his option, then the positional parameters are unset.)-2.901 F
+(Otherwise,)5.4 E(the positional parameters are set to the)184 96 Q/F2
+10/Times-Italic@0 SF(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni)
+.15 G 2.5(fs)-2.5 G(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E
+F0(.)A F1<ad>144 108 Q F0 1.944
+(Signal the end of options, cause all remaining)34.3 F F2(ar)4.444 E(g)
+-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.445(ea)-4.444 G 1.945
+(ssigned to the positional)-4.445 F 3.446(parameters. The)184 120 R F1
+<ad78>3.446 E F0(and)3.446 E F1<ad76>3.446 E F0 .945
+(options are turned of)3.446 F 3.445(f. If)-.25 F .945(there are no)
+3.445 F F2(ar)3.445 E(g)-.37 E F0 .945(s, the positional)B
+(parameters remain unchanged.)184 132 Q .425(The options are of)144
+148.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
 (ault unless otherwise noted.)-.1 F .425
-(Using + rather than \255 causes these options)5.425 F .177
-(to be turned of)144 136.8 R 2.677(f. The)-.25 F .178
+(Using + rather than \255 causes these options)5.425 F .178
+(to be turned of)144 160.8 R 2.678(f. The)-.25 F .178
 (options can also be speci\214ed as ar)2.678 F .178(guments to an in)
--.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066
-(current set of options may be found in)144 148.8 R F1<24ad>2.566 E F0
+-.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066
+(current set of options may be found in)144 172.8 R F1<24ad>2.566 E F0
 5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066
-(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F
-(is encountered.)144 160.8 Q F1(shift)108 177.6 Q F0([)2.5 E F2(n)A F0
-(])A .428(The positional parameters from)144 189.6 R F2(n)2.928 E F0
-.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
-.429(rameters represented by the num-).15 F(bers)144 201.6 Q F1($#)2.583
-E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
-(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
--.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
-.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
-(is 0, no parameters are changed.)144 213.6 R(If)5.06 E F2(n)2.92 E F0
+(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F
+(is encountered.)144 184.8 Q F1(shift)108 201.6 Q F0([)2.5 E F2(n)A F0
+(])A .429(The positional parameters from)144 213.6 R F2(n)2.929 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G
+.428(rameters represented by the num-).15 F(bers)144 225.6 Q F1($#)2.582
+E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082
+(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga)
+-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to)
+.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06
+(is 0, no parameters are changed.)144 237.6 R(If)5.06 E F2(n)2.92 E F0
 .06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F
 (If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56
-(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 225.6 R
-.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
-.143(is greater than)2.883 F F1($#)2.643 E F0
-(or less than zero; otherwise 0.)144 237.6 Q F1(shopt)108 254.4 Q F0([)
+(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 249.6 R
+.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0
+.144(is greater than)2.884 F F1($#)2.644 E F0
+(or less than zero; otherwise 0.)144 261.6 Q F1(shopt)108 278.4 Q F0([)
 2.5 E F1(\255pqsu)A F0 2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C F2(optname)
--2.5 E F0(...])2.5 E -.8(To)144 266.4 S .222(ggle the v).8 F .222
+-2.5 E F0(...])2.5 E -.8(To)144 290.4 S .222(ggle the v).8 F .222
 (alues of v)-.25 F .222(ariables controlling optional shell beha)-.25 F
 (vior)-.2 E 5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1
 <ad70>2.722 E F0 .721(option, a list of all settable options is display\
-ed, with an indication of whether or not each is set.)144 278.4 R(The)
-144 290.4 Q F1<ad70>2.827 E F0 .327(option causes output to be displaye\
-d in a form that may be reused as input.)2.827 F .328(Other options)
-5.328 F(ha)144 302.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)
--.25 E F1<ad73>144 314.4 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5
-E F0(.)A F1<ad75>144 326.4 Q F0(Disable \(unset\) each)24.74 E F2
-(optname)2.5 E F0(.)A F1<ad71>144 338.4 Q F0 .003(Suppresses normal out\
+ed, with an indication of whether or not each is set.)144 302.4 R(The)
+144 314.4 Q F1<ad70>2.828 E F0 .327(option causes output to be displaye\
+d in a form that may be reused as input.)2.828 F .327(Other options)
+5.327 F(ha)144 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)
+-.25 E F1<ad73>144 338.4 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5
+E F0(.)A F1<ad75>144 350.4 Q F0(Disable \(unset\) each)24.74 E F2
+(optname)2.5 E F0(.)A F1<ad71>144 362.4 Q F0 .003(Suppresses normal out\
 put \(quiet mode\); the return status indicates whether the)24.74 F F2
-(optname)2.503 E F0(is)2.503 E .255(set or unset.)180 350.4 R .255
-(If multiple)5.255 F F2(optname)2.755 E F0(ar)2.755 E .256
+(optname)2.504 E F0(is)2.504 E .256(set or unset.)180 374.4 R .256
+(If multiple)5.256 F F2(optname)2.756 E F0(ar)2.756 E .256
 (guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G(ith)-2.756 E F1
-<ad71>2.756 E F0 2.756(,t)C .256(he return status is zero if)-2.756 F
-(all)180 362.4 Q F2(optnames)2.5 E F0(are enabled; non-zero otherwise.)
-2.5 E F1<ad6f>144 374.4 Q F0(Restricts the v)25.3 E(alues of)-.25 E F2
+<ad71>2.756 E F0 2.755(,t)C .255(he return status is zero if)-2.755 F
+(all)180 386.4 Q F2(optnames)2.5 E F0(are enabled; non-zero otherwise.)
+2.5 E F1<ad6f>144 398.4 Q F0(Restricts the v)25.3 E(alues of)-.25 E F2
 (optname)2.5 E F0(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0
-(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .128
-(If either)144 391.2 R F1<ad73>2.628 E F0(or)2.628 E F1<ad75>2.628 E F0
+(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .127
+(If either)144 415.2 R F1<ad73>2.627 E F0(or)2.627 E F1<ad75>2.627 E F0
 .127(is used with no)2.627 F F2(optname)2.627 E F0(ar)2.627 E .127
-(guments, the display is limited to those options which)-.18 F 1.023
-(are set or unset, respecti)144 403.2 R -.15(ve)-.25 G(ly).15 E 6.023
-(.U)-.65 G 1.024(nless otherwise noted, the)-6.023 F F1(shopt)3.524 E F0
-1.024(options are disabled \(unset\) by)3.524 F(def)144 415.2 Q(ault.)
+(guments, the display is limited to those options which)-.18 F 1.024
+(are set or unset, respecti)144 427.2 R -.15(ve)-.25 G(ly).15 E 6.024
+(.U)-.65 G 1.024(nless otherwise noted, the)-6.024 F F1(shopt)3.523 E F0
+1.023(options are disabled \(unset\) by)3.523 F(def)144 439.2 Q(ault.)
 -.1 E 1.544(The return status when listing options is zero if all)144
-432 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)
-4.044 F .696
+456 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)
+4.045 F .696
 (When setting or unsetting options, the return status is zero unless an)
-144 444 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell)
--.25 F(option.)144 456 Q(The list of)144 472.8 Q F1(shopt)2.5 E F0
-(options is:)2.5 E F1(cdable_v)144 490.8 Q(ars)-.1 E F0 .156
-(If set, an ar)184 502.8 R .156(gument to the)-.18 F F1(cd)2.656 E F0
--.2(bu)2.656 G .155
+144 468 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695(alid shell)
+-.25 F(option.)144 480 Q(The list of)144 496.8 Q F1(shopt)2.5 E F0
+(options is:)2.5 E F1(cdable_v)144 514.8 Q(ars)-.1 E F0 .155
+(If set, an ar)184 526.8 R .155(gument to the)-.18 F F1(cd)2.655 E F0
+-.2(bu)2.655 G .156
 (iltin command that is not a directory is assumed to be the).2 F
-(name of a v)184 514.8 Q(ariable whose v)-.25 E
-(alue is the directory to change to.)-.25 E F1(cdspell)144 526.8 Q F0
+(name of a v)184 538.8 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 550.8 Q F0
 1.055
 (If set, minor errors in the spelling of a directory component in a)
-10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
-(corrected. The)184 538.8 R 1.488(errors check)3.988 F 1.487
-(ed for are transposed characters, a missing character)-.1 F 3.987(,a)
--.4 G(nd)-3.987 E .552(one character too man)184 550.8 R 4.352 -.65
+10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
+(corrected. The)184 562.8 R 1.487(errors check)3.987 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
+-.4 G(nd)-3.988 E .552(one character too man)184 574.8 R 4.352 -.65
 (y. I)-.15 H 3.052(fac).65 G .552
 (orrection is found, the corrected \214le name is printed, and)-3.052 F
-(the command proceeds.)184 562.8 Q
+(the command proceeds.)184 586.8 Q
 (This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
-.15 E F1(checkhash)144 574.8 Q F0 2.08(If set,)184 586.8 R F1(bash)4.58
-E F0 2.079(checks that a command found in the hash table e)4.58 F 2.079
-(xists before trying to)-.15 F -.15(exe)184 598.8 S(cute it.).15 E
+.15 E F1(checkhash)144 598.8 Q F0 2.079(If set,)184 610.8 R F1(bash)
+4.579 E F0 2.079(checks that a command found in the hash table e)4.579 F
+2.08(xists before trying to)-.15 F -.15(exe)184 622.8 S(cute it.).15 E
 (If a hashed command no longer e)5 E
 (xists, a normal path search is performed.)-.15 E F1(checkwinsize)144
-610.8 Q F0 .796(If set,)184 622.8 R F1(bash)3.296 E F0 .796
-(checks the windo)3.296 F 3.296(ws)-.25 G .797
-(ize after each command and, if necessary)-3.296 F 3.297(,u)-.65 G .797
-(pdates the)-3.297 F -.25(va)184 634.8 S(lues of).25 E/F3 9/Times-Bold@0
+634.8 Q F0 .797(If set,)184 646.8 R F1(bash)3.297 E F0 .797
+(checks the windo)3.297 F 3.297(ws)-.25 G .796
+(ize after each command and, if necessary)-3.297 F 3.296(,u)-.65 G .796
+(pdates the)-3.296 F -.25(va)184 658.8 S(lues of).25 E/F3 9/Times-Bold@0
 SF(LINES)2.5 E F0(and)2.25 E F3(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF(.)A
-F1(cmdhist)144 646.8 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
+F1(cmdhist)144 670.8 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
 (attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202
 (ll lines of a multiple-line command in the same history).15 F(entry)184
-658.8 Q 5(.T)-.65 G(his allo)-5 E
-(ws easy re-editing of multi-line commands.)-.25 E F1(dotglob)144 670.8
+682.8 Q 5(.T)-.65 G(his allo)-5 E
+(ws easy re-editing of multi-line commands.)-.25 E F1(dotglob)144 694.8
 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165
 (includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i)
 -.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F
-(xpansion.)-.15 E F1(execfail)144 682.8 Q F0 1.387
-(If set, a non-interacti)7.79 F 1.687 -.15(ve s)-.25 H 1.386
+(xpansion.)-.15 E F1(execfail)144 706.8 Q F0 1.386
+(If set, a non-interacti)7.79 F 1.686 -.15(ve s)-.25 H 1.386
 (hell will not e).15 F 1.386(xit if it cannot e)-.15 F -.15(xe)-.15 G
-1.386(cute the \214le speci\214ed as an).15 F(ar)184 694.8 Q
+1.387(cute the \214le speci\214ed as an).15 F(ar)184 718.8 Q
 (gument to the)-.18 E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E
 (An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15
-E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 706.8 Q
-F0 .716(If set, aliases are e)184 718.8 R .717(xpanded as described abo)
--.15 F 1.017 -.15(ve u)-.15 H(nder).15 E F3(ALIASES)3.217 E F4(.)A F0
-.717(This option is enabled)5.217 F(by def)184 730.8 Q
-(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E(GNU Bash-3.0)
-72 768 Q(2004 Apr 20)148.735 E(14)198.725 E 0 Cg EP
+E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E(GNU Bash-3.0)72 768 Q
+(2004 Apr 20)148.735 E(14)198.725 E 0 Cg EP
 %%Page: 15 15
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(extdeb)144 84 Q(ug)-.2 E F0(If set, beha)184 96 Q
-(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184
-108 Q F0(The)28.5 E F1<ad46>4.251 E F0 1.751(option to the)4.251 F F1
-(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751
-(iltin displays the source \214le name and line).2 F
-(number corresponding to each function name supplied as an ar)220 120 Q
-(gument.)-.18 E F1(2.)184 132 Q F0 1.667(If the command run by the)28.5
+/Times-Bold@0 SF(expand_aliases)144 84 Q F0 .717(If set, aliases are e)
+184 96 R .717(xpanded as described abo)-.15 F 1.017 -.15(ve u)-.15 H
+(nder).15 E/F2 9/Times-Bold@0 SF(ALIASES)3.217 E/F3 9/Times-Roman@0 SF
+(.)A F0 .716(This option is enabled)5.217 F(by def)184 108 Q
+(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144
+120 Q(ug)-.2 E F0(If set, beha)184 132 Q(vior intended for use by deb)
+-.2 E(uggers is enabled:)-.2 E F1(1.)184 144 Q F0(The)28.5 E F1<ad46>
+4.25 E F0 1.75(option to the)4.25 F F1(declar)4.251 E(e)-.18 E F0 -.2
+(bu)4.251 G 1.751(iltin displays the source \214le name and line).2 F
+(number corresponding to each function name supplied as an ar)220 156 Q
+(gument.)-.18 E F1(2.)184 168 Q F0 1.667(If the command run by the)28.5
 F F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F
-1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 144
-Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 156 Q F0 .841
-(If the command run by the)28.5 F F1(DEB)3.341 E(UG)-.1 E F0 .841
-(trap returns a v)3.341 F .84(alue of 2, and the shell is)-.25 F -.15
-(exe)220 168 S .488
+1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 180
+Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 192 Q F0 .84
+(If the command run by the)28.5 F F1(DEB)3.34 E(UG)-.1 E F0 .841
+(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15
+(exe)220 204 S .488
 (cuting in a subroutine \(a shell function or a shell script e).15 F
 -.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1
-(sour)220 180 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1
+(sour)220 216 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1
 -.18(re)2.5 G(tur).18 E(n)-.15 E F0(is simulated.)2.5 E F1 26(4. B)184
-192 R(ASH_ARGC)-.3 E F0(and)3.776 E F1 -.3(BA)3.776 G(SH_ARGV).3 E F0
-1.275(are updated as described in their descrip-)3.776 F(tions abo)220
-204 Q -.15(ve)-.15 G(.).15 E F1(5.)184 216 Q F0 1.359
+228 R(ASH_ARGC)-.3 E F0(and)3.775 E F1 -.3(BA)3.775 G(SH_ARGV).3 E F0
+1.276(are updated as described in their descrip-)3.775 F(tions abo)220
+240 Q -.15(ve)-.15 G(.).15 E F1(5.)184 252 Q F0 1.359
 (Function tracing is enabled:)28.5 F 1.359
 (command substitution, shell functions, and sub-)6.359 F(shells in)220
-228 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F2 10
+264 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F4 10
 /Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1
 (DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E F1(6.)
-184 240 Q F0 .805(Error tracing is enabled:)28.5 F .804
-(command substitution, shell functions, and subshells)5.805 F(in)220 252
-Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F2
+184 276 Q F0 .804(Error tracing is enabled:)28.5 F .805
+(command substitution, shell functions, and subshells)5.804 F(in)220 288
+Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4
 (command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E(OR)-.3 E F0
-(trap.)2.5 E F1(extglob)144 264 Q F0 .4(If set, the e)8.89 F .4
+(trap.)2.5 E F1(extglob)144 300 Q F0 .4(If set, the e)8.89 F .4
 (xtended pattern matching features described abo)-.15 F .7 -.15(ve u)
--.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 276 Q
-F0(are enabled.)2.5 E F1(extquote)144 288 Q F0 2.473(If set,)184 300 R
-F1($)4.973 E F0<08>A F2(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973
-E F0(")A F2(string)A F0 4.973("q)C 2.473(uoting is performed within)
--4.973 F F1(${)4.973 E F2(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G
-(pansions).15 E(enclosed in double quotes.)184 312 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 324 Q F0
-1.424(If set, patterns which f)7.77 F 1.425
-(ail to match \214lenames during pathname e)-.1 F 1.425
-(xpansion result in an)-.15 F -.15(ex)184 336 S(pansion error).15 E(.)
--.55 E F1 -.25(fo)144 348 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
-.585(If set, the suf)184 360 R<8c78>-.25 E .585(es speci\214ed by the)
+-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 312 Q
+F0(are enabled.)2.5 E F1(extquote)144 324 Q F0 2.473(If set,)184 336 R
+F1($)4.973 E F0<08>A F4(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973
+E F0(")A F4(string)A F0 4.973("q)C 2.473(uoting is performed within)
+-4.973 F F1(${)4.973 E F4(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G
+(pansions).15 E(enclosed in double quotes.)184 348 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 360 Q F0
+1.425(If set, patterns which f)7.77 F 1.425
+(ail to match \214lenames during pathname e)-.1 F 1.424
+(xpansion result in an)-.15 F -.15(ex)184 372 S(pansion error).15 E(.)
+-.55 E F1 -.25(fo)144 384 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.585(If set, the suf)184 396 R<8c78>-.25 E .585(es speci\214ed by the)
 -.15 F F1(FIGNORE)3.085 E F0 .585(shell v)3.085 F .585(ariable cause w)
--.25 F .585(ords to be ignored)-.1 F .32(when performing w)184 372 R .32
+-.25 F .585(ords to be ignored)-.1 F .32(when performing w)184 408 R .32
 (ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32
-(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.33
-(pletions. See)184 384 R/F3 9/Times-Bold@0 SF .83(SHELL V)3.33 F
-(ARIABLES)-1.215 E F0(abo)3.08 E 1.13 -.15(ve f)-.15 H .829
-(or a description of).15 F F1(FIGNORE)3.329 E F0 5.829(.T)C .829
-(his option)-5.829 F(is enabled by def)184 396 Q(ault.)-.1 E F1
-(gnu_errfmt)144 408 Q F0(If set, shell error messages are written in th\
-e standard GNU error message format.)184 420 Q F1(histappend)144 432 Q
-F0 .383
+(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.329
+(pletions. See)184 420 R F2 .829(SHELL V)3.329 F(ARIABLES)-1.215 E F0
+(abo)3.079 E 1.129 -.15(ve f)-.15 H .83(or a description of).15 F F1
+(FIGNORE)3.33 E F0 5.83(.T)C .83(his option)-5.83 F(is enabled by def)
+184 432 Q(ault.)-.1 E F1(gnu_errfmt)144 444 Q F0(If set, shell error me\
+ssages are written in the standard GNU error message format.)184 456 Q
+F1(histappend)144 468 Q F0 .384
 (If set, the history list is appended to the \214le named by the v)184
-444 R .384(alue of the)-.25 F F1(HISTFILE)2.884 E F0 -.25(va)2.884 G
-(ri-).25 E(able when the shell e)184 456 Q(xits, rather than o)-.15 E
--.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 468 Q(eedit)-.18
-E F0 .576(If set, and)184 480 R F1 -.18(re)3.076 G(adline).18 E F0 .575
-(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 G .575
-(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F
-(tory substitution.)184 492 Q F1(histv)144 504 Q(erify)-.1 E F0 .402
-(If set, and)184 516 R F1 -.18(re)2.903 G(adline).18 E F0 .403
+480 R .383(alue of the)-.25 F F1(HISTFILE)2.883 E F0 -.25(va)2.883 G
+(ri-).25 E(able when the shell e)184 492 Q(xits, rather than o)-.15 E
+-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 504 Q(eedit)-.18
+E F0 .575(If set, and)184 516 R F1 -.18(re)3.075 G(adline).18 E F0 .575
+(is being used, a user is gi)3.075 F -.15(ve)-.25 G 3.075(nt).15 G .576
+(he opportunity to re-edit a f)-3.075 F .576(ailed his-)-.1 F
+(tory substitution.)184 528 Q F1(histv)144 540 Q(erify)-.1 E F0 .403
+(If set, and)184 552 R F1 -.18(re)2.903 G(adline).18 E F0 .403
 (is being used, the results of history substitution are not immediately)
-2.903 F .662(passed to the shell parser)184 528 R 5.662(.I)-.55 G .661
-(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161
-G(adline).18 E F0(editing)3.161 E -.2(bu)184 540 S -.25(ff).2 G(er).25 E
+2.903 F .661(passed to the shell parser)184 564 R 5.661(.I)-.55 G .662
+(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
+G(adline).18 E F0(editing)3.162 E -.2(bu)184 576 S -.25(ff).2 G(er).25 E
 2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1
-(hostcomplete)144 552 Q F0 1.181(If set, and)184 564 R F1 -.18(re)3.681
-G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182
-(will attempt to perform hostname completion)3.682 F 1.381(when a w)184
-576 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381
-(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E
-F3(READLINE)3.88 E F0(abo)184 588 Q -.15(ve)-.15 G 2.5(\). This).15 F
-(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 600 Q F0(If set,)
-184 612 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E F0
+(hostcomplete)144 588 Q F0 1.182(If set, and)184 600 R F1 -.18(re)3.682
+G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
+(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
+612 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
+F2(READLINE)3.881 E F0(abo)184 624 Q -.15(ve)-.15 G 2.5(\). This).15 F
+(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 636 Q F0(If set,)
+184 648 Q F1(bash)2.5 E F0(will send)2.5 E F2(SIGHUP)2.5 E F0
 (to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e)
-.15 E(xits.)-.15 E F1(interacti)144 624 Q -.1(ve)-.1 G(_comments).1 E F0
-.33(If set, allo)184 636 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33
+.15 E(xits.)-.15 E F1(interacti)144 660 Q -.1(ve)-.1 G(_comments).1 E F0
+.33(If set, allo)184 672 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33
 (ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33
 (ord and all remaining characters on)-.1 F .967
-(that line to be ignored in an interacti)184 648 R 1.267 -.15(ve s)-.25
-H .967(hell \(see).15 F F3(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
-G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 660 Q
-(ault.)-.1 E F1(lithist)144 672 Q F0 .654(If set, and the)15.55 F F1
-(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa)
-3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)
--3.155 F(with embedded ne)184 684 Q
-(wlines rather than using semicolon separators where possible.)-.25 E F1
-(login_shell)144 696 Q F0 .486
-(The shell sets this option if it is started as a login shell \(see)184
-708 R F3(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve)
--.15 G 2.986(\). The).15 F -.25(va)184 720 S(lue may not be changed.).25
-E(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(15)198.725 E 0 Cg EP
+(that line to be ignored in an interacti)184 684 R 1.267 -.15(ve s)-.25
+H .967(hell \(see).15 F F2(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
+G 3.467(\). This).15 F .968(option is)3.468 F(enabled by def)184 696 Q
+(ault.)-.1 E F1(lithist)144 708 Q F0 .655(If set, and the)15.55 F F1
+(cmdhist)3.155 E F0 .654(option is enabled, multi-line commands are sa)
+3.154 F -.15(ve)-.2 G 3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)
+-3.154 F(with embedded ne)184 720 Q
+(wlines rather than using semicolon separators where possible.)-.25 E
+(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(15)198.725 E 0 Cg EP
 %%Page: 16 16
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(mailwar)144 84 Q(n)-.15 E F0 .814
-(If set, and a \214le that)184 96 R F1(bash)3.314 E F0 .815
-(is checking for mail has been accessed since the last time it)3.314 F
--.1(wa)184 108 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
-(`The mail in)-.74 E/F2 10/Times-Italic@0 SF(mail\214le)2.5 E F0
+/Times-Bold@0 SF(login_shell)144 84 Q F0 .486
+(The shell sets this option if it is started as a login shell \(see)184
+96 R/F2 9/Times-Bold@0 SF(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)
+2.737 E -.15(ve)-.15 G 2.987(\). The).15 F -.25(va)184 108 S
+(lue may not be changed.).25 E F1(mailwar)144 120 Q(n)-.15 E F0 .815
+(If set, and a \214le that)184 132 R F1(bash)3.315 E F0 .814
+(is checking for mail has been accessed since the last time it)3.315 F
+-.1(wa)184 144 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+(`The mail in)-.74 E/F3 10/Times-Italic@0 SF(mail\214le)2.5 E F0
 (has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1
-(no_empty_cmd_completion)144 120 Q F0 .146(If set, and)184 132 R F1 -.18
-(re)2.646 G(adline).18 E F0 .146(is being used,)2.646 F F1(bash)2.646 E
-F0 .145(will not attempt to search the)2.646 F F1 -.74(PA)2.645 G(TH)
--.21 E F0 .145(for possible)2.645 F
-(completions when completion is attempted on an empty line.)184 144 Q F1
-(nocaseglob)144 156 Q F0 .436(If set,)184 168 R F1(bash)2.936 E F0 .436
-(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)-.25
-H .437(ashion when performing pathname).05 F -.15(ex)184 180 S
+(no_empty_cmd_completion)144 156 Q F0 .145(If set, and)184 168 R F1 -.18
+(re)2.645 G(adline).18 E F0 .145(is being used,)2.645 F F1(bash)2.646 E
+F0 .146(will not attempt to search the)2.646 F F1 -.74(PA)2.646 G(TH)
+-.21 E F0 .146(for possible)2.646 F
+(completions when completion is attempted on an empty line.)184 180 Q F1
+(nocaseglob)144 192 Q F0 .437(If set,)184 204 R F1(bash)2.937 E F0 .436
+(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25
+H .436(ashion when performing pathname).05 F -.15(ex)184 216 S
 (pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E
--.15(ve)-.15 G(\).).15 E F1(nocasematch)144 192 Q F0 1.194(If set,)184
-204 R F1(bash)3.694 E F0 1.194(matches patterns in a case\255insensiti)
-3.694 F 1.493 -.15(ve f)-.25 H 1.193(ashion when performing matching).05
-F(while e)184 216 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5
-E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 228 Q F0
-.854(If set,)184 240 R F1(bash)3.354 E F0(allo)3.354 E .855
-(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.355 G .855
-(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G 3.355(\)t).15 G(o)
--3.355 E -.15(ex)184 252 S(pand to a null string, rather than themselv)
-.15 E(es.)-.15 E F1(pr)144 264 Q(ogcomp)-.18 E F0 .677
-(If set, the programmable completion f)184 276 R .677(acilities \(see)
--.1 F F1(Pr)3.176 E .676(ogrammable Completion)-.18 F F0(abo)3.176 E
--.15(ve)-.15 G(\)).15 E(are enabled.)184 288 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 300 Q(omptv)
--.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 312 R 1.448
-(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic)
--.15 F -.15(ex)184 324 S .171(pansion, and quote remo).15 F -.25(va)-.15
+-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 228 Q F0 1.193(If set,)184
+240 R F1(bash)3.693 E F0 1.194(matches patterns in a case\255insensiti)
+3.693 F 1.494 -.15(ve f)-.25 H 1.194(ashion when performing matching).05
+F(while e)184 252 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5
+E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 264 Q F0
+.855(If set,)184 276 R F1(bash)3.355 E F0(allo)3.355 E .855
+(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.354 G .854
+(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G 3.354(\)t).15 G(o)
+-3.354 E -.15(ex)184 288 S(pand to a null string, rather than themselv)
+.15 E(es.)-.15 E F1(pr)144 300 Q(ogcomp)-.18 E F0 .676
+(If set, the programmable completion f)184 312 R .677(acilities \(see)
+-.1 F F1(Pr)3.177 E .677(ogrammable Completion)-.18 F F0(abo)3.177 E
+-.15(ve)-.15 G(\)).15 E(are enabled.)184 324 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 336 Q(omptv)
+-.18 E(ars)-.1 E F0 1.448(If set, prompt strings under)184 348 R 1.448
+(go parameter e)-.18 F 1.447(xpansion, command substitution, arithmetic)
+-.15 F -.15(ex)184 360 S .17(pansion, and quote remo).15 F -.25(va)-.15
 G 2.67(la).25 G .17(fter being e)-2.67 F .17(xpanded as described in)
--.15 F/F3 9/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15
-(ve)-.15 G(.).15 E(This option is enabled by def)184 336 Q(ault.)-.1 E
-F1 -.18(re)144 348 S(stricted_shell).18 E F0 1.069
+-.15 F F2(PR)2.671 E(OMPTING)-.27 E F0(abo)2.421 E -.15(ve)-.15 G(.).15
+E(This option is enabled by def)184 372 Q(ault.)-.1 E F1 -.18(re)144 384
+S(stricted_shell).18 E F0 1.069
 (The shell sets this option if it is started in restricted mode \(see)
-184 360 R F3 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 372 Q 4.178
+184 396 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 408 Q 4.178
 (w\). The)-.25 F -.25(va)4.178 G 1.678(lue may not be changed.).25 F
 1.678(This is not reset when the startup \214les are)6.678 F -.15(exe)
-184 384 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E
+184 420 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E
 -.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E
-F1(shift_v)144 396 Q(erbose)-.1 E F0 .501(If set, the)184 408 R F1
-(shift)3.001 E F0 -.2(bu)3.001 G .501
-(iltin prints an error message when the shift count e).2 F .502
-(xceeds the number)-.15 F(of positional parameters.)184 420 Q F1(sour)
-144 432 Q(cepath)-.18 E F0 .771(If set, the)184 444 R F1(sour)3.271 E
-(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
--3.471 F .771(alue of)-.25 F F3 -.666(PA)3.27 G(TH)-.189 E F0 .77
-(to \214nd the directory containing the)3.02 F(\214le supplied as an ar)
-184 456 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.)
--.1 E F1(xpg_echo)144 468 Q F0(If set, the)184 480 Q F1(echo)2.5 E F0
--.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15
-E(ault.)-.1 E F1(suspend)108 492 Q F0([)2.5 E F1<ad66>A F0(])A .492
-(Suspend the e)144 504 R -.15(xe)-.15 G .492
-(cution of this shell until it recei).15 F -.15(ve)-.25 G 2.992(sa).15 G
-F3(SIGCONT).001 E F0 2.993(signal. The)2.743 F F1<ad66>2.993 E F0 .493
-(option says not to)2.993 F .759
-(complain if this is a login shell; just suspend an)144 516 R(yw)-.15 E
-(ay)-.1 E 5.758(.T)-.65 G .758
+F1(shift_v)144 432 Q(erbose)-.1 E F0 .502(If set, the)184 444 R F1
+(shift)3.002 E F0 -.2(bu)3.002 G .501
+(iltin prints an error message when the shift count e).2 F .501
+(xceeds the number)-.15 F(of positional parameters.)184 456 Q F1(sour)
+144 468 Q(cepath)-.18 E F0 .77(If set, the)184 480 R F1(sour)3.27 E(ce)
+-.18 E F0(\()3.27 E F1(.)A F0 3.27(\)b)C .77(uiltin uses the v)-3.47 F
+.771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771
+(to \214nd the directory containing the)3.021 F
+(\214le supplied as an ar)184 492 Q 2.5(gument. This)-.18 F
+(option is enabled by def)2.5 E(ault.)-.1 E F1(xpg_echo)144 504 Q F0
+(If set, the)184 516 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E
+(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend)
+108 528 Q F0([)2.5 E F1<ad66>A F0(])A .493(Suspend the e)144 540 R -.15
+(xe)-.15 G .493(cution of this shell until it recei).15 F -.15(ve)-.25 G
+2.992(sa).15 G F2(SIGCONT)A F0 2.992(signal. The)2.742 F F1<ad66>2.992 E
+F0 .492(option says not to)2.992 F .758
+(complain if this is a login shell; just suspend an)144 552 R(yw)-.15 E
+(ay)-.1 E 5.758(.T)-.65 G .759
 (he return status is 0 unless the shell is a)-5.758 F(login shell and)
-144 528 Q F1<ad66>2.5 E F0
+144 564 Q F1<ad66>2.5 E F0
 (is not supplied, or if job control is not enabled.)2.5 E F1(test)108
-540 Q F2 -.2(ex)2.5 G(pr).2 E F1([)108 552 Q F2 -.2(ex)2.5 G(pr).2 E F1
+576 Q F3 -.2(ex)2.5 G(pr).2 E F1([)108 588 Q F3 -.2(ex)2.5 G(pr).2 E F1
 (])2.5 E F0 1.15(Return a status of 0 or 1 depending on the e)6.77 F
 -.25(va)-.25 G 1.15(luation of the conditional e).25 F(xpression)-.15 E
-F2 -.2(ex)3.65 G(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.188
-(operator and operand must be a separate ar)144 564 R 3.688
-(gument. Expressions)-.18 F 1.187(are composed of the primaries)3.688 F
-1.889(described abo)144 576 R 2.189 -.15(ve u)-.15 H(nder).15 E F3
-(CONDITION)4.389 E 1.889(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
-F1(test)6.389 E F0 1.89(does not accept an)4.389 F 4.39(yo)-.15 G 1.89
-(ptions, nor)-4.39 F(does it accept and ignore an ar)144 588 Q
+F3 -.2(ex)3.65 G(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.187
+(operator and operand must be a separate ar)144 600 R 3.688
+(gument. Expressions)-.18 F 1.188(are composed of the primaries)3.688 F
+1.89(described abo)144 612 R 2.19 -.15(ve u)-.15 H(nder).15 E F2
+(CONDITION)4.39 E 1.89(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
+F1(test)6.39 E F0 1.889(does not accept an)4.389 F 4.389(yo)-.15 G 1.889
+(ptions, nor)-4.389 F(does it accept and ignore an ar)144 624 Q
 (gument of)-.18 E F1<adad>2.5 E F0(as signifying the end of options.)2.5
-E .786(Expressions may be combined using the follo)144 606 R .785
+E .785(Expressions may be combined using the follo)144 642 R .786
 (wing operators, listed in decreasing order of prece-)-.25 F(dence.)144
-618 Q F1(!)144 630 Q F2 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G(ue if).35
-E F2 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\()144 642 Q F2
+654 Q F1(!)144 666 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G(ue if).35
+E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\()144 678 Q F3
 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)6.77 F .26
-(alue of)-.25 F F2 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26
+(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26
 (his may be used to o)-5.26 F -.15(ve)-.15 G .26
-(rride the normal precedence of opera-).15 F(tors.)180 654 Q F2 -.2(ex)
-144 666 S(pr1).2 E F0<ad>2.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35
-(Tr)180 678 S(ue if both).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F2
--.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F2 -.2(ex)144 690 S(pr1).2 E
-F0<ad>2.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 702 S
-(ue if either).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F2 -.2(ex)2.5 G
-(pr2).2 E F0(is true.)2.52 E F1(test)144 718.8 Q F0(and)2.5 E F1([)2.5 E
-F0 -.25(eva)2.5 G(luate conditional e).25 E
-(xpressions using a set of rules based on the number of ar)-.15 E
-(guments.)-.18 E(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(16)198.725
-E 0 Cg EP
+(rride the normal precedence of opera-).15 F(tors.)180 690 Q F3 -.2(ex)
+144 702 S(pr1).2 E F0<ad>2.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35
+(Tr)180 714 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F3
+-.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E(GNU Bash-3.0)72 768 Q
+(2004 Apr 20)148.735 E(16)198.725 E 0 Cg EP
 %%Page: 17 17
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
-(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E 2.5(0a)144
-84 S -.18(rg)-2.5 G(uments).18 E(The e)180 96 Q(xpression is f)-.15 E
-(alse.)-.1 E 2.5(1a)144 108 S -.18(rg)-2.5 G(ument).18 E(The e)180 120 Q
+(TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
+/Times-Italic@0 SF -.2(ex)144 84 S(pr1).2 E F0<ad>2.5 E/F2 10
+/Times-Bold@0 SF(o)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 96 S
+(ue if either).35 E F1 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F1 -.2(ex)2.5 G
+(pr2).2 E F0(is true.)2.52 E F2(test)144 112.8 Q F0(and)2.5 E F2([)2.5 E
+F0 -.25(eva)2.5 G(luate conditional e).25 E
+(xpressions using a set of rules based on the number of ar)-.15 E
+(guments.)-.18 E 2.5(0a)144 130.8 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 142.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 154.8 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 166.8 Q
 (xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
-E 2.5(2a)144 132 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)180
-144 R .37(gument is)-.18 F/F1 10/Times-Bold@0 SF(!)2.87 E F0 2.87(,t)C
-.37(he e)-2.87 F .37(xpression is true if and only if the second ar)-.15
-F .37(gument is null.)-.18 F .379(If the \214rst ar)180 156 R .38
-(gument is one of the unary conditional operators listed abo)-.18 F .68
--.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(CONDI-)2.88 E(TION)180
-168 Q .553(AL EXPRESSIONS)-.18 F/F3 9/Times-Roman@0 SF(,)A F0 .552
+E 2.5(2a)144 178.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 190.8 R .37(gument is)-.18 F F2(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+F .37(xpression is true if and only if the second ar)-.15 F .37
+(gument is null.)-.18 F .38(If the \214rst ar)180 202.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .679
+-.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(CONDI-)2.879 E(TION)180
+214.8 Q .552(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(,)A F0 .552
 (the e)2.802 F .552(xpression is true if the unary test is true.)-.15 F
-.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 180 Q
+.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 226.8 Q
 (alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
-(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 192 S -.18(rg)-2.5 G
-(uments).18 E .023(If the second ar)180 204 R .023
+(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 238.8 S -.18(rg)-2.5 G
+(uments).18 E .024(If the second ar)180 250.8 R .023
 (gument is one of the binary conditional operators listed abo)-.18 F
-.324 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.524 E(DITION)180 216 Q 1.478
-(AL EXPRESSIONS)-.18 F F3(,)A F0 1.477(the result of the e)3.727 F 1.477
-(xpression is the result of the binary test)-.15 F .397
-(using the \214rst and third ar)180 228 R .397(guments as operands.)-.18
-F .398(If the \214rst ar)5.398 F .398(gument is)-.18 F F1(!)2.898 E F0
-2.898(,t)C .398(he v)-2.898 F .398(alue is the)-.25 F(ne)180 240 Q -.05
-(ga)-.15 G .263(tion of the tw).05 F(o-ar)-.1 E .262
+.323 -.15(ve u)-.15 H(nder).15 E F3(CON-)2.523 E(DITION)180 262.8 Q
+1.477(AL EXPRESSIONS)-.18 F F4(,)A F0 1.477(the result of the e)3.727 F
+1.477(xpression is the result of the binary test)-.15 F .398
+(using the \214rst and third ar)180 274.8 R .398(guments as operands.)
+-.18 F .398(If the \214rst ar)5.398 F .397(gument is)-.18 F F2(!)2.897 E
+F0 2.897(,t)C .397(he v)-2.897 F .397(alue is the)-.25 F(ne)180 286.8 Q
+-.05(ga)-.15 G .262(tion of the tw).05 F(o-ar)-.1 E .262
 (gument test using the second and third ar)-.18 F 2.762(guments. If)-.18
-F .262(the \214rst ar)2.762 F(gu-)-.18 E .205(ment is e)180 252 R
-(xactly)-.15 E F1(\()2.705 E F0 .205(and the third ar)2.705 F .205
-(gument is e)-.18 F(xactly)-.15 E F1(\))2.705 E F0 2.705(,t)C .206
-(he result is the one-ar)-2.705 F .206(gument test of)-.18 F 1.171
-(the second ar)180 264 R 3.671(gument. Otherwise,)-.18 F 1.171(the e)
-3.671 F 1.171(xpression is f)-.15 F 3.671(alse. The)-.1 F F1<ad61>3.671
-E F0(and)3.671 E F1<ad6f>3.67 E F0 1.17(operators are)3.67 F
-(considered binary operators in this case.)180 276 Q 2.5(4a)144 288 S
--.18(rg)-2.5 G(uments).18 E .384(If the \214rst ar)180 300 R .384
-(gument is)-.18 F F1(!)2.884 E F0 2.885(,t)C .385(he result is the ne)
--2.885 F -.05(ga)-.15 G .385(tion of the three-ar).05 F .385(gument e)
--.18 F .385(xpression com-)-.15 F 1.648(posed of the remaining ar)180
-312 R 4.147(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.647
+F .263(the \214rst ar)2.762 F(gu-)-.18 E .206(ment is e)180 298.8 R
+(xactly)-.15 E F2(\()2.706 E F0 .205(and the third ar)2.706 F .205
+(gument is e)-.18 F(xactly)-.15 E F2(\))2.705 E F0 2.705(,t)C .205
+(he result is the one-ar)-2.705 F .205(gument test of)-.18 F 1.17
+(the second ar)180 310.8 R 3.67(gument. Otherwise,)-.18 F 1.171(the e)
+3.671 F 1.171(xpression is f)-.15 F 3.671(alse. The)-.1 F F2<ad61>3.671
+E F0(and)3.671 E F2<ad6f>3.671 E F0 1.171(operators are)3.671 F
+(considered binary operators in this case.)180 322.8 Q 2.5(4a)144 334.8
+S -.18(rg)-2.5 G(uments).18 E .385(If the \214rst ar)180 346.8 R .385
+(gument is)-.18 F F2(!)2.885 E F0 2.885(,t)C .385(he result is the ne)
+-2.885 F -.05(ga)-.15 G .384(tion of the three-ar).05 F .384(gument e)
+-.18 F .384(xpression com-)-.15 F 1.647(posed of the remaining ar)180
+358.8 R 4.147(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.648
 (xpression is parsed and e)-.15 F -.25(va)-.25 G(luated).25 E
-(according to precedence using the rules listed abo)180 324 Q -.15(ve)
--.15 G(.).15 E 2.5(5o)144 336 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18
-E 1.635(The e)180 348 R 1.635(xpression is parsed and e)-.15 F -.25(va)
--.25 G 1.635(luated according to precedence using the rules listed).25 F
-(abo)180 360 Q -.15(ve)-.15 G(.).15 E F1(times)108 376.8 Q F0 1.229(Pri\
-nt the accumulated user and system times for the shell and for processe\
-s run from the shell.)13.23 F(The return status is 0.)144 388.8 Q F1
-(trap)108 405.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E/F4 10
-/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F4(sigspec)2.5 E F0(...])2.5 E
-.702(The command)144 417.6 R F4(ar)3.532 E(g)-.37 E F0 .702
-(is to be read and e)3.422 F -.15(xe)-.15 G .702
-(cuted when the shell recei).15 F -.15(ve)-.25 G 3.203(ss).15 G
-(ignal\(s\))-3.203 E F4(sigspec)3.203 E F0 5.703(.I).31 G(f)-5.703 E F4
-(ar)3.533 E(g)-.37 E F0(is)3.423 E .609(absent \(and there is a single)
-144 429.6 R F4(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F1<ad>3.108 E
+(according to precedence using the rules listed abo)180 370.8 Q -.15(ve)
+-.15 G(.).15 E 2.5(5o)144 382.8 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)
+-.18 E 1.635(The e)180 394.8 R 1.635(xpression is parsed and e)-.15 F
+-.25(va)-.25 G 1.635
+(luated according to precedence using the rules listed).25 F(abo)180
+406.8 Q -.15(ve)-.15 G(.).15 E F2(times)108 423.6 Q F0 1.229(Print the \
+accumulated user and system times for the shell and for processes run f\
+rom the shell.)13.23 F(The return status is 0.)144 435.6 Q F2(trap)108
+452.4 Q F0([)2.5 E F2(\255lp)A F0 2.5(][)C([)-2.5 E F1(ar)A(g)-.37 E F0
+(])A F1(sigspec)2.5 E F0(...])2.5 E .703(The command)144 464.4 R F1(ar)
+3.533 E(g)-.37 E F0 .703(is to be read and e)3.423 F -.15(xe)-.15 G .702
+(cuted when the shell recei).15 F -.15(ve)-.25 G 3.202(ss).15 G
+(ignal\(s\))-3.202 E F1(sigspec)3.202 E F0 5.702(.I).31 G(f)-5.702 E F1
+(ar)3.532 E(g)-.37 E F0(is)3.422 E .608(absent \(and there is a single)
+144 476.4 R F1(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F2<ad>3.108 E
 F0 3.108(,e)C .608
 (ach speci\214ed signal is reset to its original disposition)-3.108 F
-.658(\(the v)144 441.6 R .658(alue it had upon entrance to the shell\).)
--.25 F(If)5.658 E F4(ar)3.488 E(g)-.37 E F0 .659
-(is the null string the signal speci\214ed by each)3.378 F F4(sigspec)
-144.34 453.6 Q F0 .581
-(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G
--.1(ke).2 G 3.08(s. If).1 F F4(ar)3.41 E(g)-.37 E F0 .58
-(is not present and)3.3 F F1<ad70>3.08 E F0(has)3.08 E 1.214
-(been supplied, then the trap commands associated with each)144 465.6 R
-F4(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215
-F(gu-)-.18 E .86(ments are supplied or if only)144 477.6 R F1<ad70>3.36
-E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
+.659(\(the v)144 488.4 R .659(alue it had upon entrance to the shell\).)
+-.25 F(If)5.658 E F1(ar)3.488 E(g)-.37 E F0 .658
+(is the null string the signal speci\214ed by each)3.378 F F1(sigspec)
+144.34 500.4 Q F0 .58(is ignored by the shell and by the commands it in)
+3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F1(ar)3.411 E(g)-.37 E
+F0 .581(is not present and)3.301 F F2<ad70>3.081 E F0(has)3.081 E 1.215
+(been supplied, then the trap commands associated with each)144 512.4 R
+F1(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214
+F(gu-)-.18 E .86(ments are supplied or if only)144 524.4 R F2<ad70>3.36
+E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F2(trap)3.36 E F0 .86
 (prints the list of commands associated with each)3.36 F 2.83
-(signal. The)144 489.6 R F1<ad6c>2.83 E F0 .33(option causes the shell \
-to print a list of signal names and their corresponding num-)2.83 F
-4.311(bers. Each)144 501.6 R F4(sigspec)4.651 E F0 1.811
-(is either a signal name de\214ned in <)4.621 F F4(signal.h)A F0 1.81
-(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E .745
-(names are case insensiti)144 513.6 R 1.045 -.15(ve a)-.25 H .745
-(nd the SIG pre\214x is optional.).15 F .745(If a)5.745 F F4(sigspec)
-3.585 E F0(is)3.555 E F2(EXIT)3.245 E F0 .745(\(0\) the command)2.995 F
-F4(ar)144.33 525.6 Q(g)-.37 E F0 1.63(is e)4.35 F -.15(xe)-.15 G 1.63
-(cuted on e).15 F 1.63(xit from the shell.)-.15 F 1.63(If a)6.63 F F4
-(sigspec)4.47 E F0(is)4.44 E F2(DEB)4.13 E(UG)-.09 E F3(,)A F0 1.629
-(the command)3.88 F F4(ar)4.459 E(g)-.37 E F0 1.629(is e)4.349 F -.15
-(xe)-.15 G(cuted).15 E 1.206(before e)144 537.6 R -.15(ve)-.25 G(ry).15
-E F4 1.206(simple command)3.706 F F0(,)A F4(for)3.706 E F0(command,)
-3.706 E F4(case)3.706 E F0(command,)3.706 E F4(select)3.707 E F0 1.207
-(command, e)3.707 F -.15(ve)-.25 G 1.207(ry arithmetic).15 F F4(for)144
-549.6 Q F0 .412(command, and before the \214rst command e)2.913 F -.15
-(xe)-.15 G .412(cutes in a shell function \(see).15 F F2 .412
-(SHELL GRAMMAR)2.912 F F0(abo)144 561.6 Q -.15(ve)-.15 G 2.665
-(\). Refer).15 F .166(to the description of the)2.665 F F1(extdeb)2.666
-E(ug)-.2 E F0 .166(option to the)2.666 F F1(shopt)2.666 E F0 -.2(bu)
-2.666 G .166(iltin for details of its ef).2 F(fect)-.25 E .509(on the)
-144 573.6 R F1(DEB)3.009 E(UG)-.1 E F0 3.009(trap. If)3.009 F(a)3.009 E
-F4(sigspec)3.348 E F0(is)3.318 E F2(ERR)3.008 E F3(,)A F0 .508
-(the command)2.758 F F4(ar)3.338 E(g)-.37 E F0 .508(is e)3.228 F -.15
-(xe)-.15 G .508(cuted whene).15 F -.15(ve)-.25 G 3.008(ras).15 G .508
-(imple com-)-3.008 F 2.506(mand has a non\255zero e)144 585.6 R 2.506
+(signal. The)144 536.4 R F2<ad6c>2.83 E F0 .33(option causes the shell \
+to print a list of signal names and their corresponding num-)2.83 F 4.31
+(bers. Each)144 548.4 R F1(sigspec)4.65 E F0 1.811
+(is either a signal name de\214ned in <)4.62 F F1(signal.h)A F0 1.811
+(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E .745
+(names are case insensiti)144 560.4 R 1.045 -.15(ve a)-.25 H .745
+(nd the SIG pre\214x is optional.).15 F .745(If a)5.745 F F1(sigspec)
+3.585 E F0(is)3.555 E F3(EXIT)3.245 E F0 .745(\(0\) the command)2.995 F
+F1(ar)144.33 572.4 Q(g)-.37 E F0 1.629(is e)4.349 F -.15(xe)-.15 G 1.629
+(cuted on e).15 F 1.63(xit from the shell.)-.15 F 1.63(If a)6.63 F F1
+(sigspec)4.47 E F0(is)4.44 E F3(DEB)4.13 E(UG)-.09 E F4(,)A F0 1.63
+(the command)3.88 F F1(ar)4.46 E(g)-.37 E F0 1.63(is e)4.35 F -.15(xe)
+-.15 G(cuted).15 E 1.207(before e)144 584.4 R -.15(ve)-.25 G(ry).15 E F1
+1.207(simple command)3.707 F F0(,)A F1(for)3.707 E F0(command,)3.706 E
+F1(case)3.706 E F0(command,)3.706 E F1(select)3.706 E F0 1.206
+(command, e)3.706 F -.15(ve)-.25 G 1.206(ry arithmetic).15 F F1(for)144
+596.4 Q F0 .412(command, and before the \214rst command e)2.912 F -.15
+(xe)-.15 G .412(cutes in a shell function \(see).15 F F3 .413
+(SHELL GRAMMAR)2.912 F F0(abo)144 608.4 Q -.15(ve)-.15 G 2.666
+(\). Refer).15 F .166(to the description of the)2.666 F F2(extdeb)2.666
+E(ug)-.2 E F0 .166(option to the)2.666 F F2(shopt)2.666 E F0 -.2(bu)
+2.666 G .166(iltin for details of its ef).2 F(fect)-.25 E .508(on the)
+144 620.4 R F2(DEB)3.008 E(UG)-.1 E F0 3.008(trap. If)3.008 F(a)3.008 E
+F1(sigspec)3.348 E F0(is)3.318 E F3(ERR)3.008 E F4(,)A F0 .508
+(the command)2.758 F F1(ar)3.338 E(g)-.37 E F0 .509(is e)3.228 F -.15
+(xe)-.15 G .509(cuted whene).15 F -.15(ve)-.25 G 3.009(ras).15 G .509
+(imple com-)-3.009 F 2.506(mand has a non\255zero e)144 632.4 R 2.506
 (xit status, subject to the follo)-.15 F 2.506(wing conditions.)-.25 F
-(The)7.506 E F2(ERR)5.006 E F0 2.506(trap is not)4.756 F -.15(exe)144
-597.6 S .105(cuted if the f).15 F .105
+(The)7.506 E F3(ERR)5.006 E F0 2.506(trap is not)4.756 F -.15(exe)144
+644.4 S .105(cuted if the f).15 F .105
 (ailed command is part of the command list immediately follo)-.1 F .105
-(wing a)-.25 F F1(while)2.605 E F0(or)2.605 E F1(until)2.605 E F0 -.1
-(ke)144 609.6 S(yw)-.05 E .936(ord, part of the test in an)-.1 F F4(if)
-3.446 E F0 .936(statement, part of a)5.396 F F1(&&)3.436 E F0(or)3.436 E
+(wing a)-.25 F F2(while)2.605 E F0(or)2.605 E F2(until)2.605 E F0 -.1
+(ke)144 656.4 S(yw)-.05 E .936(ord, part of the test in an)-.1 F F1(if)
+3.446 E F0 .936(statement, part of a)5.396 F F2(&&)3.436 E F0(or)3.436 E
 /F5 10/Symbol SF<efef>3.436 E F0 .936(list, or if the command')3.436 F
-3.436(sr)-.55 G(eturn)-3.436 E -.25(va)144 621.6 S 1.095
-(lue is being in).25 F -.15(ve)-.4 G 1.094(rted via).15 F F1(!)3.594 E
+3.436(sr)-.55 G(eturn)-3.436 E -.25(va)144 668.4 S 1.094
+(lue is being in).25 F -.15(ve)-.4 G 1.094(rted via).15 F F2(!)3.594 E
 F0 6.094(.T)C 1.094(hese are the same conditions obe)-6.094 F 1.094
-(yed by the)-.15 F F1(err)3.594 E(exit)-.18 E F0 3.594(option. If)3.594
-F(a)3.594 E F4(sigspec)144.34 633.6 Q F0(is)3.348 E F2(RETURN)3.038 E F3
-(,)A F0 .538(the command)2.788 F F4(ar)3.368 E(g)-.37 E F0 .538(is e)
+(yed by the)-.15 F F2(err)3.594 E(exit)-.18 E F0 3.595(option. If)3.594
+F(a)3.595 E F1(sigspec)144.34 680.4 Q F0(is)3.349 E F3(RETURN)3.039 E F4
+(,)A F0 .539(the command)2.789 F F1(ar)3.368 E(g)-.37 E F0 .538(is e)
 3.258 F -.15(xe)-.15 G .538
 (cuted each time a shell function or a script e).15 F -.15(xe)-.15 G
-(cuted).15 E .506(with the)144 645.6 R F1(.)3.006 E F0(or)3.006 E F1
-(sour)3.006 E(ce)-.18 E F0 -.2(bu)3.006 G .506(iltins \214nishes e).2 F
--.15(xe)-.15 G 3.006(cuting. Signals).15 F .505
-(ignored upon entry to the shell cannot be)3.006 F .703
-(trapped or reset.)144 657.6 R -.35(Tr)5.703 G .704
+(cuted).15 E .505(with the)144 692.4 R F2(.)3.005 E F0(or)3.005 E F2
+(sour)3.005 E(ce)-.18 E F0 -.2(bu)3.005 G .505(iltins \214nishes e).2 F
+-.15(xe)-.15 G 3.006(cuting. Signals).15 F .506
+(ignored upon entry to the shell cannot be)3.006 F .704
+(trapped or reset.)144 704.4 R -.35(Tr)5.704 G .704
 (apped signals that are not being ignored are reset to their original v)
-.35 F .704(alues in a)-.25 F .224(child process when it is created.)144
-669.6 R .224(The return status is f)5.224 F .224(alse if an)-.1 F(y)-.15
-E F4(sigspec)3.064 E F0 .224(is in)3.034 F -.25(va)-.4 G .224
-(lid; otherwise).25 F F1(trap)2.724 E F0(returns true.)144 681.6 Q F1
-(type)108 698.4 Q F0([)2.5 E F1(\255aftpP)A F0(])A F4(name)2.5 E F0([)
-2.5 E F4(name)A F0(...])2.5 E -.4(Wi)144 710.4 S .173
-(th no options, indicate ho).4 F 2.673(we)-.25 G(ach)-2.673 E F4(name)
-3.033 E F0 -.1(wo)2.853 G .174
-(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F
-F1<ad74>144 722.4 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0
-.843(prints a string which is one of)3.343 F F4(alias)3.343 E F0(,).27 E
-F4 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F4(function)3.343 E F0
-(,).24 E F4 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F4
-(\214le)5.252 E F0(if)3.522 E(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735
-E(17)198.725 E 0 Cg EP
+.35 F .703(alues in a)-.25 F .224(child process when it is created.)144
+716.4 R .224(The return status is f)5.224 F .224(alse if an)-.1 F(y)-.15
+E F1(sigspec)3.064 E F0 .224(is in)3.034 F -.25(va)-.4 G .225
+(lid; otherwise).25 F F2(trap)2.725 E F0(returns true.)144 728.4 Q
+(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(17)198.725 E 0 Cg EP
 %%Page: 18 18
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Italic@0 SF(name)144.36 84 Q F0 .086(is an alias, shell reserv)
-2.766 F .086(ed w)-.15 F .086(ord, function, b)-.1 F .087
-(uiltin, or disk \214le, respecti)-.2 F -.15(ve)-.25 G(ly).15 E 5.087
-(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F1(name)2.947 E F0 .087(is not)
-2.767 F .119(found, then nothing is printed, and an e)144 96 R .118
-(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F
-/F2 10/Times-Bold@0 SF<ad70>2.618 E F0 .118(option is used,)2.618 F F2
-(type)2.618 E F0 .855(either returns the name of the disk \214le that w)
-144 108 R .855(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F1
-(name)3.715 E F0 .855(were speci\214ed as a com-)3.535 F .641
-(mand name, or nothing if)144 120 R/F3 10/Courier@0 SF .641
-(type -t name)3.141 F F0 -.1(wo)3.141 G .641(uld not return).1 F F1
-(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E F2<ad50>3.14 E F0 .64
-(option forces a)3.14 F/F4 9/Times-Bold@0 SF -.666(PA)3.14 G(TH)-.189 E
-F0 .112(search for each)144 132 R F1(name)2.612 E F0 2.612(,e)C -.15(ve)
--2.862 G 2.613(ni).15 G(f)-2.613 E F3 .113(type -t name)2.613 F F0 -.1
-(wo)2.613 G .113(uld not return).1 F F1(\214le)2.613 E F0 5.113(.I).18 G
-2.613(fac)-5.113 G .113(ommand is hashed,)-2.613 F F2<ad70>2.613 E F0
-(and)144 144 Q F2<ad50>2.945 E F0 .445(print the hashed v)2.945 F .444
+/Times-Bold@0 SF(type)108 84 Q F0([)2.5 E F1(\255aftpP)A F0(])A/F2 10
+/Times-Italic@0 SF(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5 E -.4(Wi)
+144 96 S .174(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674
+E F2(name)3.034 E F0 -.1(wo)2.854 G .173
+(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F
+F1<ad74>144 108 Q F0 .842(option is used,)3.342 F F1(type)3.342 E F0
+.843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E
+F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0
+(,).24 E F2 -.2(bu)3.343 G(iltin).2 E F0 3.343(,o).24 G(r)-3.343 E F2
+(\214le)5.253 E F0(if)3.523 E F2(name)144.36 120 Q F0 .087
+(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087
+(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15
+(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2
+(name)2.946 E F0 .086(is not)2.766 F .118
+(found, then nothing is printed, and an e)144 132 R .118
+(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F
+F1<ad70>2.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855
+(either returns the name of the disk \214le that w)144 144 R .855
+(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0
+.855(were speci\214ed as a com-)3.535 F .64(mand name, or nothing if)144
+156 R/F3 10/Courier@0 SF .64(type -t name)3.14 F F0 -.1(wo)3.14 G .641
+(uld not return).1 F F2(\214le)3.141 E F0 5.641(.T).18 G(he)-5.641 E F1
+<ad50>3.141 E F0 .641(option forces a)3.141 F/F4 9/Times-Bold@0 SF -.666
+(PA)3.141 G(TH)-.189 E F0 .113(search for each)144 168 R F2(name)2.613 E
+F0 2.613(,e)C -.15(ve)-2.863 G 2.613(ni).15 G(f)-2.613 E F3 .113
+(type -t name)2.613 F F0 -.1(wo)2.613 G .113(uld not return).1 F F2
+(\214le)2.613 E F0 5.113(.I).18 G 2.613(fa)-5.113 G .112
+(command is hashed,)-.001 F F1<ad70>2.612 E F0(and)144 180 Q F1<ad50>
+2.944 E F0 .444(print the hashed v)2.944 F .444
 (alue, not necessarily the \214le that appears \214rst in)-.25 F F4
--.666(PA)2.944 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .444(If the)
-4.944 F F2<ad61>2.944 E F0(option)2.944 E .265(is used,)144 156 R F2
+-.666(PA)2.945 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .445(If the)
+4.945 F F1<ad61>2.945 E F0(option)2.945 E .265(is used,)144 192 R F1
 (type)2.765 E F0 .265(prints all of the places that contain an e)2.765 F
--.15(xe)-.15 G .265(cutable named).15 F F1(name)2.765 E F0 5.265(.T).18
-G .265(his includes aliases)-5.265 F .427
-(and functions, if and only if the)144 168 R F2<ad70>2.926 E F0 .426
-(option is not also used.)2.926 F .426
-(The table of hashed commands is not)5.426 F .548(consulted when using)
-144 180 R F2<ad61>3.048 E F0 5.548(.T)C(he)-5.548 E F2<ad66>3.048 E F0
-.549(option suppresses shell function lookup, as with the)3.048 F F2
-(command)3.049 E F0 -.2(bu)144 192 S(iltin.).2 E F2(type)5 E F0
+-.15(xe)-.15 G .265(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18
+G .265(his includes aliases)-5.265 F .426
+(and functions, if and only if the)144 204 R F1<ad70>2.926 E F0 .426
+(option is not also used.)2.926 F .427
+(The table of hashed commands is not)5.426 F .549(consulted when using)
+144 216 R F1<ad61>3.049 E F0 5.549(.T)C(he)-5.549 E F1<ad66>3.049 E F0
+.548(option suppresses shell function lookup, as with the)3.049 F F1
+(command)3.048 E F0 -.2(bu)144 228 S(iltin.).2 E F1(type)5 E F0
 (returns true if an)2.5 E 2.5(yo)-.15 G 2.5(ft)-2.5 G(he ar)-2.5 E
-(guments are found, f)-.18 E(alse if none are found.)-.1 E F2(ulimit)108
-208.8 Q F0([)2.5 E F2(\255SHacde\214lmnpqrstuvx)A F0([)2.5 E F1(limit)A
-F0(]])A(Pro)144 220.8 Q .244(vides control o)-.15 F -.15(ve)-.15 G 2.744
-(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244
+(guments are found, f)-.18 E(alse if none are found.)-.1 E F1(ulimit)108
+244.8 Q F0([)2.5 E F1(\255SHacde\214lmnpqrstuvx)A F0([)2.5 E F2(limit)A
+F0(]])A(Pro)144 256.8 Q .243(vides control o)-.15 F -.15(ve)-.15 G 2.743
+(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244
 (ilable to the shell and to processes started by it, on systems).25 F
-.943(that allo)144 232.8 R 3.443(ws)-.25 G .943(uch control.)-3.443 F
-(The)5.943 E F2<ad48>3.443 E F0(and)3.443 E F2<ad53>3.444 E F0 .944
+.944(that allo)144 268.8 R 3.444(ws)-.25 G .944(uch control.)-3.444 F
+(The)5.944 E F1<ad48>3.444 E F0(and)3.444 E F1<ad53>3.444 E F0 .943
 (options specify that the hard or soft limit is set for the)3.444 F(gi)
-144 244.8 Q -.15(ve)-.25 G 2.738(nr).15 G 2.738(esource. A)-2.738 F .238
+144 280.8 Q -.15(ve)-.25 G 2.737(nr).15 G 2.737(esource. A)-2.737 F .238
 (hard limit cannot be increased once it is set; a soft limit may be inc\
-reased up to)2.738 F .355(the v)144 256.8 R .355
-(alue of the hard limit.)-.25 F .355(If neither)5.355 F F2<ad48>2.855 E
-F0(nor)2.855 E F2<ad53>2.855 E F0 .356
-(is speci\214ed, both the soft and hard limits are set.)2.856 F .402
-(The v)144 268.8 R .402(alue of)-.25 F F1(limit)2.992 E F0 .402(can be \
+reased up to)2.738 F .356(the v)144 292.8 R .356
+(alue of the hard limit.)-.25 F .356(If neither)5.356 F F1<ad48>2.856 E
+F0(nor)2.856 E F1<ad53>2.856 E F0 .355
+(is speci\214ed, both the soft and hard limits are set.)2.855 F .402
+(The v)144 304.8 R .402(alue of)-.25 F F2(limit)2.992 E F0 .402(can be \
 a number in the unit speci\214ed for the resource or one of the special\
- v)3.582 F(al-)-.25 E(ues)144 280.8 Q F2(hard)3.018 E F0(,)A F2(soft)
-3.018 E F0 3.018(,o)C(r)-3.018 E F2(unlimited)3.018 E F0 3.018(,w)C .518
+ v)3.582 F(al-)-.25 E(ues)144 316.8 Q F1(hard)3.019 E F0(,)A F1(soft)
+3.019 E F0 3.019(,o)C(r)-3.019 E F1(unlimited)3.019 E F0 3.018(,w)C .518
 (hich stand for the current hard limit, the current soft limit, and no)
--3.018 F .354(limit, respecti)144 292.8 R -.15(ve)-.25 G(ly).15 E 5.354
-(.I)-.65 G(f)-5.354 E F1(limit)2.944 E F0 .354
-(is omitted, the current v)3.534 F .353
+-3.018 F .353(limit, respecti)144 328.8 R -.15(ve)-.25 G(ly).15 E 5.353
+(.I)-.65 G(f)-5.353 E F2(limit)2.943 E F0 .353
+(is omitted, the current v)3.533 F .354
 (alue of the soft limit of the resource is printed,)-.25 F .37
-(unless the)144 304.8 R F2<ad48>2.87 E F0 .37(option is gi)2.87 F -.15
+(unless the)144 340.8 R F1<ad48>2.87 E F0 .37(option is gi)2.87 F -.15
 (ve)-.25 G 2.87(n. When).15 F .37
 (more than one resource is speci\214ed, the limit name and unit)2.87 F
-(are printed before the v)144 316.8 Q 2.5(alue. Other)-.25 F
-(options are interpreted as follo)2.5 E(ws:)-.25 E F2<ad61>144 328.8 Q
-F0(All current limits are reported)25.3 E F2<ad63>144 340.8 Q F0
-(The maximum size of core \214les created)25.86 E F2<ad64>144 352.8 Q F0
+(are printed before the v)144 352.8 Q 2.5(alue. Other)-.25 F
+(options are interpreted as follo)2.5 E(ws:)-.25 E F1<ad61>144 364.8 Q
+F0(All current limits are reported)25.3 E F1<ad63>144 376.8 Q F0
+(The maximum size of core \214les created)25.86 E F1<ad64>144 388.8 Q F0
 (The maximum size of a process')24.74 E 2.5(sd)-.55 G(ata se)-2.5 E
-(gment)-.15 E F2<ad65>144 364.8 Q F0
-(The maximum scheduling priority \("nice"\))25.86 E F2<ad66>144 376.8 Q
+(gment)-.15 E F1<ad65>144 400.8 Q F0
+(The maximum scheduling priority \("nice"\))25.86 E F1<ad66>144 412.8 Q
 F0(The maximum size of \214les written by the shell and its children)
-26.97 E F2<ad69>144 388.8 Q F0(The maximum number of pending signals)
-27.52 E F2<ad6c>144 400.8 Q F0(The maximum size that may be lock)27.52 E
-(ed into memory)-.1 E F2<ad6d>144 412.8 Q F0
-(The maximum resident set size)21.97 E F2<ad6e>144 424.8 Q F0 .791(The \
+26.97 E F1<ad69>144 424.8 Q F0(The maximum number of pending signals)
+27.52 E F1<ad6c>144 436.8 Q F0(The maximum size that may be lock)27.52 E
+(ed into memory)-.1 E F1<ad6d>144 448.8 Q F0
+(The maximum resident set size)21.97 E F1<ad6e>144 460.8 Q F0 .791(The \
 maximum number of open \214le descriptors \(most systems do not allo)
-24.74 F 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F(be set\))180
-436.8 Q F2<ad70>144 448.8 Q F0
-(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F2
-<ad71>144 460.8 Q F0
-(The maximum number of bytes in POSIX message queues)24.74 E F2<ad72>144
-472.8 Q F0(The maximum real-time scheduling priority)25.86 E F2<ad73>144
-484.8 Q F0(The maximum stack size)26.41 E F2<ad74>144 496.8 Q F0
-(The maximum amount of cpu time in seconds)26.97 E F2<ad75>144 508.8 Q
+24.74 F 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
+(be set\))180 472.8 Q F1<ad70>144 484.8 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1
+<ad71>144 496.8 Q F0
+(The maximum number of bytes in POSIX message queues)24.74 E F1<ad72>144
+508.8 Q F0(The maximum real-time scheduling priority)25.86 E F1<ad73>144
+520.8 Q F0(The maximum stack size)26.41 E F1<ad74>144 532.8 Q F0
+(The maximum amount of cpu time in seconds)26.97 E F1<ad75>144 544.8 Q
 F0(The maximum number of processes a)24.74 E -.25(va)-.2 G
-(ilable to a single user).25 E F2<ad76>144 520.8 Q F0
+(ilable to a single user).25 E F1<ad76>144 556.8 Q F0
 (The maximum amount of virtual memory a)25.3 E -.25(va)-.2 G
-(ilable to the shell).25 E F2<ad78>144 532.8 Q F0
-(The maximum number of \214le locks)25.3 E(If)144 549.6 Q F1(limit)2.933
+(ilable to the shell).25 E F1<ad78>144 568.8 Q F0
+(The maximum number of \214le locks)25.3 E(If)144 585.6 Q F2(limit)2.933
 E F0 .343(is gi)3.523 F -.15(ve)-.25 G .343(n, it is the ne).15 F 2.843
-(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F2<ad61>
+(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F1<ad61>
 2.843 E F0 .343(option is display only\).)2.843 F .343(If no)5.343 F
-.176(option is gi)144 561.6 R -.15(ve)-.25 G .176(n, then).15 F F2<ad66>
-2.676 E F0 .175(is assumed.)2.676 F -1.11(Va)5.175 G .175
-(lues are in 1024-byte increments, e)1.11 F .175(xcept for)-.15 F F2
-<ad74>2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 573.6
-Q F2<ad70>2.697 E F0 2.697(,w)C .197
-(hich is in units of 512-byte blocks, and)-2.697 F F2<ad6e>2.698 E F0
-(and)2.698 E F2<ad75>2.698 E F0 2.698(,w)C .198(hich are unscaled v)
--2.698 F 2.698(alues. The)-.25 F .404(return status is 0 unless an in)
-144 585.6 R -.25(va)-.4 G .404(lid option or ar).25 F .404
+.175(option is gi)144 597.6 R -.15(ve)-.25 G .175(n, then).15 F F1<ad66>
+2.675 E F0 .175(is assumed.)2.675 F -1.11(Va)5.175 G .175
+(lues are in 1024-byte increments, e)1.11 F .176(xcept for)-.15 F F1
+<ad74>2.676 E F0 2.676(,w)C .176(hich is in)-2.676 F(seconds,)144 609.6
+Q F1<ad70>2.698 E F0 2.698(,w)C .198
+(hich is in units of 512-byte blocks, and)-2.698 F F1<ad6e>2.698 E F0
+(and)2.698 E F1<ad75>2.697 E F0 2.697(,w)C .197(hich are unscaled v)
+-2.697 F 2.697(alues. The)-.25 F .404(return status is 0 unless an in)
+144 621.6 R -.25(va)-.4 G .404(lid option or ar).25 F .404
 (gument is supplied, or an error occurs while setting)-.18 F 2.5(an)144
-597.6 S .5 -.25(ew l)-2.5 H(imit.).25 E F2(umask)108 614.4 Q F0([)2.5 E
-F2<ad70>A F0 2.5(][)C F2<ad53>-2.5 E F0 2.5(][)C F1(mode)-2.5 E F0(])A
-.2(The user \214le-creation mask is set to)144 626.4 R F1(mode)2.7 E F0
-5.2(.I).18 G(f)-5.2 E F1(mode)3.08 E F0(be)2.88 E .2
+633.6 S .5 -.25(ew l)-2.5 H(imit.).25 E F1(umask)108 650.4 Q F0([)2.5 E
+F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A
+.2(The user \214le-creation mask is set to)144 662.4 R F2(mode)2.7 E F0
+5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2
 (gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\
 therwise it is interpreted as a symbolic mode mask similar to that acce\
-pted by)144 638.4 R F1 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
-650.4 Q F1(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382
-(alue of the mask is printed.)-.25 F(The)5.382 E F2<ad53>2.882 E F0 .382
+pted by)144 674.4 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+686.4 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382
 (option causes the mask to be)2.882 F .547
-(printed in symbolic form; the def)144 662.4 R .547
+(printed in symbolic form; the def)144 698.4 R .547
 (ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G
-(he)-3.047 E F2<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F1
-(mode)144.38 674.4 Q F0 .551
-(is omitted, the output is in a form that may be reused as input.)3.231
-F .552(The return status is 0 if the)5.552 F(mode w)144 686.4 Q
-(as successfully changed or if no)-.1 E F1(mode)2.5 E F0(ar)2.5 E
-(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F2
-(unalias)108 703.2 Q F0<5bad>2.5 E F2(a)A F0 2.5(][)C F1(name)-2.5 E F0
-(...])2.5 E(Remo)144 715.2 Q 1.955 -.15(ve e)-.15 H(ach).15 E F1(name)
-4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 F(If)6.655 E
-F2<ad61>4.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155
-F(remo)144 727.2 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
-(alue is true unless a supplied)-.25 E F1(name)2.86 E F0
-(is not a de\214ned alias.)2.68 E(GNU Bash-3.0)72 768 Q(2004 Apr 20)
-148.735 E(18)198.725 E 0 Cg EP
+(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F2
+(mode)144.38 710.4 Q F0 .552
+(is omitted, the output is in a form that may be reused as input.)3.232
+F .551(The return status is 0 if the)5.551 F(mode w)144 722.4 Q
+(as successfully changed or if no)-.1 E F2(mode)2.5 E F0(ar)2.5 E
+(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E
+(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(18)198.725 E 0 Cg EP
 %%Page: 19 19
 %%BeginPageSetup
 BP
 %%EndPageSetup
 /F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 290.48
 (TINS\(1\) B)-.92 F(ASH_B)-.35 E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10
-/Times-Bold@0 SF(unset)108 84 Q F0<5bad>2.5 E F1(fv)A F0 2.5(][)C/F2 10
-/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E -.15(Fo)144 96 S 3.106(re)
-.15 G(ach)-3.106 E F2(name)3.106 E F0 3.106(,r).18 G(emo)-3.106 E .906
--.15(ve t)-.15 H .606(he corresponding v).15 F .607
-(ariable or function.)-.25 F .607(If no options are supplied, or the)
-5.607 F F1<ad76>144 108 Q F0 .305(option is gi)2.805 F -.15(ve)-.25 G
-.305(n, each).15 F F2(name)3.165 E F0 .305(refers to a shell v)2.985 F
-2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .304
-(riables may not be unset.).25 F(If)5.304 E F1<ad66>144 120 Q F0 .459
-(is speci\214ed, each)2.959 F F2(name)3.319 E F0 .459
-(refers to a shell function, and the function de\214nition is remo)3.139
-F -.15(ve)-.15 G 2.96(d. Each).15 F .903(unset v)144 132 R .903
+/Times-Bold@0 SF(unalias)108 84 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C/F2 10
+/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E(Remo)144 96 Q 1.955 -.15
+(ve e)-.15 H(ach).15 E F2(name)4.155 E F0 1.655
+(from the list of de\214ned aliases.)4.155 F(If)6.655 E F1<ad61>4.155 E
+F0 1.655(is supplied, all alias de\214nitions are)4.155 F(remo)144 108 Q
+-.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
+(alue is true unless a supplied)-.25 E F2(name)2.86 E F0
+(is not a de\214ned alias.)2.68 E F1(unset)108 124.8 Q F0<5bad>2.5 E F1
+(fv)A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E -.15(Fo)144 136.8 S 3.107
+(re).15 G(ach)-3.107 E F2(name)3.107 E F0 3.107(,r).18 G(emo)-3.107 E
+.907 -.15(ve t)-.15 H .607(he corresponding v).15 F .607
+(ariable or function.)-.25 F .606(If no options are supplied, or the)
+5.607 F F1<ad76>144 148.8 Q F0 .304(option is gi)2.804 F -.15(ve)-.25 G
+.304(n, each).15 F F2(name)3.164 E F0 .305(refers to a shell v)2.985 F
+2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .305
+(riables may not be unset.).25 F(If)5.305 E F1<ad66>144 160.8 Q F0 .46
+(is speci\214ed, each)2.96 F F2(name)3.32 E F0 .459
+(refers to a shell function, and the function de\214nition is remo)3.14
+F -.15(ve)-.15 G 2.959(d. Each).15 F .902(unset v)144 172.8 R .902
 (ariable or function is remo)-.25 F -.15(ve)-.15 G 3.402(df).15 G .902
-(rom the en)-3.402 F .902(vironment passed to subsequent commands.)-.4 F
-(If)5.902 E(an)144 144 Q 4.284(yo)-.15 G(f)-4.284 E/F3 9/Times-Bold@0 SF
-(RANDOM)4.284 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
+(rom the en)-3.402 F .903(vironment passed to subsequent commands.)-.4 F
+(If)5.903 E(an)144 184.8 Q 4.285(yo)-.15 G(f)-4.285 E/F3 9/Times-Bold@0
+SF(RANDOM)4.285 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
 (LINENO)4.035 E F4(,)A F3(HISTCMD)4.035 E F4(,)A F3(FUNCN)4.035 E(AME)
 -.18 E F4(,)A F3(GR)4.035 E(OUPS)-.27 E F4(,)A F0(or)4.035 E F3(DIRST)
-4.285 E -.495(AC)-.81 G(K).495 E F0(are)4.035 E .329(unset, the)144 156
-R 2.829(yl)-.15 G .328(ose their special properties, e)-2.829 F -.15(ve)
--.25 G 2.828(ni).15 G 2.828(ft)-2.828 G(he)-2.828 E 2.828(ya)-.15 G .328
-(re subsequently reset.)-2.828 F .328(The e)5.328 F .328
-(xit status is true)-.15 F(unless a)144 168 Q F2(name)2.86 E F0
-(is readonly)2.68 E(.)-.65 E F1(wait)108 184.8 Q F0([)2.5 E F2 2.5(n.)C
-(..)-2.5 E F0(])A -.8(Wa)144 196.8 S .288
+4.284 E -.495(AC)-.81 G(K).495 E F0(are)4.034 E .328(unset, the)144
+196.8 R 2.828(yl)-.15 G .328(ose their special properties, e)-2.828 F
+-.15(ve)-.25 G 2.828(ni).15 G 2.828(ft)-2.828 G(he)-2.828 E 2.828(ya)
+-.15 G .328(re subsequently reset.)-2.828 F .328(The e)5.328 F .329
+(xit status is true)-.15 F(unless a)144 208.8 Q F2(name)2.86 E F0
+(is readonly)2.68 E(.)-.65 E F1(wait)108 225.6 Q F0([)2.5 E F2 2.5(n.)C
+(..)-2.5 E F0(])A -.8(Wa)144 237.6 S .288
 (it for each speci\214ed process and return its termination status.).8 F
-(Each)5.288 E F2(n)3.148 E F0 .288(may be a process ID or a)3.028 F .722
-(job speci\214cation; if a job spec is gi)144 208.8 R -.15(ve)-.25 G
+(Each)5.288 E F2(n)3.148 E F0 .287(may be a process ID or a)3.028 F .722
+(job speci\214cation; if a job spec is gi)144 249.6 R -.15(ve)-.25 G
 .722(n, all processes in that job').15 F 3.222(sp)-.55 G .722
 (ipeline are w)-3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E
-F2(n)3.582 E F0(is)3.462 E 1.265(not gi)144 220.8 R -.15(ve)-.25 G 1.265
-(n, all currently acti).15 F 1.565 -.15(ve c)-.25 H 1.265
-(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.266
-(nd the return status is zero.)-3.765 F(If)6.266 E F2(n)4.126 E F0 .457
-(speci\214es a non-e)144 232.8 R .457
+F2(n)3.583 E F0(is)3.463 E 1.266(not gi)144 261.6 R -.15(ve)-.25 G 1.266
+(n, all currently acti).15 F 1.566 -.15(ve c)-.25 H 1.265
+(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.265
+(nd the return status is zero.)-3.765 F(If)6.265 E F2(n)4.125 E F0 .456
+(speci\214es a non-e)144 273.6 R .457
 (xistent process or job, the return status is 127.)-.15 F .457
-(Otherwise, the return status is the)5.457 F -.15(ex)144 244.8 S
+(Otherwise, the return status is the)5.457 F -.15(ex)144 285.6 S
 (it status of the last process or job w).15 E(aited for)-.1 E(.)-.55 E
-/F5 10.95/Times-Bold@0 SF(SEE ALSO)72 261.6 Q F0(bash\(1\), sh\(1\))108
-273.6 Q(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(19)198.725 E 0 Cg EP
+/F5 10.95/Times-Bold@0 SF(SEE ALSO)72 302.4 Q F0(bash\(1\), sh\(1\))108
+314.4 Q(GNU Bash-3.0)72 768 Q(2004 Apr 20)148.735 E(19)198.725 E 0 Cg EP
 %%Trailer
 end
 %%EOF
index 3bbfe261b1c8b7643b35a7b57b8fef111e70ee10..f839ba69332265fc31f1cc14188a51b0322c82bc 100644 (file)
@@ -1,5 +1,5 @@
 From: chet@po.cwru.edu (Chet Ramey)
 To: bug-bash@gnu.org
-Subject: BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: BASH Frequently-Asked Questions (FAQ version 3.35)
 Reply-To: chet@po.cwru.edu
 
index ee92e1b46904945d96a1c058ca304f6284ae878c..097c7a0acb896d44e9137f88cea53c8276d80966 100644 (file)
@@ -1,7 +1,7 @@
 Newsgroups: comp.unix.shell,comp.unix.questions
 Distribution: world
 From: chet@po.cwru.edu (Chet Ramey)
-Subject: BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: BASH Frequently-Asked Questions (FAQ version 3.35)
 Organization: Case Western Reserve University
 Summary: A's to Q's about BASH, the Bourne-Again SHell
 Reply-To: chet@po.cwru.edu
index 1988fbce17c030d5e8809d04fe47117fee6cbdde..0d238229d3f5634ab7d5f9ae7100c003cbebbe95 100644 (file)
@@ -1,6 +1,6 @@
 Newsgroups: comp.unix.shell,comp.unix.questions,comp.answers,news.answers
 From: chet@po.cwru.edu (Chet Ramey)
-Subject: [gnu.bash.bug] BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: [gnu.bash.bug] BASH Frequently-Asked Questions (FAQ version 3.35)
 Organization: Case Western Reserve University
 Summary: A's to Q's about BASH, the Bourne-Again SHell
 Reply-To: chet@po.cwru.edu
index 581ca61725f83cbe719ef4d8753eba3974af4fb2..bf9490783dd23109bb92a26db240c859d5ac28e1 100644 (file)
@@ -1,18 +1,18 @@
 From: chet@po.cwru.edu (Chet Ramey)
 To: bug-bash@gnu.org
-Subject: BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: BASH Frequently-Asked Questions (FAQ version 3.35)
 Reply-To: chet@po.cwru.edu
 
 Archive-name: unix-faq/shell/bash
 Posting-Frequency: monthly
 Submitted-By: chet@po.cwru.edu (Chet Ramey)
-Last-Modified: Tue Oct 10 10:15:38 EDT 2006
-FAQ-Version: 3.34
+Last-Modified: Thu Dec 14 11:34:54 EST 2006
+FAQ-Version: 3.35
 Bash-Version: 3.2
 URL: ftp://ftp.cwru.edu/pub/bash/FAQ
 Maintainer: chet@po.cwru.edu (Chet Ramey)
 
-This is the Bash FAQ, version 3.34, for Bash version 3.2.
+This is the Bash FAQ, version 3.35, for Bash version 3.2.
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -1805,8 +1805,8 @@ it in fine bookstores near you.  This edition of the book has been updated
 to cover bash-3.0.
 
 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
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
+bash-3.2 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. 
 
index 4dc63e3d1dcfca95451e928d457defbe7fa28213..2454e686ec6eb5bac98c564695b18835fb3d3ad1 100644 (file)
@@ -1,7 +1,7 @@
 Newsgroups: comp.unix.shell,comp.unix.questions
 Distribution: world
 From: chet@po.cwru.edu (Chet Ramey)
-Subject: BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: BASH Frequently-Asked Questions (FAQ version 3.35)
 Organization: Case Western Reserve University
 Summary: A's to Q's about BASH, the Bourne-Again SHell
 Reply-To: chet@po.cwru.edu
@@ -10,13 +10,13 @@ Followup-To: poster
 Archive-name: unix-faq/shell/bash
 Posting-Frequency: monthly
 Submitted-By: chet@po.cwru.edu (Chet Ramey)
-Last-Modified: Tue Oct 10 10:15:38 EDT 2006
-FAQ-Version: 3.34
+Last-Modified: Thu Dec 14 11:34:54 EST 2006
+FAQ-Version: 3.35
 Bash-Version: 3.2
 URL: ftp://ftp.cwru.edu/pub/bash/FAQ
 Maintainer: chet@po.cwru.edu (Chet Ramey)
 
-This is the Bash FAQ, version 3.34, for Bash version 3.2.
+This is the Bash FAQ, version 3.35, for Bash version 3.2.
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -1809,8 +1809,8 @@ it in fine bookstores near you.  This edition of the book has been updated
 to cover bash-3.0.
 
 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
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
+bash-3.2 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. 
 
index 36c72be25ebef831777aab13ef6e360ae64d3408..0d646ff52ea3cb9c4b4c5eb93c1981247855dc20 100644 (file)
@@ -1,6 +1,6 @@
 Newsgroups: comp.unix.shell,comp.unix.questions,comp.answers,news.answers
 From: chet@po.cwru.edu (Chet Ramey)
-Subject: [gnu.bash.bug] BASH Frequently-Asked Questions (FAQ version 3.34)
+Subject: [gnu.bash.bug] BASH Frequently-Asked Questions (FAQ version 3.35)
 Organization: Case Western Reserve University
 Summary: A's to Q's about BASH, the Bourne-Again SHell
 Reply-To: chet@po.cwru.edu
@@ -10,13 +10,13 @@ Approved: news-answers-request@MIT.EDU
 Archive-name: unix-faq/shell/bash
 Posting-Frequency: monthly
 Submitted-By: chet@po.cwru.edu (Chet Ramey)
-Last-Modified: Tue Oct 10 10:15:38 EDT 2006
-FAQ-Version: 3.34
+Last-Modified: Thu Dec 14 11:34:54 EST 2006
+FAQ-Version: 3.35
 Bash-Version: 3.2
 URL: ftp://ftp.cwru.edu/pub/bash/FAQ
 Maintainer: chet@po.cwru.edu (Chet Ramey)
 
-This is the Bash FAQ, version 3.34, for Bash version 3.2.
+This is the Bash FAQ, version 3.35, for Bash version 3.2.
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -1809,8 +1809,8 @@ it in fine bookstores near you.  This edition of the book has been updated
 to cover bash-3.0.
 
 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
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Nov. 2006).  It covers
+bash-3.2 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. 
 
index cb6a22888fd9409513469ca8adae9694809d1b8c..79861feb92e22aa662657abd86f47f8155c5a67a 100644 (file)
@@ -1,8 +1,8 @@
 Archive-name: unix-faq/shell/bash
 Posting-Frequency: monthly
 Submitted-By: chet@po.cwru.edu (Chet Ramey)
-Last-Modified: Tue Oct 10 10:15:38 EDT 2006
-FAQ-Version: 3.34
+Last-Modified: Thu Dec 14 11:34:54 EST 2006
+FAQ-Version: 3.35
 Bash-Version: 3.2
 URL: ftp://ftp.cwru.edu/pub/bash/FAQ
 Maintainer: chet@po.cwru.edu (Chet Ramey)
index 4caf812249d15368e14d1998b65e10ec2dd3fcee..5f05afbd6c225ee05966ede089f5093c544206af 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.19.1
-%%CreationDate: Tue Oct  3 08:54:30 2006
+%%CreationDate: Tue Dec 12 14:43:07 2006
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%DocumentSuppliedResources: procset grops 1.19 1
diff --git a/error.c b/error.c
index 83f6a7a9fc6cb2983a59fcf6f64c25ce6cd5a91f..c400f44963e1528dd7919cc37b7db53fadfab8cf 100644 (file)
--- a/error.c
+++ b/error.c
@@ -1,5 +1,5 @@
 /* error.c -- Functions for handling errors. */
-/* Copyright (C) 1993-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -85,7 +85,7 @@ error_prolog (print_lineno)
   line = (print_lineno && interactive_shell == 0) ? executing_line_number () : -1;
 
   if (line > 0)
-    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : " line ", line);
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : _(" line "), line);
   else
     fprintf (stderr, "%s: ", ename);
 }
@@ -315,11 +315,11 @@ parser_error (lineno, format, va_alist)
   if (interactive)
     fprintf (stderr, "%s: ", ename);
   else if (interactive_shell)
-    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : " line ", lineno);
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : _(" line "), lineno);
   else if (STREQ (ename, iname))
-    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : " line ", lineno);
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : _(" line "), lineno);
   else
-    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : " line ", lineno);
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : _(" line "), lineno);
 
   SH_VA_START (args, format);
 
diff --git a/error.c~ b/error.c~
new file mode 100644 (file)
index 0000000..83f6a7a
--- /dev/null
+++ b/error.c~
@@ -0,0 +1,452 @@
+/* error.c -- Functions for handling errors. */
+/* Copyright (C) 1993-2003 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#include "bashtypes.h"
+#include <fcntl.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#if defined (PREFER_STDARG)
+#  include <stdarg.h>
+#else
+#  include <varargs.h>
+#endif
+
+#include <stdio.h>
+
+#include <errno.h>
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+#include "bashansi.h"
+#include "bashintl.h"
+
+#include "shell.h"
+#include "flags.h"
+#include "input.h"
+
+#if defined (HISTORY)
+#  include "bashhist.h"
+#endif
+
+extern int executing_line_number __P((void));
+
+extern char *shell_name;
+#if defined (JOB_CONTROL)
+extern pid_t shell_pgrp;
+extern int give_terminal_to __P((pid_t, int));
+#endif /* JOB_CONTROL */
+
+#if defined (ARRAY_VARS)
+extern char *bash_badsub_errmsg;
+#endif
+
+static void error_prolog __P((int));
+
+/* The current maintainer of the shell.  You change this in the
+   Makefile. */
+#if !defined (MAINTAINER)
+#define MAINTAINER "bash-maintainers@gnu.org"
+#endif
+
+char *the_current_maintainer = MAINTAINER;
+
+int gnu_error_format = 0;
+
+static void
+error_prolog (print_lineno)
+     int print_lineno;
+{
+  char *ename;
+  int line;
+
+  ename = get_name_for_error ();
+  line = (print_lineno && interactive_shell == 0) ? executing_line_number () : -1;
+
+  if (line > 0)
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : " line ", line);
+  else
+    fprintf (stderr, "%s: ", ename);
+}
+
+/* Return the name of the shell or the shell script for error reporting. */
+char *
+get_name_for_error ()
+{
+  char *name;
+#if defined (ARRAY_VARS)
+  SHELL_VAR *bash_source_v;
+  ARRAY *bash_source_a;
+#endif
+
+  name = (char *)NULL;
+  if (interactive_shell == 0)
+    {
+#if defined (ARRAY_VARS)
+      bash_source_v = find_variable ("BASH_SOURCE");
+      if (bash_source_v && array_p (bash_source_v) &&
+         (bash_source_a = array_cell (bash_source_v)))
+       name = array_reference (bash_source_a, 0);
+      if (name == 0)
+#endif
+       name = dollar_vars[0];
+    }
+  if (name == 0 && shell_name && *shell_name)
+    name = base_pathname (shell_name);
+  if (name == 0)
+#if defined (PROGRAM)
+    name = PROGRAM;
+#else
+    name = "bash";
+#endif
+
+  return (name);
+}
+
+/* Report an error having to do with FILENAME.  This does not use
+   sys_error so the filename is not interpreted as a printf-style
+   format string. */
+void
+file_error (filename)
+     const char *filename;
+{
+  report_error ("%s: %s", filename, strerror (errno));
+}
+
+void
+#if defined (PREFER_STDARG)
+programming_error (const char *format, ...)
+#else
+programming_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  char *h;
+
+#if defined (JOB_CONTROL)
+  give_terminal_to (shell_pgrp, 0);
+#endif /* JOB_CONTROL */
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+  va_end (args);
+
+#if defined (HISTORY)
+  if (remember_on_history)
+    {
+      h = last_history_line ();
+      fprintf (stderr, _("last command: %s\n"), h ? h : "(null)");
+    }
+#endif
+
+#if 0
+  fprintf (stderr, "Report this to %s\n", the_current_maintainer);
+#endif
+
+  fprintf (stderr, _("Aborting..."));
+  fflush (stderr);
+
+  abort ();
+}
+
+/* Print an error message and, if `set -e' has been executed, exit the
+   shell.  Used in this file by file_error and programming_error.  Used
+   outside this file mostly to report substitution and expansion errors,
+   and for bad invocation options. */
+void
+#if defined (PREFER_STDARG)
+report_error (const char *format, ...)
+#else
+report_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (1);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+  if (exit_immediately_on_error)
+    exit_shell (1);
+}
+
+void
+#if defined (PREFER_STDARG)
+fatal_error (const char *format, ...)
+#else
+fatal_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (0);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+  sh_exit (2);
+}
+
+void
+#if defined (PREFER_STDARG)
+internal_error (const char *format, ...)
+#else
+internal_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  error_prolog (1);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+}
+
+void
+#if defined (PREFER_STDARG)
+internal_warning (const char *format, ...)
+#else
+internal_warning (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  fprintf (stderr, _("%s: warning: "), get_name_for_error ());
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+}
+
+void
+#if defined (PREFER_STDARG)
+sys_error (const char *format, ...)
+#else
+sys_error (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  int e;
+  va_list args;
+
+  e = errno;
+  error_prolog (0);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, ": %s\n", strerror (e));
+
+  va_end (args);
+}
+
+/* An error from the parser takes the general form
+
+       shell_name: input file name: line number: message
+
+   The input file name and line number are omitted if the shell is
+   currently interactive.  If the shell is not currently interactive,
+   the input file name is inserted only if it is different from the
+   shell name. */
+void
+#if defined (PREFER_STDARG)
+parser_error (int lineno, const char *format, ...)
+#else
+parser_error (lineno, format, va_alist)
+     int lineno;
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  char *ename, *iname;
+
+  ename = get_name_for_error ();
+  iname = yy_input_name ();
+
+  if (interactive)
+    fprintf (stderr, "%s: ", ename);
+  else if (interactive_shell)
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : " line ", lineno);
+  else if (STREQ (ename, iname))
+    fprintf (stderr, "%s:%s%d: ", ename, gnu_error_format ? "" : " line ", lineno);
+  else
+    fprintf (stderr, "%s: %s:%s%d: ", ename, iname, gnu_error_format ? "" : " line ", lineno);
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+
+  if (exit_immediately_on_error)
+    exit_shell (2);
+}
+
+#ifdef DEBUG
+void
+#if defined (PREFER_STDARG)
+itrace (const char *format, ...)
+#else
+itrace (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+
+  fprintf(stderr, "TRACE: pid %ld: ", (long)getpid());
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+
+  fflush(stderr);
+}
+
+/* A trace function for silent debugging -- doesn't require a control
+   terminal. */
+void
+#if defined (PREFER_STDARG)
+trace (const char *format, ...)
+#else
+trace (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+  va_list args;
+  static FILE *tracefp = (FILE *)NULL;
+
+  if (tracefp == NULL)
+    tracefp = fopen("/tmp/bash-trace.log", "a+");
+
+  if (tracefp == NULL)
+    tracefp = stderr;
+  else
+    fcntl (fileno (tracefp), F_SETFD, 1);     /* close-on-exec */
+
+  fprintf(tracefp, "TRACE: pid %ld: ", (long)getpid());
+
+  SH_VA_START (args, format);
+
+  vfprintf (tracefp, format, args);
+  fprintf (tracefp, "\n");
+
+  va_end (args);
+
+  fflush(tracefp);
+}
+
+#endif /* DEBUG */
+
+/* **************************************************************** */
+/*                                                                 */
+/*                 Common error reporting                          */
+/*                                                                 */
+/* **************************************************************** */
+
+
+static char *cmd_error_table[] = {
+       N_("unknown command error"),    /* CMDERR_DEFAULT */
+       N_("bad command type"),         /* CMDERR_BADTYPE */
+       N_("bad connector"),            /* CMDERR_BADCONN */
+       N_("bad jump"),                 /* CMDERR_BADJUMP */
+       0
+};
+
+void
+command_error (func, code, e, flags)
+     const char *func;
+     int code, e, flags;       /* flags currently unused */
+{
+  if (code > CMDERR_LAST)
+    code = CMDERR_DEFAULT;
+
+  programming_error ("%s: %s: %d", func, _(cmd_error_table[code]), e);
+}
+
+char *
+command_errstr (code)
+     int code;
+{
+  if (code > CMDERR_LAST)
+    code = CMDERR_DEFAULT;
+
+  return (_(cmd_error_table[code]));
+}
+
+#ifdef ARRAY_VARS
+void
+err_badarraysub (s)
+     const char *s;
+{
+  report_error ("%s: %s", s, _(bash_badsub_errmsg));
+}
+#endif
+
+void
+err_unboundvar (s)
+     const char *s;
+{
+  report_error (_("%s: unbound variable"), s);
+}
+
+void
+err_readonly (s)
+     const char *s;
+{
+  report_error (_("%s: readonly variable"), s);
+}
index 586771a1bd65b48378287fdd396da7332932c32b..2cfe530eb1b5fe7f0c8ef3cebd93c1b58cca9f91 100644 (file)
@@ -1,6 +1,6 @@
 /* execute_cmd.c -- Execute a COMMAND structure. */
 
-/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -1396,7 +1396,7 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
       /* Make a pipeline between the two commands. */
       if (pipe (fildes) < 0)
        {
-         sys_error ("pipe error");
+         sys_error (_("pipe error"));
 #if defined (JOB_CONTROL)
          terminate_current_pipeline ();
          kill_current_pipeline ();
diff --git a/execute_cmd.c~ b/execute_cmd.c~
new file mode 100644 (file)
index 0000000..586771a
--- /dev/null
@@ -0,0 +1,4144 @@
+/* execute_cmd.c -- Execute a COMMAND structure. */
+
+/* Copyright (C) 1987-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#include "config.h"
+
+#if !defined (__GNUC__) && !defined (HAVE_ALLOCA_H) && defined (_AIX)
+  #pragma alloca
+#endif /* _AIX && RISC6000 && !__GNUC__ */
+
+#include <stdio.h>
+#include "chartypes.h"
+#include "bashtypes.h"
+#if !defined (_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+#include "filecntl.h"
+#include "posixstat.h"
+#include <signal.h>
+#ifndef _MINIX
+#  include <sys/param.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "posixtime.h"
+
+#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
+#  include <sys/resource.h>
+#endif
+
+#if defined (HAVE_SYS_TIMES_H) && defined (HAVE_TIMES)
+#  include <sys/times.h>
+#endif
+
+#include <errno.h>
+
+#if !defined (errno)
+extern int errno;
+#endif
+
+#include "bashansi.h"
+#include "bashintl.h"
+
+#include "memalloc.h"
+#include "shell.h"
+#include <y.tab.h>     /* use <...> so we pick it up from the build directory */
+#include "flags.h"
+#include "builtins.h"
+#include "hashlib.h"
+#include "jobs.h"
+#include "execute_cmd.h"
+#include "findcmd.h"
+#include "redir.h"
+#include "trap.h"
+#include "pathexp.h"
+#include "hashcmd.h"
+
+#if defined (COND_COMMAND)
+#  include "test.h"
+#endif
+
+#include "builtins/common.h"
+#include "builtins/builtext.h" /* list of builtins */
+
+#include <glob/strmatch.h>
+#include <tilde/tilde.h>
+
+#if defined (BUFFERED_INPUT)
+#  include "input.h"
+#endif
+
+#if defined (ALIAS)
+#  include "alias.h"
+#endif
+
+#if defined (HISTORY)
+#  include "bashhist.h"
+#endif
+
+extern int posixly_correct;
+extern int breaking, continuing, loop_level;
+extern int expand_aliases;
+extern int parse_and_execute_level, running_trap;
+extern int command_string_index, line_number;
+extern int dot_found_in_search;
+extern int already_making_children;
+extern int tempenv_assign_error;
+extern char *the_printed_command, *shell_name;
+extern pid_t last_command_subst_pid;
+extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
+extern char **subshell_argv, **subshell_envp;
+extern int subshell_argc;
+#if 0
+extern char *glob_argv_flags;
+#endif
+
+extern int close __P((int));
+
+/* Static functions defined and used in this file. */
+static void close_pipes __P((int, int));
+static void do_piping __P((int, int));
+static void bind_lastarg __P((char *));
+static int shell_control_structure __P((enum command_type));
+static void cleanup_redirects __P((REDIRECT *));
+
+#if defined (JOB_CONTROL)
+static int restore_signal_mask __P((sigset_t *));
+#endif
+
+static void async_redirect_stdin __P((void));
+
+static int builtin_status __P((int));
+
+static int execute_for_command __P((FOR_COM *));
+#if defined (SELECT_COMMAND)
+static int print_index_and_element __P((int, int, WORD_LIST *));
+static void indent __P((int, int));
+static void print_select_list __P((WORD_LIST *, int, int, int));
+static char *select_query __P((WORD_LIST *, int, char *, int));
+static int execute_select_command __P((SELECT_COM *));
+#endif
+#if defined (DPAREN_ARITHMETIC)
+static int execute_arith_command __P((ARITH_COM *));
+#endif
+#if defined (COND_COMMAND)
+static int execute_cond_node __P((COND_COM *));
+static int execute_cond_command __P((COND_COM *));
+#endif
+#if defined (COMMAND_TIMING)
+static int mkfmt __P((char *, int, int, time_t, int));
+static void print_formatted_time __P((FILE *, char *,
+                                     time_t, int, time_t, int,
+                                     time_t, int, int));
+static int time_command __P((COMMAND *, int, int, int, struct fd_bitmap *));
+#endif
+#if defined (ARITH_FOR_COMMAND)
+static intmax_t eval_arith_for_expr __P((WORD_LIST *, int *));
+static int execute_arith_for_command __P((ARITH_FOR_COM *));
+#endif
+static int execute_case_command __P((CASE_COM *));
+static int execute_while_command __P((WHILE_COM *));
+static int execute_until_command __P((WHILE_COM *));
+static int execute_while_or_until __P((WHILE_COM *, int));
+static int execute_if_command __P((IF_COM *));
+static int execute_null_command __P((REDIRECT *, int, int, int));
+static void fix_assignment_words __P((WORD_LIST *));
+static int execute_simple_command __P((SIMPLE_COM *, int, int, int, struct fd_bitmap *));
+static int execute_builtin __P((sh_builtin_func_t *, WORD_LIST *, int, int));
+static int execute_function __P((SHELL_VAR *, WORD_LIST *, int, struct fd_bitmap *, int, int));
+static int execute_builtin_or_function __P((WORD_LIST *, sh_builtin_func_t *,
+                                           SHELL_VAR *,
+                                           REDIRECT *, struct fd_bitmap *, int));
+static void execute_subshell_builtin_or_function __P((WORD_LIST *, REDIRECT *,
+                                                     sh_builtin_func_t *,
+                                                     SHELL_VAR *,
+                                                     int, int, int,
+                                                     struct fd_bitmap *,
+                                                     int));
+static void execute_disk_command __P((WORD_LIST *, REDIRECT *, char *,
+                                     int, int, int, struct fd_bitmap *, int));
+
+static char *getinterp __P((char *, int, int *));
+static void initialize_subshell __P((void));
+static int execute_in_subshell __P((COMMAND *, int, int, int, struct fd_bitmap *));
+
+static int execute_pipeline __P((COMMAND *, int, int, int, struct fd_bitmap *));
+
+static int execute_connection __P((COMMAND *, int, int, int, struct fd_bitmap *));
+
+static int execute_intern_function __P((WORD_DESC *, COMMAND *));
+
+/* The line number that the currently executing function starts on. */
+static int function_line_number;
+
+/* Set to 1 if fd 0 was the subject of redirection to a subshell.  Global
+   so that reader_loop can set it to zero before executing a command. */
+int stdin_redir;
+
+/* The name of the command that is currently being executed.
+   `test' needs this, for example. */
+char *this_command_name;
+
+/* The printed representation of the currently-executing command (same as
+   the_printed_command), except when a trap is being executed.  Useful for
+   a debugger to know where exactly the program is currently executing. */
+char *the_printed_command_except_trap;
+
+static COMMAND *currently_executing_command;
+
+struct stat SB;                /* used for debugging */
+
+static int special_builtin_failed;
+
+/* XXX - set to 1 if we're running the DEBUG trap and we want to show the line
+   number containing the function name.  Used by executing_line_number to
+   report the correct line number.  Kind of a hack. */
+static int showing_function_line;
+
+static int line_number_for_err_trap;
+
+/* For catching RETURN in a function. */
+int return_catch_flag;
+int return_catch_value;
+procenv_t return_catch;
+
+/* The value returned by the last synchronous command. */
+int last_command_exit_value;
+
+/* Whether or not the last command (corresponding to last_command_exit_value)
+   was terminated by a signal, and, if so, which one. */
+int last_command_exit_signal;
+
+/* The list of redirections to perform which will undo the redirections
+   that I made in the shell. */
+REDIRECT *redirection_undo_list = (REDIRECT *)NULL;
+
+/* The list of redirections to perform which will undo the internal
+   redirections performed by the `exec' builtin.  These are redirections
+   that must be undone even when exec discards redirection_undo_list. */
+REDIRECT *exec_redirection_undo_list = (REDIRECT *)NULL;
+
+/* Non-zero if we have just forked and are currently running in a subshell
+   environment. */
+int subshell_environment;
+
+/* Count of nested subshells, like SHLVL.  Available via $BASH_SUBSHELL */
+int subshell_level = 0;
+
+/* Currently-executing shell function. */
+SHELL_VAR *this_shell_function;
+
+/* If non-zero, matches in case and [[ ... ]] are case-insensitive */
+int match_ignore_case = 0;
+
+struct fd_bitmap *current_fds_to_close = (struct fd_bitmap *)NULL;
+
+#define FD_BITMAP_DEFAULT_SIZE 32
+
+/* Functions to allocate and deallocate the structures used to pass
+   information from the shell to its children about file descriptors
+   to close. */
+struct fd_bitmap *
+new_fd_bitmap (size)
+     int size;
+{
+  struct fd_bitmap *ret;
+
+  ret = (struct fd_bitmap *)xmalloc (sizeof (struct fd_bitmap));
+
+  ret->size = size;
+
+  if (size)
+    {
+      ret->bitmap = (char *)xmalloc (size);
+      memset (ret->bitmap, '\0', size);
+    }
+  else
+    ret->bitmap = (char *)NULL;
+  return (ret);
+}
+
+void
+dispose_fd_bitmap (fdbp)
+     struct fd_bitmap *fdbp;
+{
+  FREE (fdbp->bitmap);
+  free (fdbp);
+}
+
+void
+close_fd_bitmap (fdbp)
+     struct fd_bitmap *fdbp;
+{
+  register int i;
+
+  if (fdbp)
+    {
+      for (i = 0; i < fdbp->size; i++)
+       if (fdbp->bitmap[i])
+         {
+           close (i);
+           fdbp->bitmap[i] = 0;
+         }
+    }
+}
+
+/* Return the line number of the currently executing command. */
+int
+executing_line_number ()
+{
+  if (executing && showing_function_line == 0 &&
+      (variable_context == 0 || interactive_shell == 0) &&
+      currently_executing_command)
+    {
+#if defined (COND_COMMAND)
+      if (currently_executing_command->type == cm_cond)
+       return currently_executing_command->value.Cond->line;
+#endif
+#if defined (DPAREN_ARITHMETIC)
+      else if (currently_executing_command->type == cm_arith)
+       return currently_executing_command->value.Arith->line;
+#endif
+#if defined (ARITH_FOR_COMMAND)
+      else if (currently_executing_command->type == cm_arith_for)
+       return currently_executing_command->value.ArithFor->line;
+#endif
+
+       return line_number;
+    }
+  else
+    return line_number;
+}
+
+/* Execute the command passed in COMMAND.  COMMAND is exactly what
+   read_command () places into GLOBAL_COMMAND.  See "command.h" for the
+   details of the command structure.
+
+   EXECUTION_SUCCESS or EXECUTION_FAILURE are the only possible
+   return values.  Executing a command with nothing in it returns
+   EXECUTION_SUCCESS. */
+int
+execute_command (command)
+     COMMAND *command;
+{
+  struct fd_bitmap *bitmap;
+  int result;
+
+  current_fds_to_close = (struct fd_bitmap *)NULL;
+  bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE);
+  begin_unwind_frame ("execute-command");
+  add_unwind_protect (dispose_fd_bitmap, (char *)bitmap);
+
+  /* Just do the command, but not asynchronously. */
+  result = execute_command_internal (command, 0, NO_PIPE, NO_PIPE, bitmap);
+
+  dispose_fd_bitmap (bitmap);
+  discard_unwind_frame ("execute-command");
+
+#if defined (PROCESS_SUBSTITUTION)
+  /* don't unlink fifos if we're in a shell function; wait until the function
+     returns. */
+  if (variable_context == 0)
+    unlink_fifo_list ();
+#endif /* PROCESS_SUBSTITUTION */
+
+  QUIT;
+  return (result);
+}
+
+/* Return 1 if TYPE is a shell control structure type. */
+static int
+shell_control_structure (type)
+     enum command_type type;
+{
+  switch (type)
+    {
+#if defined (ARITH_FOR_COMMAND)
+    case cm_arith_for:
+#endif
+#if defined (SELECT_COMMAND)
+    case cm_select:
+#endif
+#if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+#endif
+#if defined (COND_COMMAND)
+    case cm_cond:
+#endif
+    case cm_case:
+    case cm_while:
+    case cm_until:
+    case cm_if:
+    case cm_for:
+    case cm_group:
+    case cm_function_def:
+      return (1);
+
+    default:
+      return (0);
+    }
+}
+
+/* A function to use to unwind_protect the redirection undo list
+   for loops. */
+static void
+cleanup_redirects (list)
+     REDIRECT *list;
+{
+  do_redirections (list, RX_ACTIVE);
+  dispose_redirects (list);
+}
+
+#if 0
+/* Function to unwind_protect the redirections for functions and builtins. */
+static void
+cleanup_func_redirects (list)
+     REDIRECT *list;
+{
+  do_redirections (list, RX_ACTIVE);
+}
+#endif
+
+void
+dispose_exec_redirects ()
+{
+  if (exec_redirection_undo_list)
+    {
+      dispose_redirects (exec_redirection_undo_list);
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+}
+
+#if defined (JOB_CONTROL)
+/* A function to restore the signal mask to its proper value when the shell
+   is interrupted or errors occur while creating a pipeline. */
+static int
+restore_signal_mask (set)
+     sigset_t *set;
+{
+  return (sigprocmask (SIG_SETMASK, set, (sigset_t *)NULL));
+}
+#endif /* JOB_CONTROL */
+
+#ifdef DEBUG
+/* A debugging function that can be called from gdb, for instance. */
+void
+open_files ()
+{
+  register int i;
+  int f, fd_table_size;
+
+  fd_table_size = getdtablesize ();
+
+  fprintf (stderr, "pid %ld open files:", (long)getpid ());
+  for (i = 3; i < fd_table_size; i++)
+    {
+      if ((f = fcntl (i, F_GETFD, 0)) != -1)
+       fprintf (stderr, " %d (%s)", i, f ? "close" : "open");
+    }
+  fprintf (stderr, "\n");
+}
+#endif
+
+static void
+async_redirect_stdin ()
+{
+  int fd;
+
+  fd = open ("/dev/null", O_RDONLY);
+  if (fd > 0)
+    {
+      dup2 (fd, 0);
+      close (fd);
+    }
+  else if (fd < 0)
+    internal_error (_("cannot redirect standard input from /dev/null: %s"), strerror (errno));
+}
+
+#define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0)
+
+/* Execute the command passed in COMMAND, perhaps doing it asynchrounously.
+   COMMAND is exactly what read_command () places into GLOBAL_COMMAND.
+   ASYNCHROUNOUS, if non-zero, says to do this command in the background.
+   PIPE_IN and PIPE_OUT are file descriptors saying where input comes
+   from and where it goes.  They can have the value of NO_PIPE, which means
+   I/O is stdin/stdout.
+   FDS_TO_CLOSE is a list of file descriptors to close once the child has
+   been forked.  This list often contains the unusable sides of pipes, etc.
+
+   EXECUTION_SUCCESS or EXECUTION_FAILURE are the only possible
+   return values.  Executing a command with nothing in it returns
+   EXECUTION_SUCCESS. */
+int
+execute_command_internal (command, asynchronous, pipe_in, pipe_out,
+                         fds_to_close)
+     COMMAND *command;
+     int asynchronous;
+     int pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int exec_result, invert, ignore_return, was_error_trap;
+  REDIRECT *my_undo_list, *exec_undo_list;
+  volatile int last_pid;
+  volatile int save_line_number;
+
+  if (command == 0 || breaking || continuing || read_but_dont_execute)
+    return (EXECUTION_SUCCESS);
+
+  QUIT;
+  run_pending_traps ();
+
+#if 0
+  if (running_trap == 0)
+#endif
+    currently_executing_command = command;
+
+  invert = (command->flags & CMD_INVERT_RETURN) != 0;
+
+  /* If we're inverting the return value and `set -e' has been executed,
+     we don't want a failing command to inadvertently cause the shell
+     to exit. */
+  if (exit_immediately_on_error && invert)     /* XXX */
+    command->flags |= CMD_IGNORE_RETURN;       /* XXX */
+
+  exec_result = EXECUTION_SUCCESS;
+
+  /* If a command was being explicitly run in a subshell, or if it is
+     a shell control-structure, and it has a pipe, then we do the command
+     in a subshell. */
+  if (command->type == cm_subshell && (command->flags & CMD_NO_FORK))
+    return (execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close));
+
+  if (command->type == cm_subshell ||
+      (command->flags & (CMD_WANT_SUBSHELL|CMD_FORCE_SUBSHELL)) ||
+      (shell_control_structure (command->type) &&
+       (pipe_out != NO_PIPE || pipe_in != NO_PIPE || asynchronous)))
+    {
+      pid_t paren_pid;
+
+      /* Fork a subshell, turn off the subshell bit, turn off job
+        control and call execute_command () on the command again. */
+      paren_pid = make_child (savestring (make_command_string (command)),
+                             asynchronous);
+      if (paren_pid == 0)
+       exit (execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close));
+       /* NOTREACHED */
+      else
+       {
+         close_pipes (pipe_in, pipe_out);
+
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         unlink_fifo_list ();
+#endif
+         /* If we are part of a pipeline, and not the end of the pipeline,
+            then we should simply return and let the last command in the
+            pipe be waited for.  If we are not in a pipeline, or are the
+            last command in the pipeline, then we wait for the subshell
+            and return its exit status as usual. */
+         if (pipe_out != NO_PIPE)
+           return (EXECUTION_SUCCESS);
+
+         stop_pipeline (asynchronous, (COMMAND *)NULL);
+
+         if (asynchronous == 0)
+           {
+             last_command_exit_value = wait_for (paren_pid);
+
+             /* If we have to, invert the return value. */
+             if (invert)
+               exec_result = ((last_command_exit_value == EXECUTION_SUCCESS)
+                               ? EXECUTION_FAILURE
+                               : EXECUTION_SUCCESS);
+             else
+               exec_result = last_command_exit_value;
+
+             return (last_command_exit_value = exec_result);
+           }
+         else
+           {
+             DESCRIBE_PID (paren_pid);
+
+             run_pending_traps ();
+
+             return (EXECUTION_SUCCESS);
+           }
+       }
+    }
+
+#if defined (COMMAND_TIMING)
+  if (command->flags & CMD_TIME_PIPELINE)
+    {
+      if (asynchronous)
+       {
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result = execute_command_internal (command, 1, pipe_in, pipe_out, fds_to_close);
+       }
+      else
+       {
+         exec_result = time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+#if 0
+         if (running_trap == 0)
+#endif
+           currently_executing_command = (COMMAND *)NULL;
+       }
+      return (exec_result);
+    }
+#endif /* COMMAND_TIMING */
+
+  if (shell_control_structure (command->type) && command->redirects)
+    stdin_redir = stdin_redirects (command->redirects);
+
+  /* Handle WHILE FOR CASE etc. with redirections.  (Also '&' input
+     redirection.)  */
+  if (do_redirections (command->redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+      dispose_exec_redirects ();
+      return (EXECUTION_FAILURE);
+    }
+
+  if (redirection_undo_list)
+    {
+      my_undo_list = (REDIRECT *)copy_redirects (redirection_undo_list);
+      dispose_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    my_undo_list = (REDIRECT *)NULL;
+
+  if (exec_redirection_undo_list)
+    {
+      exec_undo_list = (REDIRECT *)copy_redirects (exec_redirection_undo_list);
+      dispose_redirects (exec_redirection_undo_list);
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    exec_undo_list = (REDIRECT *)NULL;
+
+  if (my_undo_list || exec_undo_list)
+    begin_unwind_frame ("loop_redirections");
+
+  if (my_undo_list)
+    add_unwind_protect ((Function *)cleanup_redirects, my_undo_list);
+
+  if (exec_undo_list)
+    add_unwind_protect ((Function *)dispose_redirects, exec_undo_list);
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  QUIT;
+
+  switch (command->type)
+    {
+    case cm_simple:
+      {
+       save_line_number = line_number;
+       /* We can't rely on variables retaining their values across a
+          call to execute_simple_command if a longjmp occurs as the
+          result of a `return' builtin.  This is true for sure with gcc. */
+#if defined (RECYCLES_PIDS)
+       last_made_pid = NO_PID;
+#endif
+       last_pid = last_made_pid;
+       was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+
+       if (ignore_return && command->value.Simple)
+         command->value.Simple->flags |= CMD_IGNORE_RETURN;
+       if (command->flags & CMD_STDIN_REDIR)
+         command->value.Simple->flags |= CMD_STDIN_REDIR;
+
+       line_number_for_err_trap = line_number = command->value.Simple->line;
+       exec_result =
+         execute_simple_command (command->value.Simple, pipe_in, pipe_out,
+                                 asynchronous, fds_to_close);
+       line_number = save_line_number;
+
+       /* The temporary environment should be used for only the simple
+          command immediately following its definition. */
+       dispose_used_env_vars ();
+
+#if (defined (ultrix) && defined (mips)) || defined (C_ALLOCA)
+       /* Reclaim memory allocated with alloca () on machines which
+          may be using the alloca emulation code. */
+       (void) alloca (0);
+#endif /* (ultrix && mips) || C_ALLOCA */
+
+       /* If we forked to do the command, then we must wait_for ()
+          the child. */
+
+       /* XXX - this is something to watch out for if there are problems
+          when the shell is compiled without job control. */
+       if (already_making_children && pipe_out == NO_PIPE &&
+           last_made_pid != last_pid)
+         {
+           stop_pipeline (asynchronous, (COMMAND *)NULL);
+
+           if (asynchronous)
+             {
+               DESCRIBE_PID (last_made_pid);
+             }
+           else
+#if !defined (JOB_CONTROL)
+             /* Do not wait for asynchronous processes started from
+                startup files. */
+           if (last_made_pid != last_asynchronous_pid)
+#endif
+           /* When executing a shell function that executes other
+              commands, this causes the last simple command in
+              the function to be waited for twice.  This also causes
+              subshells forked to execute builtin commands (e.g., in
+              pipelines) to be waited for twice. */
+             exec_result = wait_for (last_made_pid);
+         }
+      }
+
+      if (was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         run_error_trap ();
+       }
+
+      if (ignore_return == 0 && invert == 0 &&
+         ((posixly_correct && interactive == 0 && special_builtin_failed) ||
+          (exit_immediately_on_error && (exec_result != EXECUTION_SUCCESS))))
+       {
+         last_command_exit_value = exec_result;
+         run_pending_traps ();
+         jump_to_top_level (ERREXIT);
+       }
+
+      break;
+
+    case cm_for:
+      if (ignore_return)
+       command->value.For->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_for_command (command->value.For);
+      break;
+
+#if defined (ARITH_FOR_COMMAND)
+    case cm_arith_for:
+      if (ignore_return)
+       command->value.ArithFor->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_arith_for_command (command->value.ArithFor);
+      break;
+#endif
+
+#if defined (SELECT_COMMAND)
+    case cm_select:
+      if (ignore_return)
+       command->value.Select->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_select_command (command->value.Select);
+      break;
+#endif
+
+    case cm_case:
+      if (ignore_return)
+       command->value.Case->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_case_command (command->value.Case);
+      break;
+
+    case cm_while:
+      if (ignore_return)
+       command->value.While->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_while_command (command->value.While);
+      break;
+
+    case cm_until:
+      if (ignore_return)
+       command->value.While->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_until_command (command->value.While);
+      break;
+
+    case cm_if:
+      if (ignore_return)
+       command->value.If->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_if_command (command->value.If);
+      break;
+
+    case cm_group:
+
+      /* This code can be executed from either of two paths: an explicit
+        '{}' command, or via a function call.  If we are executed via a
+        function call, we have already taken care of the function being
+        executed in the background (down there in execute_simple_command ()),
+        and this command should *not* be marked as asynchronous.  If we
+        are executing a regular '{}' group command, and asynchronous == 1,
+        we must want to execute the whole command in the background, so we
+        need a subshell, and we want the stuff executed in that subshell
+        (this group command) to be executed in the foreground of that
+        subshell (i.e. there will not be *another* subshell forked).
+
+        What we do is to force a subshell if asynchronous, and then call
+        execute_command_internal again with asynchronous still set to 1,
+        but with the original group command, so the printed command will
+        look right.
+
+        The code above that handles forking off subshells will note that
+        both subshell and async are on, and turn off async in the child
+        after forking the subshell (but leave async set in the parent, so
+        the normal call to describe_pid is made).  This turning off
+        async is *crucial*; if it is not done, this will fall into an
+        infinite loop of executions through this spot in subshell after
+        subshell until the process limit is exhausted. */
+
+      if (asynchronous)
+       {
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result =
+           execute_command_internal (command, 1, pipe_in, pipe_out,
+                                     fds_to_close);
+       }
+      else
+       {
+         if (ignore_return && command->value.Group->command)
+           command->value.Group->command->flags |= CMD_IGNORE_RETURN;
+         exec_result =
+           execute_command_internal (command->value.Group->command,
+                                     asynchronous, pipe_in, pipe_out,
+                                     fds_to_close);
+       }
+      break;
+
+    case cm_connection:
+      exec_result = execute_connection (command, asynchronous,
+                                       pipe_in, pipe_out, fds_to_close);
+      break;
+
+#if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+      if (ignore_return)
+       command->value.Arith->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_arith_command (command->value.Arith);
+      break;
+#endif
+
+#if defined (COND_COMMAND)
+    case cm_cond:
+      if (ignore_return)
+       command->value.Cond->flags |= CMD_IGNORE_RETURN;
+      save_line_number = line_number;
+      exec_result = execute_cond_command (command->value.Cond);
+      line_number = save_line_number;
+      break;
+#endif
+    
+    case cm_function_def:
+      exec_result = execute_intern_function (command->value.Function_def->name,
+                                            command->value.Function_def->command);
+      break;
+
+    default:
+      command_error ("execute_command", CMDERR_BADTYPE, command->type, 0);
+    }
+
+  if (my_undo_list)
+    {
+      do_redirections (my_undo_list, RX_ACTIVE);
+      dispose_redirects (my_undo_list);
+    }
+
+  if (exec_undo_list)
+    dispose_redirects (exec_undo_list);
+
+  if (my_undo_list || exec_undo_list)
+    discard_unwind_frame ("loop_redirections");
+
+  /* Invert the return value if we have to */
+  if (invert)
+    exec_result = (exec_result == EXECUTION_SUCCESS)
+                   ? EXECUTION_FAILURE
+                   : EXECUTION_SUCCESS;
+
+#if defined (DPAREN_ARITHMETIC) || defined (COND_COMMAND)
+  /* This is where we set PIPESTATUS from the exit status of the appropriate
+     compound commands (the ones that look enough like simple commands to
+     cause confusion).  We might be able to optimize by not doing this if
+     subshell_environment != 0. */
+  switch (command->type)
+    {
+#  if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+#  endif
+#  if defined (COND_COMMAND)
+    case cm_cond:
+#  endif
+      set_pipestatus_from_exit (exec_result);
+      break;
+    }
+#endif
+
+  last_command_exit_value = exec_result;
+  run_pending_traps ();
+#if 0
+  if (running_trap == 0)
+#endif
+    currently_executing_command = (COMMAND *)NULL;
+  return (last_command_exit_value);
+}
+
+#if defined (COMMAND_TIMING)
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+extern struct timeval *difftimeval __P((struct timeval *, struct timeval *, struct timeval *));
+extern struct timeval *addtimeval __P((struct timeval *, struct timeval *, struct timeval *));
+extern int timeval_to_cpu __P((struct timeval *, struct timeval *, struct timeval *));
+#endif
+
+#define POSIX_TIMEFORMAT "real %2R\nuser %2U\nsys %2S"
+#define BASH_TIMEFORMAT  "\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS"
+
+static int precs[] = { 0, 100, 10, 1 };
+
+/* Expand one `%'-prefixed escape sequence from a time format string. */
+static int
+mkfmt (buf, prec, lng, sec, sec_fraction)
+     char *buf;
+     int prec, lng;
+     time_t sec;
+     int sec_fraction;
+{
+  time_t min;
+  char abuf[INT_STRLEN_BOUND(time_t) + 1];
+  int ind, aind;
+
+  ind = 0;
+  abuf[sizeof(abuf) - 1] = '\0';
+
+  /* If LNG is non-zero, we want to decompose SEC into minutes and seconds. */
+  if (lng)
+    {
+      min = sec / 60;
+      sec %= 60;
+      aind = sizeof(abuf) - 2;
+      do
+       abuf[aind--] = (min % 10) + '0';
+      while (min /= 10);
+      aind++;
+      while (abuf[aind])
+       buf[ind++] = abuf[aind++];
+      buf[ind++] = 'm';
+    }
+
+  /* Now add the seconds. */
+  aind = sizeof (abuf) - 2;
+  do
+    abuf[aind--] = (sec % 10) + '0';
+  while (sec /= 10);
+  aind++;
+  while (abuf[aind])
+    buf[ind++] = abuf[aind++];
+
+  /* We want to add a decimal point and PREC places after it if PREC is
+     nonzero.  PREC is not greater than 3.  SEC_FRACTION is between 0
+     and 999. */
+  if (prec != 0)
+    {
+      buf[ind++] = '.';
+      for (aind = 1; aind <= prec; aind++)
+       {
+         buf[ind++] = (sec_fraction / precs[aind]) + '0';
+         sec_fraction %= precs[aind];
+       }
+    }
+
+  if (lng)
+    buf[ind++] = 's';
+  buf[ind] = '\0';
+
+  return (ind);
+}
+
+/* Interpret the format string FORMAT, interpolating the following escape
+   sequences:
+               %[prec][l][RUS]
+
+   where the optional `prec' is a precision, meaning the number of
+   characters after the decimal point, the optional `l' means to format
+   using minutes and seconds (MMmNN[.FF]s), like the `times' builtin',
+   and the last character is one of
+   
+               R       number of seconds of `real' time
+               U       number of seconds of `user' time
+               S       number of seconds of `system' time
+
+   An occurrence of `%%' in the format string is translated to a `%'.  The
+   result is printed to FP, a pointer to a FILE.  The other variables are
+   the seconds and thousandths of a second of real, user, and system time,
+   resectively. */
+static void
+print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu)
+     FILE *fp;
+     char *format;
+     time_t rs;
+     int rsf;
+     time_t us;
+     int usf;
+     time_t ss;
+     int ssf, cpu;
+{
+  int prec, lng, len;
+  char *str, *s, ts[INT_STRLEN_BOUND (time_t) + sizeof ("mSS.FFFF")];
+  time_t sum;
+  int sum_frac;
+  int sindex, ssize;
+
+  len = strlen (format);
+  ssize = (len + 64) - (len % 64);
+  str = (char *)xmalloc (ssize);
+  sindex = 0;
+
+  for (s = format; *s; s++)
+    {
+      if (*s != '%' || s[1] == '\0')
+       {
+         RESIZE_MALLOCED_BUFFER (str, sindex, 1, ssize, 64);
+         str[sindex++] = *s;
+       }
+      else if (s[1] == '%')
+       {
+         s++;
+         RESIZE_MALLOCED_BUFFER (str, sindex, 1, ssize, 64);
+         str[sindex++] = *s;
+       }
+      else if (s[1] == 'P')
+       {
+         s++;
+         if (cpu > 10000)
+           cpu = 10000;
+         sum = cpu / 100;
+         sum_frac = (cpu % 100) * 10;
+         len = mkfmt (ts, 2, 0, sum, sum_frac);
+         RESIZE_MALLOCED_BUFFER (str, sindex, len, ssize, 64);
+         strcpy (str + sindex, ts);
+         sindex += len;
+       }
+      else
+       {
+         prec = 3;     /* default is three places past the decimal point. */
+         lng = 0;      /* default is to not use minutes or append `s' */
+         s++;
+         if (DIGIT (*s))               /* `precision' */
+           {
+             prec = *s++ - '0';
+             if (prec > 3) prec = 3;
+           }
+         if (*s == 'l')                /* `length extender' */
+           {
+             lng = 1;
+             s++;
+           }
+         if (*s == 'R' || *s == 'E')
+           len = mkfmt (ts, prec, lng, rs, rsf);
+         else if (*s == 'U')
+           len = mkfmt (ts, prec, lng, us, usf);
+         else if (*s == 'S')
+           len = mkfmt (ts, prec, lng, ss, ssf);
+         else
+           {
+             internal_error (_("TIMEFORMAT: `%c': invalid format character"), *s);
+             free (str);
+             return;
+           }
+         RESIZE_MALLOCED_BUFFER (str, sindex, len, ssize, 64);
+         strcpy (str + sindex, ts);
+         sindex += len;
+       }
+    }
+
+  str[sindex] = '\0';
+  fprintf (fp, "%s\n", str);
+  fflush (fp);
+
+  free (str);
+}
+
+static int
+time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int rv, posix_time, old_flags;
+  time_t rs, us, ss;
+  int rsf, usf, ssf;
+  int cpu;
+  char *time_format;
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+  struct timeval real, user, sys;
+  struct timeval before, after;
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  struct timezone dtz;                         /* posix doesn't define this */
+#  endif
+  struct rusage selfb, selfa, kidsb, kidsa;    /* a = after, b = before */
+#else
+#  if defined (HAVE_TIMES)
+  clock_t tbefore, tafter, real, user, sys;
+  struct tms before, after;
+#  endif
+#endif
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  gettimeofday (&before, &dtz);
+#  else
+  gettimeofday (&before, (void *)NULL);
+#  endif /* !HAVE_STRUCT_TIMEZONE */
+  getrusage (RUSAGE_SELF, &selfb);
+  getrusage (RUSAGE_CHILDREN, &kidsb);
+#else
+#  if defined (HAVE_TIMES)
+  tbefore = times (&before);
+#  endif
+#endif
+
+  posix_time = (command->flags & CMD_TIME_POSIX);
+
+  old_flags = command->flags;
+  command->flags &= ~(CMD_TIME_PIPELINE|CMD_TIME_POSIX);
+  rv = execute_command_internal (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+  command->flags = old_flags;
+
+  rs = us = ss = 0;
+  rsf = usf = ssf = cpu = 0;
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  gettimeofday (&after, &dtz);
+#  else
+  gettimeofday (&after, (void *)NULL);
+#  endif /* !HAVE_STRUCT_TIMEZONE */
+  getrusage (RUSAGE_SELF, &selfa);
+  getrusage (RUSAGE_CHILDREN, &kidsa);
+
+  difftimeval (&real, &before, &after);
+  timeval_to_secs (&real, &rs, &rsf);
+
+  addtimeval (&user, difftimeval(&after, &selfb.ru_utime, &selfa.ru_utime),
+                    difftimeval(&before, &kidsb.ru_utime, &kidsa.ru_utime));
+  timeval_to_secs (&user, &us, &usf);
+
+  addtimeval (&sys, difftimeval(&after, &selfb.ru_stime, &selfa.ru_stime),
+                   difftimeval(&before, &kidsb.ru_stime, &kidsa.ru_stime));
+  timeval_to_secs (&sys, &ss, &ssf);
+
+  cpu = timeval_to_cpu (&real, &user, &sys);
+#else
+#  if defined (HAVE_TIMES)
+  tafter = times (&after);
+
+  real = tafter - tbefore;
+  clock_t_to_secs (real, &rs, &rsf);
+
+  user = (after.tms_utime - before.tms_utime) + (after.tms_cutime - before.tms_cutime);
+  clock_t_to_secs (user, &us, &usf);
+
+  sys = (after.tms_stime - before.tms_stime) + (after.tms_cstime - before.tms_cstime);
+  clock_t_to_secs (sys, &ss, &ssf);
+
+  cpu = (real == 0) ? 0 : ((user + sys) * 10000) / real;
+
+#  else
+  rs = us = ss = 0;
+  rsf = usf = ssf = cpu = 0;
+#  endif
+#endif
+
+  if (posix_time)
+    time_format = POSIX_TIMEFORMAT;
+  else if ((time_format = get_string_value ("TIMEFORMAT")) == 0)
+    time_format = BASH_TIMEFORMAT;
+
+  if (time_format && *time_format)
+    print_formatted_time (stderr, time_format, rs, rsf, us, usf, ss, ssf, cpu);
+
+  return rv;
+}
+#endif /* COMMAND_TIMING */
+
+/* Execute a command that's supposed to be in a subshell.  This must be
+   called after make_child and we must be running in the child process.
+   The caller will return or exit() immediately with the value this returns. */
+static int
+execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous;
+     int pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int user_subshell, return_code, function_value, should_redir_stdin, invert;
+  int ois;
+  COMMAND *tcom;
+
+  USE_VAR(user_subshell);
+  USE_VAR(invert);
+  USE_VAR(tcom);
+  USE_VAR(asynchronous);
+
+  subshell_level++;
+  should_redir_stdin = (asynchronous && (command->flags & CMD_STDIN_REDIR) &&
+                         pipe_in == NO_PIPE &&
+                         stdin_redirects (command->redirects) == 0);
+
+  invert = (command->flags & CMD_INVERT_RETURN) != 0;
+  user_subshell = command->type == cm_subshell || ((command->flags & CMD_WANT_SUBSHELL) != 0);
+
+  command->flags &= ~(CMD_FORCE_SUBSHELL | CMD_WANT_SUBSHELL | CMD_INVERT_RETURN);
+
+  /* If a command is asynchronous in a subshell (like ( foo ) & or
+     the special case of an asynchronous GROUP command where the
+     the subshell bit is turned on down in case cm_group: below),
+     turn off `asynchronous', so that two subshells aren't spawned.
+     XXX - asynchronous used to be set to 0 in this block, but that
+     means that setup_async_signals was never run.  Now it's set to
+     0 after subshell_environment is set appropriately and setup_async_signals
+     is run.
+
+     This seems semantically correct to me.  For example,
+     ( foo ) & seems to say ``do the command `foo' in a subshell
+     environment, but don't wait for that subshell to finish'',
+     and "{ foo ; bar ; } &" seems to me to be like functions or
+     builtins in the background, which executed in a subshell
+     environment.  I just don't see the need to fork two subshells. */
+
+  /* Don't fork again, we are already in a subshell.  A `doubly
+     async' shell is not interactive, however. */
+  if (asynchronous)
+    {
+#if defined (JOB_CONTROL)
+      /* If a construct like ( exec xxx yyy ) & is given while job
+        control is active, we want to prevent exec from putting the
+        subshell back into the original process group, carefully
+        undoing all the work we just did in make_child. */
+      original_pgrp = -1;
+#endif /* JOB_CONTROL */
+      ois = interactive_shell;
+      interactive_shell = 0;
+      /* This test is to prevent alias expansion by interactive shells that
+        run `(command) &' but to allow scripts that have enabled alias
+        expansion with `shopt -s expand_alias' to continue to expand
+        aliases. */
+      if (ois != interactive_shell)
+       expand_aliases = 0;
+    }
+
+  /* Subshells are neither login nor interactive. */
+  login_shell = interactive = 0;
+
+  if (user_subshell)
+    subshell_environment = SUBSHELL_PAREN;
+  else
+    {
+      subshell_environment = 0;                        /* XXX */
+      if (asynchronous)
+       subshell_environment |= SUBSHELL_ASYNC;
+      if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+       subshell_environment |= SUBSHELL_PIPE;
+    }
+
+  reset_terminating_signals ();                /* in sig.c */
+  /* Cancel traps, in trap.c. */
+  restore_original_signals ();
+
+  /* Make sure restore_original_signals doesn't undo the work done by
+     make_child to ensure that asynchronous children are immune to SIGINT
+     and SIGQUIT.  Turn off asynchronous to make sure more subshells are
+     not spawned. */
+  if (asynchronous)
+    {
+      setup_async_signals ();
+      asynchronous = 0;
+    }
+
+#if defined (JOB_CONTROL)
+  set_sigchld_handler ();
+#endif /* JOB_CONTROL */
+
+  set_sigint_handler ();
+
+#if defined (JOB_CONTROL)
+  /* Delete all traces that there were any jobs running.  This is
+     only for subshells. */
+  without_job_control ();
+#endif /* JOB_CONTROL */
+
+  if (fds_to_close)
+    close_fd_bitmap (fds_to_close);
+
+  do_piping (pipe_in, pipe_out);
+
+  /* If this is a user subshell, set a flag if stdin was redirected.
+     This is used later to decide whether to redirect fd 0 to
+     /dev/null for async commands in the subshell.  This adds more
+     sh compatibility, but I'm not sure it's the right thing to do. */
+  if (user_subshell)
+    {
+      stdin_redir = stdin_redirects (command->redirects);
+      restore_default_signal (0);
+    }
+
+  /* If this is an asynchronous command (command &), we want to
+     redirect the standard input from /dev/null in the absence of
+     any specific redirection involving stdin. */
+  if (should_redir_stdin && stdin_redir == 0)
+    async_redirect_stdin ();
+
+  /* Do redirections, then dispose of them before recursive call. */
+  if (command->redirects)
+    {
+      if (do_redirections (command->redirects, RX_ACTIVE) != 0)
+       exit (invert ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+
+      dispose_redirects (command->redirects);
+      command->redirects = (REDIRECT *)NULL;
+    }
+
+  tcom = (command->type == cm_subshell) ? command->value.Subshell->command : command;
+
+  if (command->flags & CMD_TIME_PIPELINE)
+    tcom->flags |= CMD_TIME_PIPELINE;
+  if (command->flags & CMD_TIME_POSIX)
+    tcom->flags |= CMD_TIME_POSIX;
+  
+  /* Make sure the subshell inherits any CMD_IGNORE_RETURN flag. */
+  if ((command->flags & CMD_IGNORE_RETURN) && tcom != command)
+    tcom->flags |= CMD_IGNORE_RETURN;
+
+  /* If this is a simple command, tell execute_disk_command that it
+     might be able to get away without forking and simply exec.
+     This means things like ( sleep 10 ) will only cause one fork.
+     If we're timing the command or inverting its return value, however,
+     we cannot do this optimization. */
+  if (user_subshell && (tcom->type == cm_simple || tcom->type == cm_subshell) &&
+      ((tcom->flags & CMD_TIME_PIPELINE) == 0) &&
+      ((tcom->flags & CMD_INVERT_RETURN) == 0))
+    {
+      tcom->flags |= CMD_NO_FORK;
+      if (tcom->type == cm_simple)
+       tcom->value.Simple->flags |= CMD_NO_FORK;
+    }
+
+  invert = (tcom->flags & CMD_INVERT_RETURN) != 0;
+  tcom->flags &= ~CMD_INVERT_RETURN;
+
+  /* If we're inside a function while executing this subshell, we
+     need to handle a possible `return'. */
+  function_value = 0;
+  if (return_catch_flag)
+    function_value = setjmp (return_catch);
+
+  if (function_value)
+    return_code = return_catch_value;
+  else
+    return_code = execute_command_internal (tcom, asynchronous, NO_PIPE, NO_PIPE, fds_to_close);
+
+  /* If we are asked to, invert the return value. */
+  if (invert)
+    return_code = (return_code == EXECUTION_SUCCESS) ? EXECUTION_FAILURE
+                                                    : EXECUTION_SUCCESS;
+
+  /* If we were explicitly placed in a subshell with (), we need
+     to do the `shell cleanup' things, such as running traps[0]. */
+  if (user_subshell && signal_is_trapped (0))
+    {
+      last_command_exit_value = return_code;
+      return_code = run_exit_trap ();
+    }
+
+  subshell_level--;
+  return (return_code);
+  /* NOTREACHED */
+}
+
+static int
+execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int prev, fildes[2], new_bitmap_size, dummyfd, ignore_return, exec_result;
+  COMMAND *cmd;
+  struct fd_bitmap *fd_bitmap;
+
+#if defined (JOB_CONTROL)
+  sigset_t set, oset;
+  BLOCK_CHILD (set, oset);
+#endif /* JOB_CONTROL */
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  prev = pipe_in;
+  cmd = command;
+
+  while (cmd && cmd->type == cm_connection &&
+        cmd->value.Connection && cmd->value.Connection->connector == '|')
+    {
+      /* Make a pipeline between the two commands. */
+      if (pipe (fildes) < 0)
+       {
+         sys_error ("pipe error");
+#if defined (JOB_CONTROL)
+         terminate_current_pipeline ();
+         kill_current_pipeline ();
+         UNBLOCK_CHILD (oset);
+#endif /* JOB_CONTROL */
+         last_command_exit_value = EXECUTION_FAILURE;
+         /* The unwind-protects installed below will take care
+            of closing all of the open file descriptors. */
+         throw_to_top_level ();
+         return (EXECUTION_FAILURE);   /* XXX */
+       }
+
+      /* Here is a problem: with the new file close-on-exec
+        code, the read end of the pipe (fildes[0]) stays open
+        in the first process, so that process will never get a
+        SIGPIPE.  There is no way to signal the first process
+        that it should close fildes[0] after forking, so it
+        remains open.  No SIGPIPE is ever sent because there
+        is still a file descriptor open for reading connected
+        to the pipe.  We take care of that here.  This passes
+        around a bitmap of file descriptors that must be
+        closed after making a child process in execute_simple_command. */
+
+      /* We need fd_bitmap to be at least as big as fildes[0].
+        If fildes[0] is less than fds_to_close->size, then
+        use fds_to_close->size. */
+      new_bitmap_size = (fildes[0] < fds_to_close->size)
+                               ? fds_to_close->size
+                               : fildes[0] + 8;
+
+      fd_bitmap = new_fd_bitmap (new_bitmap_size);
+
+      /* Now copy the old information into the new bitmap. */
+      xbcopy ((char *)fds_to_close->bitmap, (char *)fd_bitmap->bitmap, fds_to_close->size);
+
+      /* And mark the pipe file descriptors to be closed. */
+      fd_bitmap->bitmap[fildes[0]] = 1;
+
+      /* In case there are pipe or out-of-processes errors, we
+        want all these file descriptors to be closed when
+        unwind-protects are run, and the storage used for the
+        bitmaps freed up. */
+      begin_unwind_frame ("pipe-file-descriptors");
+      add_unwind_protect (dispose_fd_bitmap, fd_bitmap);
+      add_unwind_protect (close_fd_bitmap, fd_bitmap);
+      if (prev >= 0)
+       add_unwind_protect (close, prev);
+      dummyfd = fildes[1];
+      add_unwind_protect (close, dummyfd);
+
+#if defined (JOB_CONTROL)
+      add_unwind_protect (restore_signal_mask, &oset);
+#endif /* JOB_CONTROL */
+
+      if (ignore_return && cmd->value.Connection->first)
+       cmd->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+      execute_command_internal (cmd->value.Connection->first, asynchronous,
+                               prev, fildes[1], fd_bitmap);
+
+      if (prev >= 0)
+       close (prev);
+
+      prev = fildes[0];
+      close (fildes[1]);
+
+      dispose_fd_bitmap (fd_bitmap);
+      discard_unwind_frame ("pipe-file-descriptors");
+
+      cmd = cmd->value.Connection->second;
+    }
+
+  /* Now execute the rightmost command in the pipeline.  */
+  if (ignore_return && cmd)
+    cmd->flags |= CMD_IGNORE_RETURN;
+  exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close);
+
+  if (prev >= 0)
+    close (prev);
+
+#if defined (JOB_CONTROL)
+  UNBLOCK_CHILD (oset);
+#endif
+
+  return (exec_result);
+}
+
+static int
+execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  REDIRECT *rp;
+  COMMAND *tc, *second;
+  int ignore_return, exec_result;
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  switch (command->value.Connection->connector)
+    {
+    /* Do the first command asynchronously. */
+    case '&':
+      tc = command->value.Connection->first;
+      if (tc == 0)
+       return (EXECUTION_SUCCESS);
+
+      rp = tc->redirects;
+
+      if (ignore_return)
+       tc->flags |= CMD_IGNORE_RETURN;
+      tc->flags |= CMD_AMPERSAND;
+
+      /* If this shell was compiled without job control support,
+        if we are currently in a subshell via `( xxx )', or if job
+        control is not active then the standard input for an
+        asynchronous command is forced to /dev/null. */
+#if defined (JOB_CONTROL)
+      if ((subshell_environment || !job_control) && !stdin_redir)
+#else
+      if (!stdin_redir)
+#endif /* JOB_CONTROL */
+       tc->flags |= CMD_STDIN_REDIR;
+
+      exec_result = execute_command_internal (tc, 1, pipe_in, pipe_out, fds_to_close);
+
+      if (tc->flags & CMD_STDIN_REDIR)
+       tc->flags &= ~CMD_STDIN_REDIR;
+
+      second = command->value.Connection->second;
+      if (second)
+       {
+         if (ignore_return)
+           second->flags |= CMD_IGNORE_RETURN;
+
+         exec_result = execute_command_internal (second, asynchronous, pipe_in, pipe_out, fds_to_close);
+       }
+
+      break;
+
+    /* Just call execute command on both sides. */
+    case ';':
+      if (ignore_return)
+       {
+         if (command->value.Connection->first)
+           command->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+         if (command->value.Connection->second)
+           command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
+       }
+      QUIT;
+      execute_command (command->value.Connection->first);
+      QUIT;
+      exec_result = execute_command_internal (command->value.Connection->second,
+                                     asynchronous, pipe_in, pipe_out,
+                                     fds_to_close);
+      break;
+
+    case '|':
+      exec_result = execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+      break;
+
+    case AND_AND:
+    case OR_OR:
+      if (asynchronous)
+       {
+         /* If we have something like `a && b &' or `a || b &', run the
+            && or || stuff in a subshell.  Force a subshell and just call
+            execute_command_internal again.  Leave asynchronous on
+            so that we get a report from the parent shell about the
+            background job. */
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result = execute_command_internal (command, 1, pipe_in, pipe_out, fds_to_close);
+         break;
+       }
+
+      /* Execute the first command.  If the result of that is successful
+        and the connector is AND_AND, or the result is not successful
+        and the connector is OR_OR, then execute the second command,
+        otherwise return. */
+
+      if (command->value.Connection->first)
+       command->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+
+      exec_result = execute_command (command->value.Connection->first);
+      QUIT;
+      if (((command->value.Connection->connector == AND_AND) &&
+          (exec_result == EXECUTION_SUCCESS)) ||
+         ((command->value.Connection->connector == OR_OR) &&
+          (exec_result != EXECUTION_SUCCESS)))
+       {
+         if (ignore_return && command->value.Connection->second)
+           command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
+
+         exec_result = execute_command (command->value.Connection->second);
+       }
+      break;
+
+    default:
+      command_error ("execute_connection", CMDERR_BADCONN, command->value.Connection->connector, 0);
+      jump_to_top_level (DISCARD);
+      exec_result = EXECUTION_FAILURE;
+    }
+
+  return exec_result;
+}
+
+#define REAP() \
+  do \
+    { \
+      if (!interactive_shell) \
+       reap_dead_jobs (); \
+    } \
+  while (0)
+
+/* Execute a FOR command.  The syntax is: FOR word_desc IN word_list;
+   DO command; DONE */
+static int
+execute_for_command (for_command)
+     FOR_COM *for_command;
+{
+  register WORD_LIST *releaser, *list;
+  SHELL_VAR *v;
+  char *identifier;
+  int retval, save_line_number;
+#if 0
+  SHELL_VAR *old_value = (SHELL_VAR *)NULL; /* Remember the old value of x. */
+#endif
+
+  save_line_number = line_number;
+  if (check_identifier (for_command->name, 1) == 0)
+    {
+      if (posixly_correct && interactive_shell == 0)
+       {
+         last_command_exit_value = EX_USAGE;
+         jump_to_top_level (ERREXIT);
+       }
+      return (EXECUTION_FAILURE);
+    }
+
+  loop_level++;
+  identifier = for_command->name->word;
+
+  list = releaser = expand_words_no_vars (for_command->map_list);
+
+  begin_unwind_frame ("for");
+  add_unwind_protect (dispose_words, releaser);
+
+#if 0
+  if (lexical_scoping)
+    {
+      old_value = copy_variable (find_variable (identifier));
+      if (old_value)
+       add_unwind_protect (dispose_variable, old_value);
+    }
+#endif
+
+  if (for_command->flags & CMD_IGNORE_RETURN)
+    for_command->action->flags |= CMD_IGNORE_RETURN;
+
+  for (retval = EXECUTION_SUCCESS; list; list = list->next)
+    {
+      QUIT;
+
+      line_number = for_command->line;
+
+      /* Remember what this command looks like, for debugger. */
+      command_string_index = 0;
+      print_for_command_head (for_command);
+
+      if (echo_command_at_execute)
+       xtrace_print_for_command_head (for_command);
+
+      /* Save this command unless it's a trap command and we're not running
+        a debug trap. */
+#if 0
+      if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+      if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
+
+      retval = run_debug_trap ();
+#if defined (DEBUGGER)
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+      if (debugging_mode && retval != EXECUTION_SUCCESS)
+        continue;
+#endif
+
+      this_command_name = (char *)NULL;
+      v = bind_variable (identifier, list->word->word, 0);
+      if (readonly_p (v) || noassign_p (v))
+       {
+         line_number = save_line_number;
+         if (readonly_p (v) && interactive_shell == 0 && posixly_correct)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             jump_to_top_level (FORCE_EOF);
+           }
+         else
+           {
+             dispose_words (releaser);
+             discard_unwind_frame ("for");
+             loop_level--;
+             return (EXECUTION_FAILURE);
+           }
+       }
+      retval = execute_command (for_command->action);
+      REAP ();
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+    }
+
+  loop_level--;
+  line_number = save_line_number;
+
+#if 0
+  if (lexical_scoping)
+    {
+      if (!old_value)
+        unbind_variable (identifier);
+      else
+       {
+         SHELL_VAR *new_value;
+
+         new_value = bind_variable (identifier, value_cell(old_value), 0);
+         new_value->attributes = old_value->attributes;
+         dispose_variable (old_value);
+       }
+    }
+#endif
+
+  dispose_words (releaser);
+  discard_unwind_frame ("for");
+  return (retval);
+}
+
+#if defined (ARITH_FOR_COMMAND)
+/* Execute an arithmetic for command.  The syntax is
+
+       for (( init ; step ; test ))
+       do
+               body
+       done
+
+   The execution should be exactly equivalent to
+
+       eval \(\( init \)\)
+       while eval \(\( test \)\) ; do
+               body;
+               eval \(\( step \)\)
+       done
+*/
+static intmax_t
+eval_arith_for_expr (l, okp)
+     WORD_LIST *l;
+     int *okp;
+{
+  WORD_LIST *new;
+  intmax_t expresult;
+  int r;
+
+  new = expand_words_no_vars (l);
+  if (new)
+    {
+      if (echo_command_at_execute)
+       xtrace_print_arith_cmd (new);
+      this_command_name = "((";                /* )) for expression error messages */
+
+      command_string_index = 0;
+      print_arith_command (new);
+      if (signal_in_progress (DEBUG_TRAP) == 0)
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
+
+      r = run_debug_trap ();
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+#if defined (DEBUGGER)
+      if (debugging_mode == 0 || r == EXECUTION_SUCCESS)
+       expresult = evalexp (new->word->word, okp);
+      else
+       {
+         expresult = 0;
+         if (okp)
+           *okp = 1;
+       }
+#else
+      expresult = evalexp (new->word->word, okp);
+#endif
+      dispose_words (new);
+    }
+  else
+    {
+      expresult = 0;
+      if (okp)
+       *okp = 1;
+    }
+  return (expresult);
+}
+
+static int
+execute_arith_for_command (arith_for_command)
+     ARITH_FOR_COM *arith_for_command;
+{
+  intmax_t expresult;
+  int expok, body_status, arith_lineno, save_lineno;
+
+  body_status = EXECUTION_SUCCESS;
+  loop_level++;
+  save_lineno = line_number;
+
+  if (arith_for_command->flags & CMD_IGNORE_RETURN)
+    arith_for_command->action->flags |= CMD_IGNORE_RETURN;
+
+  this_command_name = "((";    /* )) for expression error messages */
+
+  /* save the starting line number of the command so we can reset
+     line_number before executing each expression -- for $LINENO
+     and the DEBUG trap. */
+  line_number = arith_lineno = arith_for_command->line;
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  /* Evaluate the initialization expression. */
+  expresult = eval_arith_for_expr (arith_for_command->init, &expok);
+  if (expok == 0)
+    {
+      line_number = save_lineno;
+      return (EXECUTION_FAILURE);
+    }
+
+  while (1)
+    {
+      /* Evaluate the test expression. */
+      line_number = arith_lineno;
+      expresult = eval_arith_for_expr (arith_for_command->test, &expok);
+      line_number = save_lineno;
+
+      if (expok == 0)
+       {
+         body_status = EXECUTION_FAILURE;
+         break;
+       }
+      REAP ();
+      if (expresult == 0)
+       break;
+
+      /* Execute the body of the arithmetic for command. */
+      QUIT;
+      body_status = execute_command (arith_for_command->action);
+      QUIT;
+
+      /* Handle any `break' or `continue' commands executed by the body. */
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+
+      /* Evaluate the step expression. */
+      line_number = arith_lineno;
+      expresult = eval_arith_for_expr (arith_for_command->step, &expok);
+      line_number = save_lineno;
+
+      if (expok == 0)
+       {
+         body_status = EXECUTION_FAILURE;
+         break;
+       }
+    }
+
+  loop_level--;
+  line_number = save_lineno;
+
+  return (body_status);
+}
+#endif
+
+#if defined (SELECT_COMMAND)
+static int LINES, COLS, tabsize;
+
+#define RP_SPACE ") "
+#define RP_SPACE_LEN 2
+
+/* XXX - does not handle numbers > 1000000 at all. */
+#define NUMBER_LEN(s) \
+((s < 10) ? 1 \
+         : ((s < 100) ? 2 \
+                     : ((s < 1000) ? 3 \
+                                  : ((s < 10000) ? 4 \
+                                                : ((s < 100000) ? 5 \
+                                                               : 6)))))
+
+static int
+print_index_and_element (len, ind, list)
+      int len, ind;
+      WORD_LIST *list;
+{
+  register WORD_LIST *l;
+  register int i;
+
+  if (list == 0)
+    return (0);
+  for (i = ind, l = list; l && --i; l = l->next)
+    ;
+  fprintf (stderr, "%*d%s%s", len, ind, RP_SPACE, l->word->word);
+  return (STRLEN (l->word->word));
+}
+
+static void
+indent (from, to)
+     int from, to;
+{
+  while (from < to)
+    {
+      if ((to / tabsize) > (from / tabsize))
+       {
+         putc ('\t', stderr);
+         from += tabsize - from % tabsize;
+       }
+      else
+       {
+         putc (' ', stderr);
+         from++;
+       }
+    }
+}
+
+static void
+print_select_list (list, list_len, max_elem_len, indices_len)
+     WORD_LIST *list;
+     int list_len, max_elem_len, indices_len;
+{
+  int ind, row, elem_len, pos, cols, rows;
+  int first_column_indices_len, other_indices_len;
+
+  if (list == 0)
+    {
+      putc ('\n', stderr);
+      return;
+    }
+
+  cols = max_elem_len ? COLS / max_elem_len : 1;
+  if (cols == 0)
+    cols = 1;
+  rows = list_len ? list_len / cols + (list_len % cols != 0) : 1;
+  cols = list_len ? list_len / rows + (list_len % rows != 0) : 1;
+
+  if (rows == 1)
+    {
+      rows = cols;
+      cols = 1;
+    }
+
+  first_column_indices_len = NUMBER_LEN (rows);
+  other_indices_len = indices_len;
+
+  for (row = 0; row < rows; row++)
+    {
+      ind = row;
+      pos = 0;
+      while (1)
+       {
+         indices_len = (pos == 0) ? first_column_indices_len : other_indices_len;
+         elem_len = print_index_and_element (indices_len, ind + 1, list);
+         elem_len += indices_len + RP_SPACE_LEN;
+         ind += rows;
+         if (ind >= list_len)
+           break;
+         indent (pos + elem_len, pos + max_elem_len);
+         pos += max_elem_len;
+       }
+      putc ('\n', stderr);
+    }
+}
+
+/* Print the elements of LIST, one per line, preceded by an index from 1 to
+   LIST_LEN.  Then display PROMPT and wait for the user to enter a number.
+   If the number is between 1 and LIST_LEN, return that selection.  If EOF
+   is read, return a null string.  If a blank line is entered, or an invalid
+   number is entered, the loop is executed again. */
+static char *
+select_query (list, list_len, prompt, print_menu)
+     WORD_LIST *list;
+     int list_len;
+     char *prompt;
+     int print_menu;
+{
+  int max_elem_len, indices_len, len;
+  intmax_t reply;
+  WORD_LIST *l;
+  char *repl_string, *t;
+
+  t = get_string_value ("LINES");
+  LINES = (t && *t) ? atoi (t) : 24;
+  t = get_string_value ("COLUMNS");
+  COLS =  (t && *t) ? atoi (t) : 80;
+
+#if 0
+  t = get_string_value ("TABSIZE");
+  tabsize = (t && *t) ? atoi (t) : 8;
+  if (tabsize <= 0)
+    tabsize = 8;
+#else
+  tabsize = 8;
+#endif
+
+  max_elem_len = 0;
+  for (l = list; l; l = l->next)
+    {
+      len = STRLEN (l->word->word);
+      if (len > max_elem_len)
+       max_elem_len = len;
+    }
+  indices_len = NUMBER_LEN (list_len);
+  max_elem_len += indices_len + RP_SPACE_LEN + 2;
+
+  while (1)
+    {
+      if (print_menu)
+       print_select_list (list, list_len, max_elem_len, indices_len);
+      fprintf (stderr, "%s", prompt);
+      fflush (stderr);
+      QUIT;
+
+      if (read_builtin ((WORD_LIST *)NULL) == EXECUTION_FAILURE)
+       {
+         putchar ('\n');
+         return ((char *)NULL);
+       }
+      repl_string = get_string_value ("REPLY");
+      if (*repl_string == 0)
+       {
+         print_menu = 1;
+         continue;
+       }
+      if (legal_number (repl_string, &reply) == 0)
+       return "";
+      if (reply < 1 || reply > list_len)
+       return "";
+
+      for (l = list; l && --reply; l = l->next)
+       ;
+      return (l->word->word);
+    }
+}
+
+/* Execute a SELECT command.  The syntax is:
+   SELECT word IN list DO command_list DONE
+   Only `break' or `return' in command_list will terminate
+   the command. */
+static int
+execute_select_command (select_command)
+     SELECT_COM *select_command;
+{
+  WORD_LIST *releaser, *list;
+  SHELL_VAR *v;
+  char *identifier, *ps3_prompt, *selection;
+  int retval, list_len, show_menu, save_line_number;
+
+  if (check_identifier (select_command->name, 1) == 0)
+    return (EXECUTION_FAILURE);
+
+  save_line_number = line_number;
+  line_number = select_command->line;
+
+  command_string_index = 0;
+  print_select_command_head (select_command);
+
+  if (echo_command_at_execute)
+    xtrace_print_select_command_head (select_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    return (EXECUTION_SUCCESS);
+#endif
+
+  loop_level++;
+  identifier = select_command->name->word;
+
+  /* command and arithmetic substitution, parameter and variable expansion,
+     word splitting, pathname expansion, and quote removal. */
+  list = releaser = expand_words_no_vars (select_command->map_list);
+  list_len = list_length (list);
+  if (list == 0 || list_len == 0)
+    {
+      if (list)
+       dispose_words (list);
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+
+  begin_unwind_frame ("select");
+  add_unwind_protect (dispose_words, releaser);
+
+  if (select_command->flags & CMD_IGNORE_RETURN)
+    select_command->action->flags |= CMD_IGNORE_RETURN;
+
+  retval = EXECUTION_SUCCESS;
+  show_menu = 1;
+
+  while (1)
+    {
+      line_number = select_command->line;
+      ps3_prompt = get_string_value ("PS3");
+      if (ps3_prompt == 0)
+       ps3_prompt = "#? ";
+
+      QUIT;
+      selection = select_query (list, list_len, ps3_prompt, show_menu);
+      QUIT;
+      if (selection == 0)
+       {
+         /* select_query returns EXECUTION_FAILURE if the read builtin
+            fails, so we want to return failure in this case. */
+         retval = EXECUTION_FAILURE;
+         break;
+       }
+
+      v = bind_variable (identifier, selection, 0);
+      if (readonly_p (v) || noassign_p (v))
+       {
+         if (readonly_p (v) && interactive_shell == 0 && posixly_correct)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             jump_to_top_level (FORCE_EOF);
+           }
+         else
+           {
+             dispose_words (releaser);
+             discard_unwind_frame ("select");
+             loop_level--;
+             line_number = save_line_number;
+             return (EXECUTION_FAILURE);
+           }
+       }
+
+      retval = execute_command (select_command->action);
+
+      REAP ();
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+
+#if defined (KSH_COMPATIBLE_SELECT)
+      show_menu = 0;
+      selection = get_string_value ("REPLY");
+      if (selection && *selection == '\0')
+        show_menu = 1;
+#endif
+    }
+
+  loop_level--;
+  line_number = save_line_number;
+
+  dispose_words (releaser);
+  discard_unwind_frame ("select");
+  return (retval);
+}
+#endif /* SELECT_COMMAND */
+
+/* Execute a CASE command.  The syntax is: CASE word_desc IN pattern_list ESAC.
+   The pattern_list is a linked list of pattern clauses; each clause contains
+   some patterns to compare word_desc against, and an associated command to
+   execute. */
+static int
+execute_case_command (case_command)
+     CASE_COM *case_command;
+{
+  register WORD_LIST *list;
+  WORD_LIST *wlist, *es;
+  PATTERN_LIST *clauses;
+  char *word, *pattern;
+  int retval, match, ignore_return, save_line_number;
+
+  save_line_number = line_number;
+  line_number = case_command->line;
+
+  command_string_index = 0;
+  print_case_command_head (case_command);
+
+  if (echo_command_at_execute)
+    xtrace_print_case_command_head (case_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  retval = run_debug_trap();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+  wlist = expand_word_unsplit (case_command->word, 0);
+  word = wlist ? string_list (wlist) : savestring ("");
+  dispose_words (wlist);
+
+  retval = EXECUTION_SUCCESS;
+  ignore_return = case_command->flags & CMD_IGNORE_RETURN;
+
+  begin_unwind_frame ("case");
+  add_unwind_protect ((Function *)xfree, word);
+
+#define EXIT_CASE()  goto exit_case_command
+
+  for (clauses = case_command->clauses; clauses; clauses = clauses->next)
+    {
+      QUIT;
+      for (list = clauses->patterns; list; list = list->next)
+       {
+         es = expand_word_leave_quoted (list->word, 0);
+
+         if (es && es->word && es->word->word && *(es->word->word))
+           pattern = quote_string_for_globbing (es->word->word, QGLOB_CVTNULL);
+         else
+           {
+             pattern = (char *)xmalloc (1);
+             pattern[0] = '\0';
+           }
+
+         /* Since the pattern does not undergo quote removal (as per
+            Posix.2, section 3.9.4.3), the strmatch () call must be able
+            to recognize backslashes as escape characters. */
+         match = strmatch (pattern, word, FNMATCH_EXTFLAG|FNMATCH_IGNCASE) != FNM_NOMATCH;
+         free (pattern);
+
+         dispose_words (es);
+
+         if (match)
+           {
+             if (clauses->action && ignore_return)
+               clauses->action->flags |= CMD_IGNORE_RETURN;
+             retval = execute_command (clauses->action);
+             EXIT_CASE ();
+           }
+
+         QUIT;
+       }
+    }
+
+exit_case_command:
+  free (word);
+  discard_unwind_frame ("case");
+  line_number = save_line_number;
+  return (retval);
+}
+
+#define CMD_WHILE 0
+#define CMD_UNTIL 1
+
+/* The WHILE command.  Syntax: WHILE test DO action; DONE.
+   Repeatedly execute action while executing test produces
+   EXECUTION_SUCCESS. */
+static int
+execute_while_command (while_command)
+     WHILE_COM *while_command;
+{
+  return (execute_while_or_until (while_command, CMD_WHILE));
+}
+
+/* UNTIL is just like WHILE except that the test result is negated. */
+static int
+execute_until_command (while_command)
+     WHILE_COM *while_command;
+{
+  return (execute_while_or_until (while_command, CMD_UNTIL));
+}
+
+/* The body for both while and until.  The only difference between the
+   two is that the test value is treated differently.  TYPE is
+   CMD_WHILE or CMD_UNTIL.  The return value for both commands should
+   be EXECUTION_SUCCESS if no commands in the body are executed, and
+   the status of the last command executed in the body otherwise. */
+static int
+execute_while_or_until (while_command, type)
+     WHILE_COM *while_command;
+     int type;
+{
+  int return_value, body_status;
+
+  body_status = EXECUTION_SUCCESS;
+  loop_level++;
+
+  while_command->test->flags |= CMD_IGNORE_RETURN;
+  if (while_command->flags & CMD_IGNORE_RETURN)
+    while_command->action->flags |= CMD_IGNORE_RETURN;
+
+  while (1)
+    {
+      return_value = execute_command (while_command->test);
+      REAP ();
+
+      /* Need to handle `break' in the test when we would break out of the
+         loop.  The job control code will set `breaking' to loop_level
+         when a job in a loop is stopped with SIGTSTP.  If the stopped job
+         is in the loop test, `breaking' will not be reset unless we do
+         this, and the shell will cease to execute commands. */
+      if (type == CMD_WHILE && return_value != EXECUTION_SUCCESS)
+       {
+         if (breaking)
+           breaking--;
+         break;
+       }
+      if (type == CMD_UNTIL && return_value == EXECUTION_SUCCESS)
+       {
+         if (breaking)
+           breaking--;
+         break;
+       }
+
+      QUIT;
+      body_status = execute_command (while_command->action);
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+    }
+  loop_level--;
+
+  return (body_status);
+}
+
+/* IF test THEN command [ELSE command].
+   IF also allows ELIF in the place of ELSE IF, but
+   the parser makes *that* stupidity transparent. */
+static int
+execute_if_command (if_command)
+     IF_COM *if_command;
+{
+  int return_value, save_line_number;
+
+  save_line_number = line_number;
+  if_command->test->flags |= CMD_IGNORE_RETURN;
+  return_value = execute_command (if_command->test);
+  line_number = save_line_number;
+
+  if (return_value == EXECUTION_SUCCESS)
+    {
+      QUIT;
+
+      if (if_command->true_case && (if_command->flags & CMD_IGNORE_RETURN))
+       if_command->true_case->flags |= CMD_IGNORE_RETURN;
+
+      return (execute_command (if_command->true_case));
+    }
+  else
+    {
+      QUIT;
+
+      if (if_command->false_case && (if_command->flags & CMD_IGNORE_RETURN))
+       if_command->false_case->flags |= CMD_IGNORE_RETURN;
+
+      return (execute_command (if_command->false_case));
+    }
+}
+
+#if defined (DPAREN_ARITHMETIC)
+static int
+execute_arith_command (arith_command)
+     ARITH_COM *arith_command;
+{
+  int expok, save_line_number, retval;
+  intmax_t expresult;
+  WORD_LIST *new;
+  char *exp;
+
+  expresult = 0;
+
+  save_line_number = line_number;
+  this_command_name = "((";    /* )) */
+  line_number = arith_command->line;
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  command_string_index = 0;
+  print_arith_command (arith_command->exp);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  /* Run the debug trap before each arithmetic command, but do it after we
+     update the line number information and before we expand the various
+     words in the expression. */
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+  new = expand_words_no_vars (arith_command->exp);
+
+  /* If we're tracing, make a new word list with `((' at the front and `))'
+     at the back and print it. */
+  if (echo_command_at_execute)
+    xtrace_print_arith_cmd (new);
+
+  if (new)
+    {
+      exp = new->next ? string_list (new) : new->word->word;
+      expresult = evalexp (exp, &expok);
+      line_number = save_line_number;
+      if (exp != new->word->word)
+       free (exp);
+      dispose_words (new);
+    }
+  else
+    {
+      expresult = 0;
+      expok = 1;
+    }
+
+  if (expok == 0)
+    return (EXECUTION_FAILURE);
+
+  return (expresult == 0 ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+#endif /* DPAREN_ARITHMETIC */
+
+#if defined (COND_COMMAND)
+
+static char *nullstr = "";
+
+static int
+execute_cond_node (cond)
+     COND_COM *cond;
+{
+  int result, invert, patmatch, rmatch, mflags;
+  char *arg1, *arg2;
+
+  invert = (cond->flags & CMD_INVERT_RETURN);
+
+  if (cond->type == COND_EXPR)
+    result = execute_cond_node (cond->left);
+  else if (cond->type == COND_OR)
+    {
+      result = execute_cond_node (cond->left);
+      if (result != EXECUTION_SUCCESS)
+       result = execute_cond_node (cond->right);
+    }
+  else if (cond->type == COND_AND)
+    {
+      result = execute_cond_node (cond->left);
+      if (result == EXECUTION_SUCCESS)
+       result = execute_cond_node (cond->right);
+    }
+  else if (cond->type == COND_UNARY)
+    {
+      arg1 = cond_expand_word (cond->left->op, 0);
+      if (arg1 == 0)
+       arg1 = nullstr;
+      if (echo_command_at_execute)
+       xtrace_print_cond_term (cond->type, invert, cond->op, arg1, (char *)NULL);
+      result = unary_test (cond->op->word, arg1) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
+      if (arg1 != nullstr)
+       free (arg1);
+    }
+  else if (cond->type == COND_BINARY)
+    {
+      rmatch = 0;
+      patmatch = ((cond->op->word[1] == '=') && (cond->op->word[2] == '\0') &&
+                 (cond->op->word[0] == '!' || cond->op->word[0] == '=') ||
+                 (cond->op->word[0] == '=' && cond->op->word[1] == '\0'));
+#if defined (COND_REGEXP)
+      rmatch = (cond->op->word[0] == '=' && cond->op->word[1] == '~' &&
+               cond->op->word[2] == '\0');
+#endif
+
+      arg1 = cond_expand_word (cond->left->op, 0);
+      if (arg1 == 0)
+       arg1 = nullstr;
+      arg2 = cond_expand_word (cond->right->op, patmatch||rmatch);
+      if (arg2 == 0)
+       arg2 = nullstr;
+
+      if (echo_command_at_execute)
+       xtrace_print_cond_term (cond->type, invert, cond->op, arg1, arg2);
+
+#if defined (COND_REGEXP)
+      if (rmatch)
+       {
+         mflags = SHMAT_PWARN;
+#if defined (ARRAY_VARS)
+         mflags |= SHMAT_SUBEXP;
+#endif
+
+         result = sh_regmatch (arg1, arg2, mflags);
+       }
+      else
+#endif /* COND_REGEXP */
+       {
+         int oe;
+         oe = extended_glob;
+         extended_glob = 1;
+         result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP)
+                                 ? EXECUTION_SUCCESS
+                                 : EXECUTION_FAILURE;
+         extended_glob = oe;
+       }
+      if (arg1 != nullstr)
+       free (arg1);
+      if (arg2 != nullstr)
+       free (arg2);
+    }
+  else
+    {
+      command_error ("execute_cond_node", CMDERR_BADTYPE, cond->type, 0);
+      jump_to_top_level (DISCARD);
+      result = EXECUTION_FAILURE;
+    }
+
+  if (invert)
+    result = (result == EXECUTION_SUCCESS) ? EXECUTION_FAILURE : EXECUTION_SUCCESS;
+
+  return result;
+}
+
+static int
+execute_cond_command (cond_command)
+     COND_COM *cond_command;
+{
+  int retval, save_line_number;
+
+  retval = EXECUTION_SUCCESS;
+  save_line_number = line_number;
+
+  this_command_name = "[[";
+  line_number = cond_command->line;
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  command_string_index = 0;
+  print_cond_command (cond_command);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  /* Run the debug trap before each conditional command, but do it after we
+     update the line number information. */
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+#if 0
+  debug_print_cond_command (cond_command);
+#endif
+
+  last_command_exit_value = retval = execute_cond_node (cond_command);
+  line_number = save_line_number;
+  return (retval);
+}
+#endif /* COND_COMMAND */
+
+static void
+bind_lastarg (arg)
+     char *arg;
+{
+  SHELL_VAR *var;
+
+  if (arg == 0)
+    arg = "";
+  var = bind_variable ("_", arg, 0);
+  VUNSETATTR (var, att_exported);
+}
+
+/* Execute a null command.  Fork a subshell if the command uses pipes or is
+   to be run asynchronously.  This handles all the side effects that are
+   supposed to take place. */
+static int
+execute_null_command (redirects, pipe_in, pipe_out, async)
+     REDIRECT *redirects;
+     int pipe_in, pipe_out, async;
+{
+  int r;
+
+  if (pipe_in != NO_PIPE || pipe_out != NO_PIPE || async)
+    {
+      /* We have a null command, but we really want a subshell to take
+        care of it.  Just fork, do piping and redirections, and exit. */
+      if (make_child ((char *)NULL, async) == 0)
+       {
+         /* Cancel traps, in trap.c. */
+         restore_original_signals ();          /* XXX */
+
+         do_piping (pipe_in, pipe_out);
+
+         subshell_environment = 0;
+         if (async)
+           subshell_environment |= SUBSHELL_ASYNC;
+         if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+           subshell_environment |= SUBSHELL_PIPE;
+
+         if (do_redirections (redirects, RX_ACTIVE) == 0)
+           exit (EXECUTION_SUCCESS);
+         else
+           exit (EXECUTION_FAILURE);
+       }
+      else
+       {
+         close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         unlink_fifo_list ();
+#endif
+         return (EXECUTION_SUCCESS);
+       }
+    }
+  else
+    {
+      /* Even if there aren't any command names, pretend to do the
+        redirections that are specified.  The user expects the side
+        effects to take place.  If the redirections fail, then return
+        failure.  Otherwise, if a command substitution took place while
+        expanding the command or a redirection, return the value of that
+        substitution.  Otherwise, return EXECUTION_SUCCESS. */
+
+      r = do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE);
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+
+      if (r != 0)
+       return (EXECUTION_FAILURE);
+      else if (last_command_subst_pid != NO_PID)
+       return (last_command_exit_value);
+      else
+       return (EXECUTION_SUCCESS);
+    }
+}
+
+/* This is a hack to suppress word splitting for assignment statements
+   given as arguments to builtins with the ASSIGNMENT_BUILTIN flag set. */
+static void
+fix_assignment_words (words)
+     WORD_LIST *words;
+{
+  WORD_LIST *w;
+  struct builtin *b;
+
+  if (words == 0)
+    return;
+
+  b = 0;
+
+  for (w = words; w; w = w->next)
+    if (w->word->flags & W_ASSIGNMENT)
+      {
+       if (b == 0)
+         {
+           b = builtin_address_internal (words->word->word, 0);
+           if (b == 0 || (b->flags & ASSIGNMENT_BUILTIN) == 0)
+             return;
+           else if (b && (b->flags & ASSIGNMENT_BUILTIN))
+             words->word->flags |= W_ASSNBLTIN;
+         }
+       w->word->flags |= (W_NOSPLIT|W_NOGLOB|W_TILDEEXP|W_ASSIGNARG);
+      }
+}
+
+/* The meaty part of all the executions.  We have to start hacking the
+   real execution of commands here.  Fork a process, set things up,
+   execute the command. */
+static int
+execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
+     SIMPLE_COM *simple_command;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+{
+  WORD_LIST *words, *lastword;
+  char *command_line, *lastarg, *temp;
+  int first_word_quoted, result, builtin_is_special, already_forked, dofork;
+  pid_t old_last_async_pid;
+  sh_builtin_func_t *builtin;
+  SHELL_VAR *func;
+
+  result = EXECUTION_SUCCESS;
+  special_builtin_failed = builtin_is_special = 0;
+  command_line = (char *)0;
+
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  /* Remember what this command line looks like at invocation. */
+  command_string_index = 0;
+  print_simple_command (simple_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = the_printed_command ? savestring (the_printed_command) : (char *)0;
+    }
+
+  /* Run the debug trap before each simple command, but do it after we
+     update the line number information. */
+  result = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && result != EXECUTION_SUCCESS)
+    return (EXECUTION_SUCCESS);
+#endif
+
+  first_word_quoted =
+    simple_command->words ? (simple_command->words->word->flags & W_QUOTED): 0;
+
+  last_command_subst_pid = NO_PID;
+  old_last_async_pid = last_asynchronous_pid;
+
+  already_forked = dofork = 0;
+
+  /* If we're in a pipeline or run in the background, set DOFORK so we
+     make the child early, before word expansion.  This keeps assignment
+     statements from affecting the parent shell's environment when they
+     should not. */
+  dofork = pipe_in != NO_PIPE || pipe_out != NO_PIPE || async;
+
+  /* Something like `%2 &' should restart job 2 in the background, not cause
+     the shell to fork here. */
+  if (dofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE &&
+       simple_command->words && simple_command->words->word &&
+       simple_command->words->word->word &&
+       (simple_command->words->word->word[0] == '%'))
+    dofork = 0;
+
+  if (dofork)
+    {
+      /* Do this now, because execute_disk_command will do it anyway in the
+        vast majority of cases. */
+      maybe_make_export_env ();
+
+      /* Don't let a DEBUG trap overwrite the command string to be saved with
+        the process/job associated with this child. */
+      if (make_child (savestring (the_printed_command_except_trap), async) == 0)
+       {
+         already_forked = 1;
+         simple_command->flags |= CMD_NO_FORK;
+
+         subshell_environment = SUBSHELL_FORK;
+         if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+           subshell_environment |= SUBSHELL_PIPE;
+         if (async)
+           subshell_environment |= SUBSHELL_ASYNC;
+
+         /* We need to do this before piping to handle some really
+            pathological cases where one of the pipe file descriptors
+            is < 2. */
+         if (fds_to_close)
+           close_fd_bitmap (fds_to_close);
+
+         do_piping (pipe_in, pipe_out);
+         pipe_in = pipe_out = NO_PIPE;
+
+         last_asynchronous_pid = old_last_async_pid;
+       }
+      else
+       {
+         close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         unlink_fifo_list ();
+#endif
+         command_line = (char *)NULL;      /* don't free this. */
+         bind_lastarg ((char *)NULL);
+         return (result);
+       }
+    }
+
+  /* If we are re-running this as the result of executing the `command'
+     builtin, do not expand the command words a second time. */
+  if ((simple_command->flags & CMD_INHIBIT_EXPANSION) == 0)
+    {
+      current_fds_to_close = fds_to_close;
+      fix_assignment_words (simple_command->words);
+      words = expand_words (simple_command->words);
+      current_fds_to_close = (struct fd_bitmap *)NULL;
+    }
+  else
+    words = copy_word_list (simple_command->words);
+
+  /* It is possible for WORDS not to have anything left in it.
+     Perhaps all the words consisted of `$foo', and there was
+     no variable `$foo'. */
+  if (words == 0)
+    {
+      this_command_name = 0;
+      result = execute_null_command (simple_command->redirects,
+                                    pipe_in, pipe_out,
+                                    already_forked ? 0 : async);
+      if (already_forked)
+       exit (result);
+      else
+       {
+         bind_lastarg ((char *)NULL);
+         set_pipestatus_from_exit (result);
+         return (result);
+       }
+    }
+
+  lastarg = (char *)NULL;
+
+  begin_unwind_frame ("simple-command");
+
+  if (echo_command_at_execute)
+    xtrace_print_word_list (words, 1);
+
+  builtin = (sh_builtin_func_t *)NULL;
+  func = (SHELL_VAR *)NULL;
+  if ((simple_command->flags & CMD_NO_FUNCTIONS) == 0)
+    {
+      /* Posix.2 says special builtins are found before functions.  We
+        don't set builtin_is_special anywhere other than here, because
+        this path is followed only when the `command' builtin is *not*
+        being used, and we don't want to exit the shell if a special
+        builtin executed with `command builtin' fails.  `command' is not
+        a special builtin. */
+      if (posixly_correct)
+       {
+         builtin = find_special_builtin (words->word->word);
+         if (builtin)
+           builtin_is_special = 1;
+       }
+      if (builtin == 0)
+       func = find_function (words->word->word);
+    }
+
+  /* In POSIX mode, assignment errors in the temporary environment cause a
+     non-interactive shell to exit. */
+  if (builtin_is_special && interactive_shell == 0 && tempenv_assign_error)
+    {
+      last_command_exit_value = EXECUTION_FAILURE;
+      jump_to_top_level (ERREXIT);
+    }
+
+  add_unwind_protect (dispose_words, words);
+  QUIT;
+
+  /* Bind the last word in this command to "$_" after execution. */
+  for (lastword = words; lastword->next; lastword = lastword->next)
+    ;
+  lastarg = lastword->word->word;
+
+#if defined (JOB_CONTROL)
+  /* Is this command a job control related thing? */
+  if (words->word->word[0] == '%' && already_forked == 0)
+    {
+      this_command_name = async ? "bg" : "fg";
+      last_shell_builtin = this_shell_builtin;
+      this_shell_builtin = builtin_address (this_command_name);
+      result = (*this_shell_builtin) (words);
+      goto return_result;
+    }
+
+  /* One other possiblilty.  The user may want to resume an existing job.
+     If they do, find out whether this word is a candidate for a running
+     job. */
+  if (job_control && already_forked == 0 && async == 0 &&
+       !first_word_quoted &&
+       !words->next &&
+       words->word->word[0] &&
+       !simple_command->redirects &&
+       pipe_in == NO_PIPE &&
+       pipe_out == NO_PIPE &&
+       (temp = get_string_value ("auto_resume")))
+    {
+      int job, jflags, started_status;
+
+      jflags = JM_STOPPED|JM_FIRSTMATCH;
+      if (STREQ (temp, "exact"))
+       jflags |= JM_EXACT;
+      else if (STREQ (temp, "substring"))
+       jflags |= JM_SUBSTRING;
+      else
+       jflags |= JM_PREFIX;
+      job = get_job_by_name (words->word->word, jflags);
+      if (job != NO_JOB)
+       {
+         run_unwind_frame ("simple-command");
+         this_command_name = "fg";
+         last_shell_builtin = this_shell_builtin;
+         this_shell_builtin = builtin_address ("fg");
+
+         started_status = start_job (job, 1);
+         return ((started_status < 0) ? EXECUTION_FAILURE : started_status);
+       }
+    }
+#endif /* JOB_CONTROL */
+
+  /* Remember the name of this command globally. */
+  this_command_name = words->word->word;
+
+  QUIT;
+
+  /* This command could be a shell builtin or a user-defined function.
+     We have already found special builtins by this time, so we do not
+     set builtin_is_special.  If this is a function or builtin, and we
+     have pipes, then fork a subshell in here.  Otherwise, just execute
+     the command directly. */
+  if (func == 0 && builtin == 0)
+    builtin = find_shell_builtin (this_command_name);
+
+  last_shell_builtin = this_shell_builtin;
+  this_shell_builtin = builtin;
+
+  if (builtin || func)
+    {
+      if (already_forked)
+       {
+         /* reset_terminating_signals (); */   /* XXX */
+         /* Cancel traps, in trap.c. */
+         restore_original_signals ();
+
+         if (async)
+           {
+             if ((simple_command->flags & CMD_STDIN_REDIR) &&
+                   pipe_in == NO_PIPE &&
+                   (stdin_redirects (simple_command->redirects) == 0))
+               async_redirect_stdin ();
+             setup_async_signals ();
+           }
+
+         subshell_level++;
+         execute_subshell_builtin_or_function
+           (words, simple_command->redirects, builtin, func,
+            pipe_in, pipe_out, async, fds_to_close,
+            simple_command->flags);
+         subshell_level--;
+       }
+      else
+       {
+         result = execute_builtin_or_function
+           (words, builtin, func, simple_command->redirects, fds_to_close,
+            simple_command->flags);
+         if (builtin)
+           {
+             if (result > EX_SHERRBASE)
+               {
+                 result = builtin_status (result);
+                 if (builtin_is_special)
+                   special_builtin_failed = 1;
+               }
+             /* In POSIX mode, if there are assignment statements preceding
+                a special builtin, they persist after the builtin
+                completes. */
+             if (posixly_correct && builtin_is_special && temporary_env)
+               merge_temporary_env ();
+           }
+         else          /* function */
+           {
+             if (result == EX_USAGE)
+               result = EX_BADUSAGE;
+             else if (result > EX_SHERRBASE)
+               result = EXECUTION_FAILURE;
+           }
+
+         set_pipestatus_from_exit (result);
+
+         goto return_result;
+       }
+    }
+
+  if (command_line == 0)
+    command_line = savestring (the_printed_command_except_trap);
+
+  execute_disk_command (words, simple_command->redirects, command_line,
+                       pipe_in, pipe_out, async, fds_to_close,
+                       simple_command->flags);
+
+ return_result:
+  bind_lastarg (lastarg);
+  FREE (command_line);
+  dispose_words (words);
+  discard_unwind_frame ("simple-command");
+  this_command_name = (char *)NULL;    /* points to freed memory now */
+  return (result);
+}
+
+/* Translate the special builtin exit statuses.  We don't really need a
+   function for this; it's a placeholder for future work. */
+static int
+builtin_status (result)
+     int result;
+{
+  int r;
+
+  switch (result)
+    {
+    case EX_USAGE:
+      r = EX_BADUSAGE;
+      break;
+    case EX_REDIRFAIL:
+    case EX_BADSYNTAX:
+    case EX_BADASSIGN:
+    case EX_EXPFAIL:
+      r = EXECUTION_FAILURE;
+      break;
+    default:
+      r = EXECUTION_SUCCESS;
+      break;
+    }
+  return (r);
+}
+
+static int
+execute_builtin (builtin, words, flags, subshell)
+     sh_builtin_func_t *builtin;
+     WORD_LIST *words;
+     int flags, subshell;
+{
+  int old_e_flag, result, eval_unwind;
+  int isbltinenv;
+
+  old_e_flag = exit_immediately_on_error;
+  /* The eval builtin calls parse_and_execute, which does not know about
+     the setting of flags, and always calls the execution functions with
+     flags that will exit the shell on an error if -e is set.  If the
+     eval builtin is being called, and we're supposed to ignore the exit
+     value of the command, we turn the -e flag off ourselves, then
+     restore it when the command completes. */
+  if (subshell == 0 && builtin == eval_builtin && (flags & CMD_IGNORE_RETURN))
+    {
+      begin_unwind_frame ("eval_builtin");
+      unwind_protect_int (exit_immediately_on_error);
+      exit_immediately_on_error = 0;
+      eval_unwind = 1;
+    }
+  else
+    eval_unwind = 0;
+
+  /* The temporary environment for a builtin is supposed to apply to
+     all commands executed by that builtin.  Currently, this is a
+     problem only with the `unset', `source' and `eval' builtins. */
+
+  isbltinenv = (builtin == source_builtin || builtin == eval_builtin || builtin == unset_builtin);
+
+  if (isbltinenv)
+    {
+      if (subshell == 0)
+       begin_unwind_frame ("builtin_env");
+
+      if (temporary_env)
+       {
+         push_scope (VC_BLTNENV, temporary_env);
+         if (subshell == 0)
+           add_unwind_protect (pop_scope, (flags & CMD_COMMAND_BUILTIN) ? 0 : "1");
+          temporary_env = (HASH_TABLE *)NULL;    
+       }
+    }
+
+  /* `return' does a longjmp() back to a saved environment in execute_function.
+     If a variable assignment list preceded the command, and the shell is
+     running in POSIX mode, we need to merge that into the shell_variables
+     table, since `return' is a POSIX special builtin. */
+  if (posixly_correct && subshell == 0 && builtin == return_builtin && temporary_env)
+    {
+      begin_unwind_frame ("return_temp_env");
+      add_unwind_protect (merge_temporary_env, (char *)NULL);
+    }
+
+  result = ((*builtin) (words->next));
+
+  /* This shouldn't happen, but in case `return' comes back instead of
+     longjmp'ing, we need to unwind. */
+  if (posixly_correct && subshell == 0 && builtin == return_builtin && temporary_env)
+    discard_unwind_frame ("return_temp_env");
+
+  if (subshell == 0 && isbltinenv)
+    run_unwind_frame ("builtin_env");
+
+  if (eval_unwind)
+    {
+      exit_immediately_on_error += old_e_flag;
+      discard_unwind_frame ("eval_builtin");
+    }
+
+  return (result);
+}
+
+static int
+execute_function (var, words, flags, fds_to_close, async, subshell)
+     SHELL_VAR *var;
+     WORD_LIST *words;
+     int flags;
+     struct fd_bitmap *fds_to_close;
+     int async, subshell;
+{
+  int return_val, result;
+  COMMAND *tc, *fc, *save_current;
+  char *debug_trap, *error_trap, *return_trap;
+#if defined (ARRAY_VARS)
+  SHELL_VAR *funcname_v, *nfv, *bash_source_v, *bash_lineno_v;
+  ARRAY *funcname_a, *bash_source_a, *bash_lineno_a;
+#endif
+  FUNCTION_DEF *shell_fn;
+  char *sfile, *t;
+  static int funcnest = 0;
+
+  USE_VAR(fc);
+
+#if defined (ARRAY_VARS)
+  GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a);
+  GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a);
+  GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a);
+#endif
+
+  tc = (COMMAND *)copy_command (function_cell (var));
+  if (tc && (flags & CMD_IGNORE_RETURN))
+    tc->flags |= CMD_IGNORE_RETURN;
+
+  if (subshell == 0)
+    {
+      begin_unwind_frame ("function_calling");
+      push_context (var->name, subshell, temporary_env);
+      add_unwind_protect (pop_context, (char *)NULL);
+      unwind_protect_int (line_number);
+      unwind_protect_int (return_catch_flag);
+      unwind_protect_jmp_buf (return_catch);
+      add_unwind_protect (dispose_command, (char *)tc);
+      unwind_protect_pointer (this_shell_function);
+      unwind_protect_int (loop_level);
+    }
+  else
+    push_context (var->name, subshell, temporary_env); /* don't unwind-protect for subshells */
+
+  temporary_env = (HASH_TABLE *)NULL;
+
+  this_shell_function = var;
+  make_funcname_visible (1);
+
+  debug_trap = TRAP_STRING(DEBUG_TRAP);
+  error_trap = TRAP_STRING(ERROR_TRAP);
+  return_trap = TRAP_STRING(RETURN_TRAP);
+  
+  /* The order of the unwind protects for debug_trap, error_trap and
+     return_trap is important here!  unwind-protect commands are run
+     in reverse order of registration.  If this causes problems, take
+     out the xfree unwind-protect calls and live with the small memory leak. */
+
+  /* function_trace_mode != 0 means that all functions inherit the DEBUG trap.
+     if the function has the trace attribute set, it inherits the DEBUG trap */
+  if (debug_trap && ((trace_p (var) == 0) && function_trace_mode == 0))
+    {
+      if (subshell == 0)
+       {
+         debug_trap = savestring (debug_trap);
+         add_unwind_protect (xfree, debug_trap);
+         add_unwind_protect (set_debug_trap, debug_trap);
+       }
+      restore_default_signal (DEBUG_TRAP);
+    }
+
+  /* error_trace_mode != 0 means that functions inherit the ERR trap. */
+  if (error_trap && error_trace_mode == 0)
+    {
+      if (subshell == 0)
+       {
+         error_trap = savestring (error_trap);
+         add_unwind_protect (xfree, error_trap);
+         add_unwind_protect (set_error_trap, error_trap);
+       }
+      restore_default_signal (ERROR_TRAP);
+    }
+
+  /* Shell functions inherit the RETURN trap if function tracing is on
+     globally or on individually for this function. */
+#if 0
+  if (return_trap && ((trace_p (var) == 0) && function_trace_mode == 0))
+#else
+  if (return_trap && (signal_in_progress (DEBUG_TRAP) || ((trace_p (var) == 0) && function_trace_mode == 0)))
+#endif
+    {
+      if (subshell == 0)
+       {
+         return_trap = savestring (return_trap);
+         add_unwind_protect (xfree, return_trap);
+         add_unwind_protect (set_return_trap, return_trap);
+       }
+      restore_default_signal (RETURN_TRAP);
+    }
+  
+  funcnest++;
+#if defined (ARRAY_VARS)
+  /* This is quite similar to the code in shell.c and elsewhere. */
+  shell_fn = find_function_def (this_shell_function->name);
+  sfile = shell_fn ? shell_fn->source_file : "";
+  array_push (funcname_a, this_shell_function->name);
+
+  array_push (bash_source_a, sfile);
+  t = itos (executing_line_number ());
+  array_push (bash_lineno_a, t);
+  free (t);
+#endif
+
+  /* The temporary environment for a function is supposed to apply to
+     all commands executed within the function body. */
+
+  remember_args (words->next, 1);
+
+  /* Update BASH_ARGV and BASH_ARGC */
+  if (debugging_mode)
+    push_args (words->next);
+
+  /* Number of the line on which the function body starts. */
+  line_number = function_line_number = tc->line;
+
+#if defined (JOB_CONTROL)
+  if (subshell)
+    stop_pipeline (async, (COMMAND *)NULL);
+#endif
+
+  fc = tc;
+
+  return_catch_flag++;
+  return_val = setjmp (return_catch);
+
+  if (return_val)
+    {
+      result = return_catch_value;
+      /* Run the RETURN trap in the function's context. */
+      save_current = currently_executing_command;
+      run_return_trap ();
+      currently_executing_command = save_current;
+    }
+  else
+    {
+      /* Run the debug trap here so we can trap at the start of a function's
+        execution rather than the execution of the body's first command. */
+      showing_function_line = 1;
+      save_current = currently_executing_command;
+      result = run_debug_trap ();
+#if defined (DEBUGGER)
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+      if (debugging_mode == 0 || result == EXECUTION_SUCCESS)
+       {
+         showing_function_line = 0;
+         currently_executing_command = save_current;
+         result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close);
+
+         /* Run the RETURN trap in the function's context */
+         save_current = currently_executing_command;
+         run_return_trap ();
+         currently_executing_command = save_current;
+       }
+#else
+      result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close);
+
+      save_current = currently_executing_command;
+      run_return_trap ();
+      currently_executing_command = save_current;
+#endif
+      showing_function_line = 0;
+    }
+
+  /* Restore BASH_ARGC and BASH_ARGV */
+  if (debugging_mode)
+    pop_args ();
+
+  if (subshell == 0)
+    run_unwind_frame ("function_calling");
+
+  funcnest--;
+#if defined (ARRAY_VARS)
+  /* These two variables cannot be unset, and cannot be affected by the
+     function. */
+  array_pop (bash_source_a);
+  array_pop (bash_lineno_a);
+
+  /* FUNCNAME can be unset, and so can potentially be changed by the
+     function. */
+  GET_ARRAY_FROM_VAR ("FUNCNAME", nfv, funcname_a);
+  if (nfv == funcname_v)
+    array_pop (funcname_a);
+#endif
+  
+  if (variable_context == 0 || this_shell_function == 0)
+    make_funcname_visible (0);
+
+  return (result);
+}
+
+/* A convenience routine for use by other parts of the shell to execute
+   a particular shell function. */
+int
+execute_shell_function (var, words)
+     SHELL_VAR *var;
+     WORD_LIST *words;
+{
+  int ret;
+  struct fd_bitmap *bitmap;
+
+  bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE);
+  begin_unwind_frame ("execute-shell-function");
+  add_unwind_protect (dispose_fd_bitmap, (char *)bitmap);
+      
+  ret = execute_function (var, words, 0, bitmap, 0, 0);
+
+  dispose_fd_bitmap (bitmap);
+  discard_unwind_frame ("execute-shell-function");
+
+  return ret;
+}
+
+/* Execute a shell builtin or function in a subshell environment.  This
+   routine does not return; it only calls exit().  If BUILTIN is non-null,
+   it points to a function to call to execute a shell builtin; otherwise
+   VAR points at the body of a function to execute.  WORDS is the arguments
+   to the command, REDIRECTS specifies redirections to perform before the
+   command is executed. */
+static void
+execute_subshell_builtin_or_function (words, redirects, builtin, var,
+                                     pipe_in, pipe_out, async, fds_to_close,
+                                     flags)
+     WORD_LIST *words;
+     REDIRECT *redirects;
+     sh_builtin_func_t *builtin;
+     SHELL_VAR *var;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+     int flags;
+{
+  int result, r, funcvalue;
+#if defined (JOB_CONTROL)
+  int jobs_hack;
+
+  jobs_hack = (builtin == jobs_builtin) &&
+               ((subshell_environment & SUBSHELL_ASYNC) == 0 || pipe_out != NO_PIPE);
+#endif
+
+  /* A subshell is neither a login shell nor interactive. */
+  login_shell = interactive = 0;
+
+  if (async)
+    subshell_environment |= SUBSHELL_ASYNC;
+  if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+    subshell_environment |= SUBSHELL_PIPE;
+
+  maybe_make_export_env ();    /* XXX - is this needed? */
+
+#if defined (JOB_CONTROL)
+  /* Eradicate all traces of job control after we fork the subshell, so
+     all jobs begun by this subshell are in the same process group as
+     the shell itself. */
+
+  /* Allow the output of `jobs' to be piped. */
+  if (jobs_hack)
+    kill_current_pipeline ();
+  else
+    without_job_control ();
+
+  set_sigchld_handler ();
+#endif /* JOB_CONTROL */
+
+  set_sigint_handler ();
+
+  if (fds_to_close)
+    close_fd_bitmap (fds_to_close);
+
+  do_piping (pipe_in, pipe_out);
+
+  if (do_redirections (redirects, RX_ACTIVE) != 0)
+    exit (EXECUTION_FAILURE);
+
+  if (builtin)
+    {
+      /* Give builtins a place to jump back to on failure,
+        so we don't go back up to main(). */
+      result = setjmp (top_level);
+
+      /* Give the return builtin a place to jump to when executed in a subshell
+         or pipeline */
+      funcvalue = 0;
+      if (return_catch_flag && builtin == return_builtin)
+        funcvalue = setjmp (return_catch);
+
+      if (result == EXITPROG)
+       exit (last_command_exit_value);
+      else if (result)
+       exit (EXECUTION_FAILURE);
+      else if (funcvalue)
+       exit (return_catch_value);
+      else
+       {
+         r = execute_builtin (builtin, words, flags, 1);
+         if (r == EX_USAGE)
+           r = EX_BADUSAGE;
+         exit (r);
+       }
+    }
+  else
+    exit (execute_function (var, words, flags, fds_to_close, async, 1));
+}
+
+/* Execute a builtin or function in the current shell context.  If BUILTIN
+   is non-null, it is the builtin command to execute, otherwise VAR points
+   to the body of a function.  WORDS are the command's arguments, REDIRECTS
+   are the redirections to perform.  FDS_TO_CLOSE is the usual bitmap of
+   file descriptors to close.
+
+   If BUILTIN is exec_builtin, the redirections specified in REDIRECTS are
+   not undone before this function returns. */
+static int
+execute_builtin_or_function (words, builtin, var, redirects,
+                            fds_to_close, flags)
+     WORD_LIST *words;
+     sh_builtin_func_t *builtin;
+     SHELL_VAR *var;
+     REDIRECT *redirects;
+     struct fd_bitmap *fds_to_close;
+     int flags;
+{
+  int result;
+  REDIRECT *saved_undo_list;
+  sh_builtin_func_t *saved_this_shell_builtin;
+
+  if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+      dispose_exec_redirects ();
+      return (EX_REDIRFAIL);   /* was EXECUTION_FAILURE */
+    }
+
+  saved_this_shell_builtin = this_shell_builtin;
+  saved_undo_list = redirection_undo_list;
+
+  /* Calling the "exec" builtin changes redirections forever. */
+  if (builtin == exec_builtin)
+    {
+      dispose_redirects (saved_undo_list);
+      saved_undo_list = exec_redirection_undo_list;
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    dispose_exec_redirects ();
+
+  if (saved_undo_list)
+    {
+      begin_unwind_frame ("saved redirects");
+      add_unwind_protect (cleanup_redirects, (char *)saved_undo_list);
+    }
+
+  redirection_undo_list = (REDIRECT *)NULL;
+
+  if (builtin)
+    result = execute_builtin (builtin, words, flags, 0);
+  else
+    result = execute_function (var, words, flags, fds_to_close, 0, 0);
+
+  /* We do this before undoing the effects of any redirections. */
+  if (ferror (stdout))
+    clearerr (stdout);  
+
+  /* If we are executing the `command' builtin, but this_shell_builtin is
+     set to `exec_builtin', we know that we have something like
+     `command exec [redirection]', since otherwise `exec' would have
+     overwritten the shell and we wouldn't get here.  In this case, we
+     want to behave as if the `command' builtin had not been specified
+     and preserve the redirections. */
+  if (builtin == command_builtin && this_shell_builtin == exec_builtin)
+    {
+      if (saved_undo_list)
+       dispose_redirects (saved_undo_list);
+      redirection_undo_list = exec_redirection_undo_list;
+      saved_undo_list = exec_redirection_undo_list = (REDIRECT *)NULL;      
+      discard_unwind_frame ("saved_redirects");
+    }
+
+  if (saved_undo_list)
+    {
+      redirection_undo_list = saved_undo_list;
+      discard_unwind_frame ("saved redirects");
+    }
+
+  if (redirection_undo_list)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+    }
+
+  return (result);
+}
+
+void
+setup_async_signals ()
+{
+#if defined (__BEOS__)
+  set_signal_handler (SIGHUP, SIG_IGN);        /* they want csh-like behavior */
+#endif
+
+#if defined (JOB_CONTROL)
+  if (job_control == 0)
+#endif
+    {
+      set_signal_handler (SIGINT, SIG_IGN);
+      set_signal_ignored (SIGINT);
+      set_signal_handler (SIGQUIT, SIG_IGN);
+      set_signal_ignored (SIGQUIT);
+    }
+}
+
+/* Execute a simple command that is hopefully defined in a disk file
+   somewhere.
+
+   1) fork ()
+   2) connect pipes
+   3) look up the command
+   4) do redirections
+   5) execve ()
+   6) If the execve failed, see if the file has executable mode set.
+   If so, and it isn't a directory, then execute its contents as
+   a shell script.
+
+   Note that the filename hashing stuff has to take place up here,
+   in the parent.  This is probably why the Bourne style shells
+   don't handle it, since that would require them to go through
+   this gnarly hair, for no good reason.
+
+   NOTE: callers expect this to fork or exit(). */
+static void
+execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
+                     async, fds_to_close, cmdflags)
+     WORD_LIST *words;
+     REDIRECT *redirects;
+     char *command_line;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+     int cmdflags;
+{
+  char *pathname, *command, **args;
+  int nofork;
+  pid_t pid;
+
+  nofork = (cmdflags & CMD_NO_FORK);  /* Don't fork, just exec, if no pipes */
+  pathname = words->word->word;
+
+#if defined (RESTRICTED_SHELL)
+  command = (char *)NULL;
+  if (restricted && xstrchr (pathname, '/'))
+    {
+      internal_error (_("%s: restricted: cannot specify `/' in command names"),
+                   pathname);
+      last_command_exit_value = EXECUTION_FAILURE;
+
+      /* If we're not going to fork below, we must already be in a child
+         process or a context in which it's safe to call exit(2).  */
+      if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE)
+       exit (last_command_exit_value);
+      else
+       goto parent_return;
+    }
+#endif /* RESTRICTED_SHELL */
+
+  command = search_for_command (pathname);
+
+  if (command)
+    {
+      maybe_make_export_env ();
+      put_command_name_into_env (command);
+    }
+
+  /* We have to make the child before we check for the non-existence
+     of COMMAND, since we want the error messages to be redirected. */
+  /* If we can get away without forking and there are no pipes to deal with,
+     don't bother to fork, just directly exec the command. */
+  if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE)
+    pid = 0;
+  else
+    pid = make_child (savestring (command_line), async);
+
+  if (pid == 0)
+    {
+      int old_interactive;
+
+#if 0
+      /* This has been disabled for the time being. */
+#if !defined (ARG_MAX) || ARG_MAX >= 10240
+      if (posixly_correct == 0)
+       put_gnu_argv_flags_into_env ((long)getpid (), glob_argv_flags);
+#endif
+#endif
+
+      /* Cancel traps, in trap.c. */
+      restore_original_signals ();
+
+      /* restore_original_signals may have undone the work done
+        by make_child to ensure that SIGINT and SIGQUIT are ignored
+        in asynchronous children. */
+      if (async)
+       {
+         if ((cmdflags & CMD_STDIN_REDIR) &&
+               pipe_in == NO_PIPE &&
+               (stdin_redirects (redirects) == 0))
+           async_redirect_stdin ();
+         setup_async_signals ();
+       }
+
+      /* This functionality is now provided by close-on-exec of the
+        file descriptors manipulated by redirection and piping.
+        Some file descriptors still need to be closed in all children
+        because of the way bash does pipes; fds_to_close is a
+        bitmap of all such file descriptors. */
+      if (fds_to_close)
+       close_fd_bitmap (fds_to_close);
+
+      do_piping (pipe_in, pipe_out);
+
+      old_interactive = interactive;
+      if (async)
+       interactive = 0;
+
+      subshell_environment = SUBSHELL_FORK;
+
+      if (redirects && (do_redirections (redirects, RX_ACTIVE) != 0))
+       {
+#if defined (PROCESS_SUBSTITUTION)
+         /* Try to remove named pipes that may have been created as the
+            result of redirections. */
+         unlink_fifo_list ();
+#endif /* PROCESS_SUBSTITUTION */
+         exit (EXECUTION_FAILURE);
+       }
+
+      if (async)
+       interactive = old_interactive;
+
+      if (command == 0)
+       {
+         internal_error (_("%s: command not found"), pathname);
+         exit (EX_NOTFOUND);   /* Posix.2 says the exit status is 127 */
+       }
+
+      /* Execve expects the command name to be in args[0].  So we
+        leave it there, in the same format that the user used to
+        type it in. */
+      args = strvec_from_word_list (words, 0, 0, (int *)NULL);
+      exit (shell_execve (command, args, export_env));
+    }
+  else
+    {
+parent_return:
+      /* Make sure that the pipes are closed in the parent. */
+      close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+      unlink_fifo_list ();
+#endif
+      FREE (command);
+    }
+}
+
+/* CPP defines to decide whether a particular index into the #! line
+   corresponds to a valid interpreter name or argument character, or
+   whitespace.  The MSDOS define is to allow \r to be treated the same
+   as \n. */
+
+#if !defined (MSDOS)
+#  define STRINGCHAR(ind) \
+    (ind < sample_len && !whitespace (sample[ind]) && sample[ind] != '\n')
+#  define WHITECHAR(ind) \
+    (ind < sample_len && whitespace (sample[ind]))
+#else  /* MSDOS */
+#  define STRINGCHAR(ind) \
+    (ind < sample_len && !whitespace (sample[ind]) && sample[ind] != '\n' && sample[ind] != '\r')
+#  define WHITECHAR(ind) \
+    (ind < sample_len && whitespace (sample[ind]))
+#endif /* MSDOS */
+
+static char *
+getinterp (sample, sample_len, endp)
+     char *sample;
+     int sample_len, *endp;
+{
+  register int i;
+  char *execname;
+  int start;
+
+  /* Find the name of the interpreter to exec. */
+  for (i = 2; i < sample_len && whitespace (sample[i]); i++)
+    ;
+
+  for (start = i; STRINGCHAR(i); i++)
+    ;
+
+  execname = substring (sample, start, i);
+
+  if (endp)
+    *endp = i;
+  return execname;
+}
+
+#if !defined (HAVE_HASH_BANG_EXEC)
+/* If the operating system on which we're running does not handle
+   the #! executable format, then help out.  SAMPLE is the text read
+   from the file, SAMPLE_LEN characters.  COMMAND is the name of
+   the script; it and ARGS, the arguments given by the user, will
+   become arguments to the specified interpreter.  ENV is the environment
+   to pass to the interpreter.
+
+   The word immediately following the #! is the interpreter to execute.
+   A single argument to the interpreter is allowed. */
+
+static int
+execute_shell_script (sample, sample_len, command, args, env)
+     char *sample;
+     int sample_len;
+     char *command;
+     char **args, **env;
+{
+  char *execname, *firstarg;
+  int i, start, size_increment, larry;
+
+  /* Find the name of the interpreter to exec. */
+  execname = getinterp (sample, sample_len, &i);
+  size_increment = 1;
+
+  /* Now the argument, if any. */
+  for (firstarg = (char *)NULL, start = i; WHITECHAR(i); i++)
+    ;
+
+  /* If there is more text on the line, then it is an argument for the
+     interpreter. */
+
+  if (STRINGCHAR(i))  
+    {
+      for (start = i; STRINGCHAR(i); i++)
+       ;
+      firstarg = substring ((char *)sample, start, i);
+      size_increment = 2;
+    }
+
+  larry = strvec_len (args) + size_increment;
+  args = strvec_resize (args, larry + 1);
+
+  for (i = larry - 1; i; i--)
+    args[i] = args[i - size_increment];
+
+  args[0] = execname;
+  if (firstarg)
+    {
+      args[1] = firstarg;
+      args[2] = command;
+    }
+  else
+    args[1] = command;
+
+  args[larry] = (char *)NULL;
+
+  return (shell_execve (execname, args, env));
+}
+#undef STRINGCHAR
+#undef WHITECHAR
+
+#endif /* !HAVE_HASH_BANG_EXEC */
+
+static void
+initialize_subshell ()
+{
+#if defined (ALIAS)
+  /* Forget about any aliases that we knew of.  We are in a subshell. */
+  delete_all_aliases ();
+#endif /* ALIAS */
+
+#if defined (HISTORY)
+  /* Forget about the history lines we have read.  This is a non-interactive
+     subshell. */
+  history_lines_this_session = 0;
+#endif
+
+#if defined (JOB_CONTROL)
+  /* Forget about the way job control was working. We are in a subshell. */
+  without_job_control ();
+  set_sigchld_handler ();
+  init_job_stats ();
+#endif /* JOB_CONTROL */
+
+  /* Reset the values of the shell flags and options. */
+  reset_shell_flags ();
+  reset_shell_options ();
+  reset_shopt_options ();
+
+  /* Zero out builtin_env, since this could be a shell script run from a
+     sourced file with a temporary environment supplied to the `source/.'
+     builtin.  Such variables are not supposed to be exported (empirical
+     testing with sh and ksh).  Just throw it away; don't worry about a
+     memory leak. */
+  if (vc_isbltnenv (shell_variables))
+    shell_variables = shell_variables->down;
+
+  clear_unwind_protect_list (0);
+
+  /* We're no longer inside a shell function. */
+  variable_context = return_catch_flag = 0;
+
+  /* If we're not interactive, close the file descriptor from which we're
+     reading the current shell script. */
+  if (interactive_shell == 0)
+    unset_bash_input (0);
+}
+
+#if defined (HAVE_SETOSTYPE) && defined (_POSIX_SOURCE)
+#  define SETOSTYPE(x) __setostype(x)
+#else
+#  define SETOSTYPE(x)
+#endif
+
+#define READ_SAMPLE_BUF(file, buf, len) \
+  do \
+    { \
+      fd = open(file, O_RDONLY); \
+      if (fd >= 0) \
+       { \
+         len = read (fd, buf, 80); \
+         close (fd); \
+       } \
+      else \
+       len = -1; \
+    } \
+  while (0)
+      
+/* Call execve (), handling interpreting shell scripts, and handling
+   exec failures. */
+int
+shell_execve (command, args, env)
+     char *command;
+     char **args, **env;
+{
+  struct stat finfo;
+  int larray, i, fd;
+  char sample[80];
+  int sample_len;
+
+  SETOSTYPE (0);               /* Some systems use for USG/POSIX semantics */
+  execve (command, args, env);
+  i = errno;                   /* error from execve() */
+  SETOSTYPE (1);
+
+  /* If we get to this point, then start checking out the file.
+     Maybe it is something we can hack ourselves. */
+  if (i != ENOEXEC)
+    {
+      if ((stat (command, &finfo) == 0) && (S_ISDIR (finfo.st_mode)))
+       internal_error (_("%s: is a directory"), command);
+      else if (executable_file (command) == 0)
+       {
+         errno = i;
+         file_error (command);
+       }
+      /* errors not involving the path argument to execve. */
+      else if (i == E2BIG || i == ENOMEM)
+       {
+         errno = i;
+         file_error (command);
+       }
+      else
+       {
+         /* The file has the execute bits set, but the kernel refuses to
+            run it for some reason.  See why. */
+#if defined (HAVE_HASH_BANG_EXEC)
+         READ_SAMPLE_BUF (command, sample, sample_len);
+         if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
+           {
+             char *interp;
+             int ilen;
+
+             interp = getinterp (sample, sample_len, (int *)NULL);
+             ilen = strlen (interp);
+             errno = i;
+             if (interp[ilen - 1] == '\r')
+               {
+                 interp = xrealloc (interp, ilen + 2);
+                 interp[ilen - 1] = '^';
+                 interp[ilen] = 'M';
+                 interp[ilen + 1] = '\0';
+               }
+             sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : "");
+             FREE (interp);
+             return (EX_NOEXEC);
+           }
+#endif
+         errno = i;
+         file_error (command);
+       }
+      return ((i == ENOENT) ? EX_NOTFOUND : EX_NOEXEC);        /* XXX Posix.2 says that exit status is 126 */
+    }
+
+  /* This file is executable.
+     If it begins with #!, then help out people with losing operating
+     systems.  Otherwise, check to see if it is a binary file by seeing
+     if the contents of the first line (or up to 80 characters) are in the
+     ASCII set.  If it's a text file, execute the contents as shell commands,
+     otherwise return 126 (EX_BINARY_FILE). */
+  READ_SAMPLE_BUF (command, sample, sample_len);
+
+  if (sample_len == 0)
+    return (EXECUTION_SUCCESS);
+
+  /* Is this supposed to be an executable script?
+     If so, the format of the line is "#! interpreter [argument]".
+     A single argument is allowed.  The BSD kernel restricts
+     the length of the entire line to 32 characters (32 bytes
+     being the size of the BSD exec header), but we allow 80
+     characters. */
+  if (sample_len > 0)
+    {
+#if !defined (HAVE_HASH_BANG_EXEC)
+      if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
+       return (execute_shell_script (sample, sample_len, command, args, env));
+      else
+#endif
+      if (check_binary_file (sample, sample_len))
+       {
+         internal_error (_("%s: cannot execute binary file"), command);
+         return (EX_BINARY_FILE);
+       }
+    }
+
+  /* We have committed to attempting to execute the contents of this file
+     as shell commands. */
+
+  initialize_subshell ();
+
+  set_sigint_handler ();
+
+  /* Insert the name of this shell into the argument list. */
+  larray = strvec_len (args) + 1;
+  args = strvec_resize (args, larray + 1);
+
+  for (i = larray - 1; i; i--)
+    args[i] = args[i - 1];
+
+  args[0] = shell_name;
+  args[1] = command;
+  args[larray] = (char *)NULL;
+
+  if (args[0][0] == '-')
+    args[0]++;
+
+#if defined (RESTRICTED_SHELL)
+  if (restricted)
+    change_flag ('r', FLAG_OFF);
+#endif
+
+  if (subshell_argv)
+    {
+      /* Can't free subshell_argv[0]; that is shell_name. */
+      for (i = 1; i < subshell_argc; i++)
+       free (subshell_argv[i]);
+      free (subshell_argv);
+    }
+
+  dispose_command (currently_executing_command);       /* XXX */
+  currently_executing_command = (COMMAND *)NULL;
+
+  subshell_argc = larray;
+  subshell_argv = args;
+  subshell_envp = env;
+
+  unbind_args ();      /* remove the positional parameters */
+
+  longjmp (subshell_top_level, 1);
+  /*NOTREACHED*/
+}
+
+static int
+execute_intern_function (name, function)
+     WORD_DESC *name;
+     COMMAND *function;
+{
+  SHELL_VAR *var;
+
+  if (check_identifier (name, posixly_correct) == 0)
+    {
+      if (posixly_correct && interactive_shell == 0)
+       {
+         last_command_exit_value = EX_USAGE;
+         jump_to_top_level (ERREXIT);
+       }
+      return (EXECUTION_FAILURE);
+    }
+
+  var = find_function (name->word);
+  if (var && (readonly_p (var) || noassign_p (var)))
+    {
+      if (readonly_p (var))
+       internal_error (_("%s: readonly function"), var->name);
+      return (EXECUTION_FAILURE);
+    }
+
+  bind_function (name->word, function);
+  return (EXECUTION_SUCCESS);
+}
+
+#if defined (INCLUDE_UNUSED)
+#if defined (PROCESS_SUBSTITUTION)
+void
+close_all_files ()
+{
+  register int i, fd_table_size;
+
+  fd_table_size = getdtablesize ();
+  if (fd_table_size > 256)     /* clamp to a reasonable value */
+    fd_table_size = 256;
+
+  for (i = 3; i < fd_table_size; i++)
+    close (i);
+}
+#endif /* PROCESS_SUBSTITUTION */
+#endif
+
+static void
+close_pipes (in, out)
+     int in, out;
+{
+  if (in >= 0)
+    close (in);
+  if (out >= 0)
+    close (out);
+}
+
+static void
+dup_error (oldd, newd)
+     int oldd, newd;
+{
+  sys_error (_("cannot duplicate fd %d to fd %d"), oldd, newd);
+}
+
+/* Redirect input and output to be from and to the specified pipes.
+   NO_PIPE and REDIRECT_BOTH are handled correctly. */
+static void
+do_piping (pipe_in, pipe_out)
+     int pipe_in, pipe_out;
+{
+  if (pipe_in != NO_PIPE)
+    {
+      if (dup2 (pipe_in, 0) < 0)
+       dup_error (pipe_in, 0);
+      if (pipe_in > 0)
+       close (pipe_in);
+    }
+  if (pipe_out != NO_PIPE)
+    {
+      if (pipe_out != REDIRECT_BOTH)
+       {
+         if (dup2 (pipe_out, 1) < 0)
+           dup_error (pipe_out, 1);
+         if (pipe_out == 0 || pipe_out > 1)
+           close (pipe_out);
+       }
+      else
+       {
+         if (dup2 (1, 2) < 0)
+           dup_error (1, 2);
+       }
+    }
+}
diff --git a/expr.c b/expr.c
index 418f48d0ec8736701926a4c94320c3da9300df30..90446759d74b093685eb0749fea8c323a5a32ad2 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -1,6 +1,6 @@
 /* expr.c -- arithmetic expression evaluation. */
 
-/* Copyright (C) 1990-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1990-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -1194,7 +1194,7 @@ evalerror (msg)
   name = this_command_name;
   for (t = expression; whitespace (*t); t++)
     ;
-  internal_error ("%s%s%s: %s (error token is \"%s\")",
+  internal_error (_("%s%s%s: %s (error token is \"%s\")"),
                   name ? name : "", name ? ": " : "", t,
                   msg, (lasttp && *lasttp) ? lasttp : "");
   longjmp (evalbuf, 1);
@@ -1321,7 +1321,7 @@ main (argc, argv)
     {
       v = evalexp (argv[i], &expok);
       if (expok == 0)
-       fprintf (stderr, "%s: expression error\n", argv[i]);
+       fprintf (stderr, _("%s: expression error\n"), argv[i]);
       else
        printf ("'%s' -> %ld\n", argv[i], v);
     }
diff --git a/expr.c~ b/expr.c~
new file mode 100644 (file)
index 0000000..418f48d
--- /dev/null
+++ b/expr.c~
@@ -0,0 +1,1348 @@
+/* expr.c -- arithmetic expression evaluation. */
+
+/* Copyright (C) 1990-2004 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+/*
+ All arithmetic is done as intmax_t integers with no checking for overflow
+ (though division by 0 is caught and flagged as an error).
+
+ The following operators are handled, grouped into a set of levels in
+ order of decreasing precedence.
+
+       "id++", "id--"          [post-increment and post-decrement]
+       "++id", "--id"          [pre-increment and pre-decrement]
+       "-", "+"                [(unary operators)]
+       "!", "~"
+       "**"                    [(exponentiation)]
+       "*", "/", "%"
+       "+", "-"
+       "<<", ">>"
+       "<=", ">=", "<", ">"
+       "==", "!="
+       "&"
+       "^"
+       "|"
+       "&&"
+       "||"
+       "expr ? expr : expr"
+       "=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", "^=", "|="
+       ,                       [comma]
+
+ (Note that most of these operators have special meaning to bash, and an
+ entire expression should be quoted, e.g. "a=$a+1" or "a=a+1" to ensure
+ that it is passed intact to the evaluator when using `let'.  When using
+ the $[] or $(( )) forms, the text between the `[' and `]' or `((' and `))'
+ is treated as if in double quotes.)
+
+ Sub-expressions within parentheses have a precedence level greater than
+ all of the above levels and are evaluated first.  Within a single prece-
+ dence group, evaluation is left-to-right, except for the arithmetic
+ assignment operator (`='), which is evaluated right-to-left (as in C).
+
+ The expression evaluator returns the value of the expression (assignment
+ statements have as a value what is returned by the RHS).  The `let'
+ builtin, on the other hand, returns 0 if the last expression evaluates to
+ a non-zero, and 1 otherwise.
+
+ Implementation is a recursive-descent parser.
+
+ Chet Ramey
+ chet@ins.CWRU.Edu
+*/
+
+#include "config.h"
+
+#include <stdio.h>
+#include "bashansi.h"
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "chartypes.h"
+#include "bashintl.h"
+
+#include "shell.h"
+
+/* Because of the $((...)) construct, expressions may include newlines.
+   Here is a macro which accepts newlines, tabs and spaces as whitespace. */
+#define cr_whitespace(c) (whitespace(c) || ((c) == '\n'))
+
+/* Size be which the expression stack grows when neccessary. */
+#define EXPR_STACK_GROW_SIZE 10
+
+/* Maximum amount of recursion allowed.  This prevents a non-integer
+   variable such as "num=num+2" from infinitely adding to itself when
+   "let num=num+2" is given. */
+#define MAX_EXPR_RECURSION_LEVEL 1024
+
+/* The Tokens.  Singing "The Lion Sleeps Tonight". */
+
+#define EQEQ   1       /* "==" */
+#define NEQ    2       /* "!=" */
+#define LEQ    3       /* "<=" */
+#define GEQ    4       /* ">=" */
+#define STR    5       /* string */
+#define NUM    6       /* number */
+#define LAND   7       /* "&&" Logical AND */
+#define LOR    8       /* "||" Logical OR */
+#define LSH    9       /* "<<" Left SHift */
+#define RSH    10      /* ">>" Right SHift */
+#define OP_ASSIGN 11   /* op= expassign as in Posix.2 */
+#define COND   12      /* exp1 ? exp2 : exp3 */
+#define POWER  13      /* exp1**exp2 */
+#define PREINC 14      /* ++var */
+#define PREDEC 15      /* --var */
+#define POSTINC        16      /* var++ */
+#define POSTDEC        17      /* var-- */
+#define EQ     '='
+#define GT     '>'
+#define LT     '<'
+#define PLUS   '+'
+#define MINUS  '-'
+#define MUL    '*'
+#define DIV    '/'
+#define MOD    '%'
+#define NOT    '!'
+#define LPAR   '('
+#define RPAR   ')'
+#define BAND   '&'     /* Bitwise AND */
+#define BOR    '|'     /* Bitwise OR. */
+#define BXOR   '^'     /* Bitwise eXclusive OR. */
+#define BNOT   '~'     /* Bitwise NOT; Two's complement. */
+#define QUES   '?'
+#define COL    ':'
+#define COMMA  ','
+
+/* This should be the function corresponding to the operator with the
+   highest precedence. */
+#define EXP_HIGHEST    expcomma
+
+static char    *expression;    /* The current expression */
+static char    *tp;            /* token lexical position */
+static char    *lasttp;        /* pointer to last token position */
+static int     curtok;         /* the current token */
+static int     lasttok;        /* the previous token */
+static int     assigntok;      /* the OP in OP= */
+static char    *tokstr;        /* current token string */
+static intmax_t        tokval;         /* current token value */
+static int     noeval;         /* set to 1 if no assignment to be done */
+static procenv_t evalbuf;
+
+static int     _is_arithop __P((int));
+static void    readtok __P((void));    /* lexical analyzer */
+
+static intmax_t        expr_streval __P((char *, int));
+static intmax_t        strlong __P((char *));
+static void    evalerror __P((char *));
+
+static void    pushexp __P((void));
+static void    popexp __P((void));
+static void    expr_unwind __P((void));
+static void    expr_bind_variable __P((char *, char *));
+
+static intmax_t subexpr __P((char *));
+
+static intmax_t        expcomma __P((void));
+static intmax_t expassign __P((void));
+static intmax_t        expcond __P((void));
+static intmax_t explor __P((void));
+static intmax_t expland __P((void));
+static intmax_t        expbor __P((void));
+static intmax_t        expbxor __P((void));
+static intmax_t        expband __P((void));
+static intmax_t exp5 __P((void));
+static intmax_t exp4 __P((void));
+static intmax_t expshift __P((void));
+static intmax_t exp3 __P((void));
+static intmax_t exp2 __P((void));
+static intmax_t        exppower __P((void));
+static intmax_t exp1 __P((void));
+static intmax_t exp0 __P((void));
+
+/* A structure defining a single expression context. */
+typedef struct {
+  int curtok, lasttok;
+  char *expression, *tp, *lasttp;
+  intmax_t tokval;
+  char *tokstr;
+  int noeval;
+} EXPR_CONTEXT;
+
+#ifdef INCLUDE_UNUSED
+/* Not used yet. */
+typedef struct {
+  char *tokstr;
+  intmax_t tokval;
+} LVALUE;
+#endif
+
+/* Global var which contains the stack of expression contexts. */
+static EXPR_CONTEXT **expr_stack;
+static int expr_depth;            /* Location in the stack. */
+static int expr_stack_size;       /* Number of slots already allocated. */
+
+extern char *this_command_name;
+extern int unbound_vars_is_error;
+
+#if defined (ARRAY_VARS)
+extern char *bash_badsub_errmsg;
+#endif
+
+#define SAVETOK(X) \
+  do { \
+    (X)->curtok = curtok; \
+    (X)->lasttok = lasttok; \
+    (X)->tp = tp; \
+    (X)->lasttp = lasttp; \
+    (X)->tokval = tokval; \
+    (X)->tokstr = tokstr; \
+    (X)->noeval = noeval; \
+  } while (0)
+
+#define RESTORETOK(X) \
+  do { \
+    curtok = (X)->curtok; \
+    lasttok = (X)->lasttok; \
+    tp = (X)->tp; \
+    lasttp = (X)->lasttp; \
+    tokval = (X)->tokval; \
+    tokstr = (X)->tokstr; \
+    noeval = (X)->noeval; \
+  } while (0)
+
+/* Push and save away the contents of the globals describing the
+   current expression context. */
+static void
+pushexp ()
+{
+  EXPR_CONTEXT *context;
+
+  if (expr_depth >= MAX_EXPR_RECURSION_LEVEL)
+    evalerror (_("expression recursion level exceeded"));
+
+  if (expr_depth >= expr_stack_size)
+    {
+      expr_stack_size += EXPR_STACK_GROW_SIZE;
+      expr_stack = (EXPR_CONTEXT **)xrealloc (expr_stack, expr_stack_size * sizeof (EXPR_CONTEXT *));
+    }
+
+  context = (EXPR_CONTEXT *)xmalloc (sizeof (EXPR_CONTEXT));
+
+  context->expression = expression;
+  SAVETOK(context);
+
+  expr_stack[expr_depth++] = context;
+}
+
+/* Pop the the contents of the expression context stack into the
+   globals describing the current expression context. */
+static void
+popexp ()
+{
+  EXPR_CONTEXT *context;
+
+  if (expr_depth == 0)
+    evalerror (_("recursion stack underflow"));
+
+  context = expr_stack[--expr_depth];
+
+  expression = context->expression;
+  RESTORETOK (context);
+
+  free (context);
+}
+
+static void
+expr_unwind ()
+{
+  while (--expr_depth > 0)
+    {
+      if (expr_stack[expr_depth]->tokstr)
+       free (expr_stack[expr_depth]->tokstr);
+
+      if (expr_stack[expr_depth]->expression)
+       free (expr_stack[expr_depth]->expression);
+
+      free (expr_stack[expr_depth]);
+    }
+  free (expr_stack[expr_depth]);       /* free the allocated EXPR_CONTEXT */
+}
+
+static void
+expr_bind_variable (lhs, rhs)
+     char *lhs, *rhs;
+{
+  (void)bind_int_variable (lhs, rhs);
+  stupidly_hack_special_variables (lhs);
+}
+
+/* Evaluate EXPR, and return the arithmetic result.  If VALIDP is
+   non-null, a zero is stored into the location to which it points
+   if the expression is invalid, non-zero otherwise.  If a non-zero
+   value is returned in *VALIDP, the return value of evalexp() may
+   be used.
+
+   The `while' loop after the longjmp is caught relies on the above
+   implementation of pushexp and popexp leaving in expr_stack[0] the
+   values that the variables had when the program started.  That is,
+   the first things saved are the initial values of the variables that
+   were assigned at program startup or by the compiler.  Therefore, it is
+   safe to let the loop terminate when expr_depth == 0, without freeing up
+   any of the expr_depth[0] stuff. */
+intmax_t
+evalexp (expr, validp)
+     char *expr;
+     int *validp;
+{
+  intmax_t val;
+  int c;
+  procenv_t oevalbuf;
+
+  val = 0;
+
+  FASTCOPY (evalbuf, oevalbuf, sizeof (evalbuf));
+
+  c = setjmp (evalbuf);
+
+  if (c)
+    {
+      FREE (tokstr);
+      FREE (expression);
+      tokstr = expression = (char *)NULL;
+
+      expr_unwind ();
+
+      if (validp)
+       *validp = 0;
+      return (0);
+    }
+
+  val = subexpr (expr);
+
+  if (validp)
+    *validp = 1;
+
+  FASTCOPY (oevalbuf, evalbuf, sizeof (evalbuf));
+
+  return (val);
+}
+
+static intmax_t
+subexpr (expr)
+     char *expr;
+{
+  intmax_t val;
+  char *p;
+
+  for (p = expr; p && *p && cr_whitespace (*p); p++)
+    ;
+
+  if (p == NULL || *p == '\0')
+    return (0);
+
+  pushexp ();
+  curtok = lasttok = 0;
+  expression = savestring (expr);
+  tp = expression;
+
+  tokstr = (char *)NULL;
+  tokval = 0;
+
+  readtok ();
+
+  val = EXP_HIGHEST ();
+
+  if (curtok != 0)
+    evalerror (_("syntax error in expression"));
+
+  FREE (tokstr);
+  FREE (expression);
+
+  popexp ();
+
+  return val;
+}
+
+static intmax_t
+expcomma ()
+{
+  register intmax_t value;
+
+  value = expassign ();
+  while (curtok == COMMA)
+    {
+      readtok ();
+      value = expassign ();
+    }
+
+  return value;
+}
+  
+static intmax_t
+expassign ()
+{
+  register intmax_t value;
+  char *lhs, *rhs;
+
+  value = expcond ();
+  if (curtok == EQ || curtok == OP_ASSIGN)
+    {
+      int special, op;
+      intmax_t lvalue;
+
+      special = curtok == OP_ASSIGN;
+
+      if (lasttok != STR)
+       evalerror (_("attempted assignment to non-variable"));
+
+      if (special)
+       {
+         op = assigntok;               /* a OP= b */
+         lvalue = value;
+       }
+
+      lhs = savestring (tokstr);
+      readtok ();
+      value = expassign ();
+
+      if (special)
+       {
+         switch (op)
+           {
+           case MUL:
+             lvalue *= value;
+             break;
+           case DIV:
+             if (value == 0)
+               evalerror (_("division by 0"));
+             lvalue /= value;
+             break;
+           case MOD:
+             if (value == 0)
+               evalerror (_("division by 0"));
+             lvalue %= value;
+             break;
+           case PLUS:
+             lvalue += value;
+             break;
+           case MINUS:
+             lvalue -= value;
+             break;
+           case LSH:
+             lvalue <<= value;
+             break;
+           case RSH:
+             lvalue >>= value;
+             break;
+           case BAND:
+             lvalue &= value;
+             break;
+           case BOR:
+             lvalue |= value;
+             break;
+           case BXOR:
+             lvalue ^= value;
+             break;
+           default:
+             free (lhs);
+             evalerror (_("bug: bad expassign token"));
+             break;
+           }
+         value = lvalue;
+       }
+
+      rhs = itos (value);
+      if (noeval == 0)
+       expr_bind_variable (lhs, rhs);
+      free (rhs);
+      free (lhs);
+      FREE (tokstr);
+      tokstr = (char *)NULL;           /* For freeing on errors. */
+    }
+  return (value);
+}
+
+/* Conditional expression (expr?expr:expr) */
+static intmax_t
+expcond ()
+{
+  intmax_t cval, val1, val2, rval;
+  int set_noeval;
+
+  set_noeval = 0;
+  rval = cval = explor ();
+  if (curtok == QUES)          /* found conditional expr */
+    {
+      readtok ();
+      if (curtok == 0 || curtok == COL)
+       evalerror (_("expression expected"));
+      if (cval == 0)
+       {
+         set_noeval = 1;
+         noeval++;
+       }
+
+      val1 = EXP_HIGHEST ();
+
+      if (set_noeval)
+       noeval--;
+      if (curtok != COL)
+       evalerror (_("`:' expected for conditional expression"));
+      readtok ();
+      if (curtok == 0)
+       evalerror (_("expression expected"));
+      set_noeval = 0;
+      if (cval)
+       {
+         set_noeval = 1;
+         noeval++;
+       }
+      val2 = explor ();
+      if (set_noeval)
+       noeval--;
+      rval = cval ? val1 : val2;
+      lasttok = COND;
+    }
+  return rval;
+}
+
+/* Logical OR. */
+static intmax_t
+explor ()
+{
+  register intmax_t val1, val2;
+  int set_noeval;
+
+  val1 = expland ();
+
+  while (curtok == LOR)
+    {
+      set_noeval = 0;
+      if (val1 != 0)
+       {
+         noeval++;
+         set_noeval = 1;
+       }
+      readtok ();
+      val2 = expland ();
+      if (set_noeval)
+       noeval--;
+      val1 = val1 || val2;
+      lasttok = LOR;
+    }
+
+  return (val1);
+}
+
+/* Logical AND. */
+static intmax_t
+expland ()
+{
+  register intmax_t val1, val2;
+  int set_noeval;
+
+  val1 = expbor ();
+
+  while (curtok == LAND)
+    {
+      set_noeval = 0;
+      if (val1 == 0)
+       {
+         set_noeval = 1;
+         noeval++;
+       }
+      readtok ();
+      val2 = expbor ();
+      if (set_noeval)
+       noeval--;
+      val1 = val1 && val2;
+      lasttok = LAND;
+    }
+
+  return (val1);
+}
+
+/* Bitwise OR. */
+static intmax_t
+expbor ()
+{
+  register intmax_t val1, val2;
+
+  val1 = expbxor ();
+
+  while (curtok == BOR)
+    {
+      readtok ();
+      val2 = expbxor ();
+      val1 = val1 | val2;
+    }
+
+  return (val1);
+}
+
+/* Bitwise XOR. */
+static intmax_t
+expbxor ()
+{
+  register intmax_t val1, val2;
+
+  val1 = expband ();
+
+  while (curtok == BXOR)
+    {
+      readtok ();
+      val2 = expband ();
+      val1 = val1 ^ val2;
+    }
+
+  return (val1);
+}
+
+/* Bitwise AND. */
+static intmax_t
+expband ()
+{
+  register intmax_t val1, val2;
+
+  val1 = exp5 ();
+
+  while (curtok == BAND)
+    {
+      readtok ();
+      val2 = exp5 ();
+      val1 = val1 & val2;
+    }
+
+  return (val1);
+}
+
+static intmax_t
+exp5 ()
+{
+  register intmax_t val1, val2;
+
+  val1 = exp4 ();
+
+  while ((curtok == EQEQ) || (curtok == NEQ))
+    {
+      int op = curtok;
+
+      readtok ();
+      val2 = exp4 ();
+      if (op == EQEQ)
+       val1 = (val1 == val2);
+      else if (op == NEQ)
+       val1 = (val1 != val2);
+    }
+  return (val1);
+}
+
+static intmax_t
+exp4 ()
+{
+  register intmax_t val1, val2;
+
+  val1 = expshift ();
+  while ((curtok == LEQ) ||
+        (curtok == GEQ) ||
+        (curtok == LT) ||
+        (curtok == GT))
+    {
+      int op = curtok;
+
+      readtok ();
+      val2 = expshift ();
+
+      if (op == LEQ)
+       val1 = val1 <= val2;
+      else if (op == GEQ)
+       val1 = val1 >= val2;
+      else if (op == LT)
+       val1 = val1 < val2;
+      else                     /* (op == GT) */
+       val1 = val1 > val2;
+    }
+  return (val1);
+}
+
+/* Left and right shifts. */
+static intmax_t
+expshift ()
+{
+  register intmax_t val1, val2;
+
+  val1 = exp3 ();
+
+  while ((curtok == LSH) || (curtok == RSH))
+    {
+      int op = curtok;
+
+      readtok ();
+      val2 = exp3 ();
+
+      if (op == LSH)
+       val1 = val1 << val2;
+      else
+       val1 = val1 >> val2;
+    }
+
+  return (val1);
+}
+
+static intmax_t
+exp3 ()
+{
+  register intmax_t val1, val2;
+
+  val1 = exp2 ();
+
+  while ((curtok == PLUS) || (curtok == MINUS))
+    {
+      int op = curtok;
+
+      readtok ();
+      val2 = exp2 ();
+
+      if (op == PLUS)
+       val1 += val2;
+      else if (op == MINUS)
+       val1 -= val2;
+    }
+  return (val1);
+}
+
+static intmax_t
+exp2 ()
+{
+  register intmax_t val1, val2;
+
+  val1 = exppower ();
+
+  while ((curtok == MUL) ||
+        (curtok == DIV) ||
+        (curtok == MOD))
+    {
+      int op = curtok;
+
+      readtok ();
+
+      val2 = exppower ();
+
+      if (((op == DIV) || (op == MOD)) && (val2 == 0))
+       evalerror (_("division by 0"));
+
+      if (op == MUL)
+       val1 *= val2;
+      else if (op == DIV)
+       val1 /= val2;
+      else if (op == MOD)
+       val1 %= val2;
+    }
+  return (val1);
+}
+
+static intmax_t
+exppower ()
+{
+  register intmax_t val1, val2, c;
+
+  val1 = exp1 ();
+  while (curtok == POWER)
+    {
+      readtok ();
+      val2 = exppower ();      /* exponentiation is right-associative */
+      if (val2 == 0)
+       return (1);
+      if (val2 < 0)
+       evalerror (_("exponent less than 0"));
+      for (c = 1; val2--; c *= val1)
+       ;
+      val1 = c;
+    }
+  return (val1);
+}
+
+static intmax_t
+exp1 ()
+{
+  register intmax_t val;
+
+  if (curtok == NOT)
+    {
+      readtok ();
+      val = !exp1 ();
+    }
+  else if (curtok == BNOT)
+    {
+      readtok ();
+      val = ~exp1 ();
+    }
+  else
+    val = exp0 ();
+
+  return (val);
+}
+
+static intmax_t
+exp0 ()
+{
+  register intmax_t val = 0, v2;
+  char *vincdec;
+  int stok;
+  EXPR_CONTEXT ec;
+
+  /* XXX - might need additional logic here to decide whether or not
+          pre-increment or pre-decrement is legal at this point. */
+  if (curtok == PREINC || curtok == PREDEC)
+    {
+      stok = lasttok = curtok;
+      readtok ();
+      if (curtok != STR)
+       /* readtok() catches this */
+       evalerror (_("identifier expected after pre-increment or pre-decrement"));
+
+      v2 = tokval + ((stok == PREINC) ? 1 : -1);
+      vincdec = itos (v2);
+      if (noeval == 0)
+       expr_bind_variable (tokstr, vincdec);
+      free (vincdec);
+      val = v2;
+
+      curtok = NUM;    /* make sure --x=7 is flagged as an error */
+      readtok ();
+    }
+  else if (curtok == MINUS)
+    {
+      readtok ();
+      val = - exp0 ();
+    }
+  else if (curtok == PLUS)
+    {
+      readtok ();
+      val = exp0 ();
+    }
+  else if (curtok == LPAR)
+    {
+      readtok ();
+      val = EXP_HIGHEST ();
+
+      if (curtok != RPAR) /* ( */
+       evalerror (_("missing `)'"));
+
+      /* Skip over closing paren. */
+      readtok ();
+    }
+  else if ((curtok == NUM) || (curtok == STR))
+    {
+      val = tokval;
+      if (curtok == STR)
+       {
+         SAVETOK (&ec);
+         tokstr = (char *)NULL;        /* keep it from being freed */
+          noeval = 1;
+          readtok ();
+          stok = curtok;
+
+         /* post-increment or post-decrement */
+         if (stok == POSTINC || stok == POSTDEC)
+           {
+             /* restore certain portions of EC */
+             tokstr = ec.tokstr;
+             noeval = ec.noeval;
+             lasttok = STR;    /* ec.curtok */
+
+             v2 = val + ((stok == POSTINC) ? 1 : -1);
+             vincdec = itos (v2);
+             if (noeval == 0)
+               expr_bind_variable (tokstr, vincdec);
+             free (vincdec);
+             curtok = NUM;     /* make sure x++=7 is flagged as an error */
+           }
+         else
+           {
+             if (stok == STR)  /* free new tokstr before old one is restored */
+               FREE (tokstr);
+             RESTORETOK (&ec);
+           }
+
+       }
+         
+      readtok ();
+    }
+  else
+    evalerror (_("syntax error: operand expected"));
+
+  return (val);
+}
+
+static intmax_t
+expr_streval (tok, e)
+     char *tok;
+     int e;
+{
+  SHELL_VAR *v;
+  char *value;
+  intmax_t tval;
+
+  /* [[[[[ */
+#if defined (ARRAY_VARS)
+  v = (e == ']') ? array_variable_part (tok, (char **)0, (int *)0) : find_variable (tok);
+#else
+  v = find_variable (tok);
+#endif
+
+  if ((v == 0 || invisible_p (v)) && unbound_vars_is_error)
+    {
+#if defined (ARRAY_VARS)
+      value = (e == ']') ? array_variable_name (tok, (char **)0, (int *)0) : tok;
+#else
+      value = tok;
+#endif
+
+      err_unboundvar (value);
+
+#if defined (ARRAY_VARS)
+      if (e == ']')
+       FREE (value);   /* array_variable_name returns new memory */
+#endif
+
+      if (interactive_shell)
+       {
+         expr_unwind ();
+         jump_to_top_level (DISCARD);
+       }
+      else
+       jump_to_top_level (FORCE_EOF);
+    }
+
+#if defined (ARRAY_VARS)
+  /* Second argument of 0 to get_array_value means that we don't allow
+     references like array[@].  In this case, get_array_value is just
+     like get_variable_value in that it does not return newly-allocated
+     memory or quote the results. */
+  value = (e == ']') ? get_array_value (tok, 0, (int *)NULL) : get_variable_value (v);
+#else
+  value = get_variable_value (v);
+#endif
+
+  tval = (value && *value) ? subexpr (value) : 0;
+
+  return (tval);
+}
+
+static int
+_is_multiop (c)
+     int c;
+{
+  switch (c)
+    {
+    case EQEQ:
+    case NEQ:
+    case LEQ:
+    case GEQ:
+    case LAND:
+    case LOR:
+    case LSH:
+    case RSH:
+    case OP_ASSIGN:
+    case COND:
+    case POWER:
+    case PREINC:
+    case PREDEC:
+    case POSTINC:
+    case POSTDEC:
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+static int
+_is_arithop (c)
+     int c;
+{
+  switch (c)
+    {
+    case EQ:
+    case GT:
+    case LT:
+    case PLUS:
+    case MINUS:
+    case MUL:
+    case DIV:
+    case MOD:
+    case NOT:
+    case LPAR:
+    case RPAR:
+    case BAND:
+    case BOR:
+    case BXOR:
+    case BNOT:
+      return 1;                /* operator tokens */
+    case QUES:
+    case COL:
+    case COMMA:
+      return 1;                /* questionable */
+    default:
+      return 0;                /* anything else is invalid */
+    }
+}
+
+/* Lexical analyzer/token reader for the expression evaluator.  Reads the
+   next token and puts its value into curtok, while advancing past it.
+   Updates value of tp.  May also set tokval (for number) or tokstr (for
+   string). */
+static void
+readtok ()
+{
+  register char *cp, *xp;
+  register unsigned char c, c1;
+  register int e;
+
+  /* Skip leading whitespace. */
+  cp = tp;
+  c = e = 0;
+  while (cp && (c = *cp) && (cr_whitespace (c)))
+    cp++;
+
+  if (c)
+    cp++;
+
+  lasttp = tp = cp - 1;
+
+  if (c == '\0')
+    {
+      lasttok = curtok;
+      curtok = 0;
+      tp = cp;
+      return;
+    }
+
+  if (legal_variable_starter (c))
+    {
+      /* variable names not preceded with a dollar sign are shell variables. */
+      char *savecp;
+      EXPR_CONTEXT ec;
+      int peektok;
+
+      while (legal_variable_char (c))
+       c = *cp++;
+
+      c = *--cp;
+
+#if defined (ARRAY_VARS)
+      if (c == '[')
+       {
+         e = skipsubscript (cp, 0);
+         if (cp[e] == ']')
+           {
+             cp += e + 1;
+             c = *cp;
+             e = ']';
+           }
+         else
+           evalerror (bash_badsub_errmsg);
+       }
+#endif /* ARRAY_VARS */
+
+      *cp = '\0';
+      FREE (tokstr);
+      tokstr = savestring (tp);
+      *cp = c;
+
+      SAVETOK (&ec);
+      tokstr = (char *)NULL;   /* keep it from being freed */
+      tp = savecp = cp;
+      noeval = 1;
+      curtok = STR;
+      readtok ();
+      peektok = curtok;
+      if (peektok == STR)      /* free new tokstr before old one is restored */
+       FREE (tokstr);
+      RESTORETOK (&ec);
+      cp = savecp;
+
+      /* The tests for PREINC and PREDEC aren't strictly correct, but they
+        preserve old behavior if a construct like --x=9 is given. */
+      if (lasttok == PREINC || lasttok == PREDEC || peektok != EQ)
+       tokval = expr_streval (tokstr, e);
+      else
+       tokval = 0;
+
+      lasttok = curtok;
+      curtok = STR;
+    }
+  else if (DIGIT(c))
+    {
+      while (ISALNUM (c) || c == '#' || c == '@' || c == '_')
+       c = *cp++;
+
+      c = *--cp;
+      *cp = '\0';
+
+      tokval = strlong (tp);
+      *cp = c;
+      lasttok = curtok;
+      curtok = NUM;
+    }
+  else
+    {
+      c1 = *cp++;
+      if ((c == EQ) && (c1 == EQ))
+       c = EQEQ;
+      else if ((c == NOT) && (c1 == EQ))
+       c = NEQ;
+      else if ((c == GT) && (c1 == EQ))
+       c = GEQ;
+      else if ((c == LT) && (c1 == EQ))
+       c = LEQ;
+      else if ((c == LT) && (c1 == LT))
+       {
+         if (*cp == '=')       /* a <<= b */
+           {
+             assigntok = LSH;
+             c = OP_ASSIGN;
+             cp++;
+           }
+         else
+           c = LSH;
+       }
+      else if ((c == GT) && (c1 == GT))
+       {
+         if (*cp == '=')
+           {
+             assigntok = RSH;  /* a >>= b */
+             c = OP_ASSIGN;
+             cp++;
+           }
+         else
+           c = RSH;
+       }
+      else if ((c == BAND) && (c1 == BAND))
+       c = LAND;
+      else if ((c == BOR) && (c1 == BOR))
+       c = LOR;
+      else if ((c == '*') && (c1 == '*'))
+       c = POWER;
+      else if ((c == '-' || c == '+') && c1 == c && curtok == STR)
+       c = (c == '-') ? POSTDEC : POSTINC;
+      else if ((c == '-' || c == '+') && c1 == c)
+       {
+         /* Quickly scan forward to see if this is followed by optional
+            whitespace and an identifier. */
+         xp = cp;
+         while (xp && *xp && cr_whitespace (*xp))
+           xp++;
+         if (legal_variable_starter ((unsigned char)*xp))
+           c = (c == '-') ? PREDEC : PREINC;
+         else
+           cp--;       /* not preinc or predec, so unget the character */
+       }
+      else if (c1 == EQ && member (c, "*/%+-&^|"))
+       {
+         assigntok = c;        /* a OP= b */
+         c = OP_ASSIGN;
+       }
+      else if (_is_arithop (c) == 0)
+       {
+         cp--;
+         /* use curtok, since it hasn't been copied to lasttok yet */
+         if (curtok == 0 || _is_arithop (curtok) || _is_multiop (curtok))
+           evalerror (_("syntax error: operand expected"));
+         else
+           evalerror (_("syntax error: invalid arithmetic operator"));
+       }
+      else
+       cp--;                   /* `unget' the character */
+
+      /* Should check here to make sure that the current character is one
+        of the recognized operators and flag an error if not.  Could create
+        a character map the first time through and check it on subsequent
+        calls. */
+      lasttok = curtok;
+      curtok = c;
+    }
+  tp = cp;
+}
+
+static void
+evalerror (msg)
+     char *msg;
+{
+  char *name, *t;
+
+  name = this_command_name;
+  for (t = expression; whitespace (*t); t++)
+    ;
+  internal_error ("%s%s%s: %s (error token is \"%s\")",
+                  name ? name : "", name ? ": " : "", t,
+                  msg, (lasttp && *lasttp) ? lasttp : "");
+  longjmp (evalbuf, 1);
+}
+
+/* Convert a string to an intmax_t integer, with an arbitrary base.
+   0nnn -> base 8
+   0[Xx]nn -> base 16
+   Anything else: [base#]number (this is implemented to match ksh93)
+
+   Base may be >=2 and <=64.  If base is <= 36, the numbers are drawn
+   from [0-9][a-zA-Z], and lowercase and uppercase letters may be used
+   interchangably.  If base is > 36 and <= 64, the numbers are drawn
+   from [0-9][a-z][A-Z]_@ (a = 10, z = 35, A = 36, Z = 61, @ = 62, _ = 63 --
+   you get the picture). */
+
+static intmax_t
+strlong (num)
+     char *num;
+{
+  register char *s;
+  register unsigned char c;
+  int base, foundbase;
+  intmax_t val;
+
+  s = num;
+
+  base = 10;
+  foundbase = 0;
+  if (*s == '0')
+    {
+      s++;
+
+      if (*s == '\0')
+       return 0;
+
+       /* Base 16? */
+      if (*s == 'x' || *s == 'X')
+       {
+         base = 16;
+         s++;
+       }
+      else
+       base = 8;
+      foundbase++;
+    }
+
+  val = 0;
+  for (c = *s++; c; c = *s++)
+    {
+      if (c == '#')
+       {
+         if (foundbase)
+           evalerror (_("invalid number"));
+
+         /* Illegal base specifications raise an evaluation error. */
+         if (val < 2 || val > 64)
+           evalerror (_("invalid arithmetic base"));
+
+         base = val;
+         val = 0;
+         foundbase++;
+       }
+      else if (ISALNUM(c) || (c == '_') || (c == '@'))
+       {
+         if (DIGIT(c))
+           c = TODIGIT(c);
+         else if (c >= 'a' && c <= 'z')
+           c -= 'a' - 10;
+         else if (c >= 'A' && c <= 'Z')
+           c -= 'A' - ((base <= 36) ? 10 : 36);
+         else if (c == '@')
+           c = 62;
+         else if (c == '_')
+           c = 63;
+
+         if (c >= base)
+           evalerror (_("value too great for base"));
+
+         val = (val * base) + c;
+       }
+      else
+       break;
+    }
+
+  return (val);
+}
+
+#if defined (EXPR_TEST)
+void *
+xmalloc (n)
+     int n;
+{
+  return (malloc (n));
+}
+
+void *
+xrealloc (s, n)
+     char *s;
+     int n;
+{
+  return (realloc (s, n));
+}
+
+SHELL_VAR *find_variable () { return 0;}
+SHELL_VAR *bind_variable () { return 0; }
+
+char *get_string_value () { return 0; }
+
+procenv_t top_level;
+
+main (argc, argv)
+     int argc;
+     char **argv;
+{
+  register int i;
+  intmax_t v;
+  int expok;
+
+  if (setjmp (top_level))
+    exit (0);
+
+  for (i = 1; i < argc; i++)
+    {
+      v = evalexp (argv[i], &expok);
+      if (expok == 0)
+       fprintf (stderr, "%s: expression error\n", argv[i]);
+      else
+       printf ("'%s' -> %ld\n", argv[i], v);
+    }
+  exit (0);
+}
+
+int
+builtin_error (format, arg1, arg2, arg3, arg4, arg5)
+     char *format;
+{
+  fprintf (stderr, "expr: ");
+  fprintf (stderr, format, arg1, arg2, arg3, arg4, arg5);
+  fprintf (stderr, "\n");
+  return 0;
+}
+
+char *
+itos (n)
+     intmax_t n;
+{
+  return ("42");
+}
+
+#endif /* EXPR_TEST */
diff --git a/jobs.c b/jobs.c
index e7977a4d83334dd59f094543b47b24740bfd5628..774e84b583cb002d31b0ab5a59c8f0c45b3306b0 100644 (file)
--- a/jobs.c
+++ b/jobs.c
@@ -462,7 +462,7 @@ start_pipeline ()
   if (job_control)
     {
       if (pipe (pgrp_pipe) == -1)
-       sys_error ("start_pipeline: pgrp pipe");
+       sys_error (_("start_pipeline: pgrp pipe"));
     }
 #endif
 }
@@ -1085,7 +1085,7 @@ add_process (name, pid)
     {
 #  ifdef DEBUG
       if (j == NO_JOB)
-       internal_warning ("add_process: process %5ld (%s) in the_pipeline", (long)p->pid, p->command);
+       internal_warning (_("add_process: process %5ld (%s) in the_pipeline"), (long)p->pid, p->command);
 #  endif
       if (PALIVE (p))
         internal_warning ("add_process: pid %5ld (%s) marked as still alive", (long)p->pid, p->command);
@@ -1391,7 +1391,7 @@ j_strsignal (s)
   if (x == 0)
     {
       x = retcode_name_buffer;
-      sprintf (x, "Signal %d", s);
+      sprintf (x, _("Signal %d"), s);
     }
   return x;
 }
@@ -1405,20 +1405,20 @@ printable_job_status (j, p, format)
   static char *temp;
   int es;
 
-  temp = "Done";
+  temp = _("Done");
 
   if (STOPPED (j) && format == 0)
     {
       if (posixly_correct == 0 || p == 0 || (WIFSTOPPED (p->status) == 0))
-       temp = "Stopped";
+       temp = _("Stopped");
       else
        {
          temp = retcode_name_buffer;
-         sprintf (temp, "Stopped(%s)", signal_name (WSTOPSIG (p->status)));
+         sprintf (temp, _("Stopped(%s)"), signal_name (WSTOPSIG (p->status)));
        }
     }
   else if (RUNNING (j))
-    temp = "Running";
+    temp = _("Running");
   else
     {
       if (WIFSTOPPED (p->status))
@@ -1430,14 +1430,14 @@ printable_job_status (j, p, format)
          temp = retcode_name_buffer;
          es = WEXITSTATUS (p->status);
          if (es == 0)
-           strcpy (temp, "Done");
+           strcpy (temp, _("Done"));
          else if (posixly_correct)
-           sprintf (temp, "Done(%d)", es);
+           sprintf (temp, _("Done(%d)"), es);
          else
-           sprintf (temp, "Exit %d", es);
+           sprintf (temp, _("Exit %d"), es);
        }
       else
-       temp = "Unknown status";
+       temp = _("Unknown status");
     }
 
   return temp;
@@ -1524,7 +1524,7 @@ print_pipeline (p, job_index, format, stream)
              if ((WIFSTOPPED (show->status) == 0) &&
                  (WIFCONTINUED (show->status) == 0) &&
                  WIFCORED (show->status))
-               fprintf (stream, "(core dumped) ");
+               fprintf (stream, _("(core dumped) "));
            }
        }
 
@@ -1543,7 +1543,7 @@ print_pipeline (p, job_index, format, stream)
 
          if (strcmp (temp, jobs[job_index]->wd) != 0)
            fprintf (stream,
-             "  (wd: %s)", polite_directory_format (jobs[job_index]->wd));
+             _("  (wd: %s)"), polite_directory_format (jobs[job_index]->wd));
        }
 
       if (format || (p == last))
@@ -1735,7 +1735,7 @@ make_child (command, async_p)
             B.4.3.3, p. 237 also covers this, in the context of job control
             shells. */
          if (setpgid (mypid, pipeline_pgrp) < 0)
-           sys_error ("child setpgid (%ld to %ld)", (long)mypid, (long)pipeline_pgrp);
+           sys_error (_("child setpgid (%ld to %ld)"), (long)mypid, (long)pipeline_pgrp);
 
          /* By convention (and assumption above), if
             pipeline_pgrp == shell_pgrp, we are making a child for
@@ -3399,7 +3399,7 @@ notify_of_job_status ()
                  signal_is_trapped (termsig) == 0)
                {
                  /* Don't print `0' for a line number. */
-                 fprintf (stderr, "%s: line %d: ", get_name_for_error (), (line_number == 0) ? 1 : line_number);
+                 fprintf (stderr, _("%s: line %d: "), get_name_for_error (), (line_number == 0) ? 1 : line_number);
                  pretty_print_job (job, JLIST_NONINTERACTIVE, stderr);
                }
              else if (IS_FOREGROUND (job))
@@ -3413,7 +3413,7 @@ notify_of_job_status ()
                      fprintf (stderr, "%s", j_strsignal (termsig));
 
                      if (WIFCORED (s))
-                       fprintf (stderr, " (core dumped)");
+                       fprintf (stderr, _(" (core dumped)"));
 
                      fprintf (stderr, "\n");
                    }
@@ -3425,7 +3425,7 @@ notify_of_job_status ()
                  pretty_print_job (job, JLIST_STANDARD, stderr);
                  if (dir && strcmp (dir, jobs[job]->wd) != 0)
                    fprintf (stderr,
-                            "(wd now: %s)\n", polite_directory_format (dir));
+                            _("(wd now: %s)\n"), polite_directory_format (dir));
                }
 
              jobs[job]->flags |= J_NOTIFIED;
@@ -3438,7 +3438,7 @@ notify_of_job_status ()
              pretty_print_job (job, JLIST_STANDARD, stderr);
              if (dir && (strcmp (dir, jobs[job]->wd) != 0))
                fprintf (stderr,
-                        "(wd now: %s)\n", polite_directory_format (dir));
+                        _("(wd now: %s)\n"), polite_directory_format (dir));
              jobs[job]->flags |= J_NOTIFIED;
              break;
 
@@ -3466,7 +3466,7 @@ initialize_job_control (force)
 
   if (shell_pgrp == -1)
     {
-      sys_error ("initialize_job_control: getpgrp failed");
+      sys_error (_("initialize_job_control: getpgrp failed"));
       exit (1);
     }
 
@@ -3512,7 +3512,7 @@ initialize_job_control (force)
       /* Make sure that we are using the new line discipline. */
       if (set_new_line_discipline (shell_tty) < 0)
        {
-         sys_error ("initialize_job_control: line discipline");
+         sys_error (_("initialize_job_control: line discipline"));
          job_control = 0;
        }
       else
@@ -3522,7 +3522,7 @@ initialize_job_control (force)
 
          if ((original_pgrp != shell_pgrp) && (setpgid (0, shell_pgrp) < 0))
            {
-             sys_error ("initialize_job_control: setpgid");
+             sys_error (_("initialize_job_control: setpgid"));
              shell_pgrp = original_pgrp;
            }
 
diff --git a/jobs.c~ b/jobs.c~
index b6ccf4aedc012a2a2f982ea35f997dea696ac835..5449cb4f03e14b32cc79e02d5cae406c5bb276e1 100644 (file)
--- a/jobs.c~
+++ b/jobs.c~
@@ -462,7 +462,7 @@ start_pipeline ()
   if (job_control)
     {
       if (pipe (pgrp_pipe) == -1)
-       sys_error ("start_pipeline: pgrp pipe");
+       sys_error (_("start_pipeline: pgrp pipe"));
     }
 #endif
 }
@@ -1085,7 +1085,7 @@ add_process (name, pid)
     {
 #  ifdef DEBUG
       if (j == NO_JOB)
-       internal_warning ("add_process: process %5ld (%s) in the_pipeline", (long)p->pid, p->command);
+       internal_warning (_("add_process: process %5ld (%s) in the_pipeline"), (long)p->pid, p->command);
 #  endif
       if (PALIVE (p))
         internal_warning ("add_process: pid %5ld (%s) marked as still alive", (long)p->pid, p->command);
@@ -1772,8 +1772,10 @@ make_child (command, async_p)
       pipe_close (pgrp_pipe);
 #endif /* PGRP_PIPE */
 
+#if 0
       if (async_p)
        last_asynchronous_pid = mypid;          /* XXX */
+#endif
 #if defined (RECYCLES_PIDS)
       else if (last_asynchronous_pid == mypid)
         /* Avoid pid aliasing.  1 seems like a safe, unusual pid value. */
index 08c906bfcc3371682f4bd91945b858d7770e5af1..b4b1e8799937fcc9f345618b41f45167450a5f21 100644 (file)
@@ -921,10 +921,10 @@ _rl_init_file_error (msg)
      const char *msg;
 {
   if (currently_reading_init_file)
-    fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file,
+    _rl_errmsg ("%s: line %d: %s\n", current_readline_init_file,
                     current_readline_init_lineno, msg);
   else
-    fprintf (stderr, "readline: %s\n", msg);
+    _rl_errmsg ("%s", msg);
 }
 
 /* **************************************************************** */
index d07d5e63822787bb08254797ea69ef2a6b6404d4..88a107b95726ca87257c7b64c833054ee7ea955b 100644 (file)
@@ -111,7 +111,7 @@ rl_callback_read_char ()
 
   if (rl_linefunc == NULL)
     {
-      fprintf (stderr, "readline: readline_callback_read_char() called with no handler!\r\n");
+      _rl_errmsg ("readline_callback_read_char() called with no handler!");
       abort ();
     }
 
index 189d047a948480744c55e0a9babd7027b3cc0ed2..1598ad6a12ec7e926eeac58f1d8df8675163edae 100644 (file)
@@ -1749,7 +1749,7 @@ rl_complete_internal (what_to_do)
       break;
 
     default:
-      fprintf (stderr, "\r\nreadline: bad value %d for what_to_do in rl_complete\n", what_to_do);
+      _rl_ttymsg ("bad value %d for what_to_do in rl_complete", what_to_do);
       rl_ding ();
       FREE (saved_line_buffer);
       RL_UNSETSTATE(RL_STATE_COMPLETING);
index 7ae832130bd08ef3ccfbd5cae74ec3eca0f7a17e..77e00b82ff29204f41a0c4d5ce0a13856cdf135b 100644 (file)
@@ -2169,7 +2169,7 @@ insert_some_chars (string, count, col)
   /* DEBUGGING */
   if (MB_CUR_MAX == 1 || rl_byte_oriented)
     if (count != col)
-      fprintf(stderr, "readline: debug: insert_some_chars: count (%d) != col (%d)\n", count, col);
+      _rl_ttymsg ("debug: insert_some_chars: count (%d) != col (%d)", count, col);
 
   /* If IC is defined, then we do not have to "enter" insert mode. */
   if (_rl_term_IC)
@@ -2410,7 +2410,7 @@ _rl_col_width (str, start, end)
     return 0;
   if (MB_CUR_MAX == 1 || rl_byte_oriented)
 {
-fprintf (stderr, "_rl_col_width: called with MB_CUR_MAX == 1\n");
+_rl_ttymsg ("_rl_col_width: called with MB_CUR_MAX == 1");
     return (end - start);
 }
 
index f98983b69ed3c74c0a9b9a8ab0faa1faf8cb14fd..c919e426e0b0c1a2da16eb4f3c4c2d5858ce0857 100644 (file)
@@ -133,7 +133,7 @@ history list and history file.
 @item fc
 @btindex fc
 @example
-@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]}
+@code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]}
 @code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
 @end example
 
@@ -412,7 +412,7 @@ of the following modifiers, each preceded by a @samp{:}.
 Remove a trailing pathname component, leaving only the head.
 
 @item t
-Remove all leading  pathname  components, leaving the tail.
+Remove all leading pathname components, leaving the tail.
 
 @item r
 Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
diff --git a/lib/readline/doc/hsuser.texi~ b/lib/readline/doc/hsuser.texi~
new file mode 100644 (file)
index 0000000..ba033ca
--- /dev/null
@@ -0,0 +1,457 @@
+@ignore
+This file documents the user interface to the GNU History library.
+
+Copyright (C) 1988-2006 Free Software Foundation, Inc.
+Authored by Brian Fox and Chet Ramey.
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided the copyright notice and this permission notice are preserved on
+all copies.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission notice
+identical to this one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+GNU Copyright statement is available to the distributee, and provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end ignore
+
+@node Using History Interactively
+@chapter Using History Interactively
+
+@ifclear BashFeatures
+@defcodeindex bt
+@end ifclear
+
+@ifset BashFeatures
+This chapter describes how to use the @sc{gnu} History Library
+interactively, from a user's standpoint.
+It should be considered a user's guide.
+For information on using the @sc{gnu} History Library in other programs,
+see the @sc{gnu} Readline Library Manual.
+@end ifset
+@ifclear BashFeatures
+This chapter describes how to use the @sc{gnu} History Library interactively,
+from a user's standpoint.  It should be considered a user's guide.  For
+information on using the @sc{gnu} History Library in your own programs,
+@pxref{Programming with GNU History}.
+@end ifclear
+
+@ifset BashFeatures
+@menu
+* Bash History Facilities::    How Bash lets you manipulate your command
+                               history.
+* Bash History Builtins::      The Bash builtin commands that manipulate
+                               the command history.
+* History Interaction::                What it feels like using History as a user.
+@end menu
+@end ifset
+@ifclear BashFeatures
+@menu
+* History Interaction::                What it feels like using History as a user.
+@end menu
+@end ifclear
+
+@ifset BashFeatures
+@node Bash History Facilities
+@section Bash History Facilities
+@cindex command history
+@cindex history list
+
+When the @option{-o history} option to the @code{set} builtin
+is enabled (@pxref{The Set Builtin}),
+the shell provides access to the @dfn{command history},
+the list of commands previously typed.
+The value of the @env{HISTSIZE} shell variable is used as the
+number of commands to save in a history list.
+The text of the last @env{$HISTSIZE}
+commands (default 500) is saved.
+The shell stores each command in the history list prior to
+parameter and variable expansion
+but after history expansion is performed, subject to the
+values of the shell variables
+@env{HISTIGNORE} and @env{HISTCONTROL}.
+
+When the shell starts up, the history is initialized from the
+file named by the @env{HISTFILE} variable (default @file{~/.bash_history}).
+The file named by the value of @env{HISTFILE} is truncated, if
+necessary, to contain no more than the number of lines specified by
+the value of the @env{HISTFILESIZE} variable.
+When an interactive shell exits, the last
+@env{$HISTSIZE} lines are copied from the history list to the file
+named by @env{$HISTFILE}.
+If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
+the lines are appended to the history file,
+otherwise the history file is overwritten.
+If @env{HISTFILE}
+is unset, or if the history file is unwritable, the history is
+not saved.  After saving the history, the history file is truncated
+to contain no more than @env{$HISTFILESIZE}
+lines.  If @env{HISTFILESIZE} is not set, no truncation is performed.
+
+If the @env{HISTTIMEFORMAT} is set, the time stamp information
+associated with each history entry is written to the history file.
+
+The builtin command @code{fc} may be used to list or edit and re-execute
+a portion of the history list.
+The @code{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 (@pxref{Commands For History}).
+
+The shell allows control over which commands are saved on the history
+list.  The @env{HISTCONTROL} and @env{HISTIGNORE}
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The @code{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 @code{lithist}
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons.
+The @code{shopt} builtin is used to set these options.
+@xref{Bash Builtins}, for a description of @code{shopt}.
+
+@node Bash History Builtins
+@section Bash History Builtins
+@cindex history builtins
+
+Bash provides two builtin commands which manipulate the
+history list and history file.
+
+@table @code
+
+@item fc
+@btindex fc
+@example
+@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]}
+@code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
+@end example
+
+Fix Command.  In the first form, a range of commands from @var{first} to
+@var{last} is selected from the history list.  Both @var{first} and
+@var{last} may be specified as a string (to locate the most recent
+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 @var{last} is not specified it is set to
+@var{first}.  If @var{first} is not specified it is set to the previous
+command for editing and @minus{}16 for listing.  If the @option{-l} flag is
+given, the commands are listed on standard output.  The @option{-n} flag
+suppresses the command numbers when listing.  The @option{-r} flag
+reverses the order of the listing.  Otherwise, the editor given by
+@var{ename} is invoked on a file containing those commands.  If
+@var{ename} is not given, the value of the following variable expansion
+is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}.  This says to use the
+value of the @env{FCEDIT} variable if set, or the value of the
+@env{EDITOR} variable if that is set, or @code{vi} if neither is set.
+When editing is complete, the edited commands are echoed and executed.
+
+In the second form, @var{command} is re-executed after each instance
+of @var{pat} in the selected command is replaced by @var{rep}.
+
+A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so
+that typing @samp{r cc} runs the last command beginning with @code{cc}
+and typing @samp{r} re-executes the last command (@pxref{Aliases}).
+
+@item history
+@btindex history
+@example
+history [@var{n}]
+history -c
+history -d @var{offset}
+history [-anrw] [@var{filename}]
+history -ps @var{arg}
+@end example
+
+With no options, display the history list with line numbers.
+Lines prefixed with a @samp{*} have been modified.
+An argument of @var{n} lists only the last @var{n} lines.
+If the shell variable @env{HISTTIMEFORMAT} is set and not null,
+it is used as a format string for @var{strftime} 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.
+
+Options, if supplied, have the following meanings:
+
+@table @code
+@item -c
+Clear the history list.  This may be combined
+with the other options to replace the history list completely.
+
+@item -d @var{offset}
+Delete the history entry at position @var{offset}.
+@var{offset} should be specified as it appears when the history is
+displayed.
+
+@item -a
+Append the new
+history lines (history lines entered since the beginning of the
+current Bash session) to the history file.
+
+@item -n
+Append the history lines not already read from the history file
+to the current history list.  These are lines appended to the history
+file since the beginning of the current Bash session.
+
+@item -r
+Read the current history file and append its contents to
+the history list.
+
+@item -w
+Write out the current history to the history file.
+
+@item -p
+Perform history substitution on the @var{arg}s and display the result
+on the standard output, without storing the results in the history list.
+
+@item -s
+The @var{arg}s are added to the end of
+the history list as a single entry.
+
+@end table
+
+When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
+used, if @var{filename}
+is given, then it is used as the history file.  If not, then
+the value of the @env{HISTFILE} variable is used.
+
+@end table
+@end ifset
+
+@node History Interaction
+@section History Expansion
+@cindex history expansion
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by @code{csh}.  This section
+describes the syntax used to manipulate the history information.
+
+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.
+
+History expansion takes place in two parts.  The first is to determine
+which line from the history list should be used during substitution.
+The second is to select portions of that line for inclusion into the
+current one.  The line selected from the history is called the
+@dfn{event}, and the portions of that line that are acted upon are
+called @dfn{words}.  Various @dfn{modifiers} are available to manipulate
+the selected words.  The line is broken into words in the same fashion
+that Bash does, so that several words
+surrounded by quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is @samp{!} by default.
+@ifset BashFeatures
+Only @samp{\} and @samp{'} may be used to escape the history expansion
+character.
+@end ifset
+
+@ifset BashFeatures
+Several shell options settable with the @code{shopt}
+builtin (@pxref{Bash Builtins}) may be used to tailor
+the behavior of history expansion.  If the
+@code{histverify} shell option is enabled, and Readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification.
+If Readline is being used, and the @code{histreedit}
+shell option is enabled, a failed history expansion will be
+reloaded into the Readline editing buffer for correction.
+The @option{-p} option to the @code{history} builtin command
+may be used to see what a history expansion will do before using it.
+The @option{-s} option to the @code{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.
+This is most useful in conjunction with Readline.
+
+The shell allows control of the various characters used by the
+history expansion mechanism with the @code{histchars} variable.
+@end ifset
+
+@menu
+* Event Designators::  How to specify which history line to use.
+* Word Designators::   Specifying which words are of interest.
+* Modifiers::          Modifying the results of substitution.
+@end menu
+
+@node Event Designators
+@subsection Event Designators
+@cindex event designators
+
+An event designator is a reference to a command line entry in the
+history list.
+@cindex history events
+
+@table @asis
+
+@item @code{!}
+@ifset BashFeatures
+Start a history substitution, except when followed by a space, tab,
+the end of the line, @samp{=} or @samp{(} (when the
+@code{extglob} shell option is enabled using the @code{shopt} builtin).
+@end ifset
+@ifclear BashFeatures
+Start a history substitution, except when followed by a space, tab,
+the end of the line, or @samp{=}.
+@end ifclear
+
+@item @code{!@var{n}}
+Refer to command line @var{n}.
+
+@item @code{!-@var{n}}
+Refer to the command @var{n} lines back.
+
+@item @code{!!}
+Refer to the previous command.  This is a synonym for @samp{!-1}.
+
+@item @code{!@var{string}}
+Refer to the most recent command starting with @var{string}.
+
+@item @code{!?@var{string}[?]}
+Refer to the most recent command containing @var{string}.  The trailing
+@samp{?} may be omitted if the @var{string} is followed immediately by
+a newline.
+
+@item @code{^@var{string1}^@var{string2}^}
+Quick Substitution.  Repeat the last command, replacing @var{string1}
+with @var{string2}.  Equivalent to
+@code{!!:s/@var{string1}/@var{string2}/}.
+
+@item @code{!#}
+The entire command line typed so far.
+
+@end table
+
+@node Word Designators
+@subsection Word Designators
+
+Word designators are used to select desired words from the event.
+A @samp{:} separates the event specification from the word designator.  It
+may be omitted if the word designator begins with a @samp{^}, @samp{$},
+@samp{*}, @samp{-}, or @samp{%}.  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.
+
+@need 0.75
+For example,
+
+@table @code
+@item !!
+designates the preceding command.  When you type this, the preceding
+command is repeated in toto.
+
+@item !!:$
+designates the last argument of the preceding command.  This may be
+shortened to @code{!$}.
+
+@item !fi:2
+designates the second argument of the most recent command starting with
+the letters @code{fi}.
+@end table
+
+@need 0.75
+Here are the word designators:
+@table @code
+
+@item 0 (zero)
+The @code{0}th word.  For many applications, this is the command word.
+
+@item @var{n}
+The @var{n}th word.
+
+@item ^
+The first argument; that is, word 1.
+
+@item $
+The last argument.
+
+@item %
+The word matched by the most recent @samp{?@var{string}?} search.
+
+@item @var{x}-@var{y}
+A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}.
+
+@item *
+All of the words, except the @code{0}th.  This is a synonym for @samp{1-$}.
+It is not an error to use @samp{*} if there is just one word in the event;
+the empty string is returned in that case.
+
+@item @var{x}*
+Abbreviates @samp{@var{x}-$}
+
+@item @var{x}-
+Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
+
+@end table
+
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+@node Modifiers
+@subsection Modifiers
+
+After the optional word designator, you can add a sequence of one or more
+of the following modifiers, each preceded by a @samp{:}.
+
+@table @code
+
+@item h
+Remove a trailing pathname component, leaving only the head.
+
+@item t
+Remove all leading pathname components, leaving the tail.
+
+@item r
+Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
+the basename.
+
+@item e
+Remove all but the trailing suffix.
+
+@item p
+Print the new command but do not execute it.
+
+@ifset BashFeatures
+@item q
+Quote the substituted words, escaping further substitutions.
+
+@item x
+Quote the substituted words as with @samp{q},
+but break into words at spaces, tabs, and newlines.
+@end ifset
+
+@item s/@var{old}/@var{new}/
+Substitute @var{new} for the first occurrence of @var{old} in the
+event line.  Any delimiter may be used in place of @samp{/}.
+The delimiter may be quoted in @var{old} and @var{new}
+with a single backslash.  If @samp{&} appears in @var{new},
+it is replaced by @var{old}.  A single backslash will quote
+the @samp{&}.  The final delimiter is optional if it is the last
+character on the input line.
+
+@item &
+Repeat the previous substitution.
+
+@item g
+@itemx a
+Cause changes to be applied over the entire event line.  Used in
+conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
+or with @samp{&}.
+
+@item G
+Apply the following @samp{s} modifier once to each word in the event.
+
+@end table
index 5c6467a9aa69a2accd35f2b88fed15cc00a53ea8..e650907dcf941b730a68d62f314b339fb12d6a81 100644 (file)
@@ -1662,8 +1662,8 @@ matches were generated.
 @btindex complete
 @example
 @code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
-[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}]
-[-C @var{command}] @var{name} [@var{name} @dots{}]}
+[-F @var{function}] [-C @var{command}] [-X @var{filterpat}]
+[-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]}
 @code{complete -pr [@var{name} @dots{}]}
 @end example
 
diff --git a/lib/readline/doc/rluser.texi~ b/lib/readline/doc/rluser.texi~
new file mode 100644 (file)
index 0000000..5c6467a
--- /dev/null
@@ -0,0 +1,1850 @@
+@comment %**start of header (This is for running Texinfo on a region.)
+@setfilename rluser.info
+@comment %**end of header (This is for running Texinfo on a region.)
+@setchapternewpage odd
+
+@ignore
+This file documents the end user interface to the GNU command line
+editing features.  It is to be an appendix to manuals for programs which
+use these features.  There is a document entitled "readline.texinfo"
+which contains both end-user and programmer documentation for the
+GNU Readline Library.
+
+Copyright (C) 1988-2006 Free Software Foundation, Inc.
+
+Authored by Brian Fox and Chet Ramey.
+
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission notice
+identical to this one except for the removal of this paragraph (this
+paragraph not being relevant to the printed manual).
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided the copyright notice and this permission notice are preserved on
+all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+GNU Copyright statement is available to the distributee, and provided that
+the entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end ignore
+
+@comment If you are including this manual as an appendix, then set the
+@comment variable readline-appendix.
+
+@ifclear BashFeatures
+@defcodeindex bt
+@end ifclear
+
+@node Command Line Editing
+@chapter Command Line Editing
+
+This chapter describes the basic features of the @sc{gnu}
+command line editing interface.
+@ifset BashFeatures
+Command line editing is provided by the Readline library, which is
+used by several different programs, including Bash.
+@end ifset
+
+@menu
+* Introduction and Notation::  Notation used in this text.
+* Readline Interaction::       The minimum set of commands for editing a line.
+* Readline Init File::         Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+                               available for binding
+* Readline vi Mode::           A short description of how to make Readline
+                               behave like the vi editor.
+@ifset BashFeatures
+* Programmable Completion::    How to specify the possible completions for
+                               a specific command.
+* Programmable Completion Builtins::   Builtin commands to specify how to
+                               complete arguments for a particular command.
+@end ifset
+@end menu
+
+@node Introduction and Notation
+@section Introduction to Line Editing
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+The text @kbd{C-k} is read as `Control-K' and describes the character
+produced when the @key{k} key is pressed while the Control key
+is depressed.
+
+The text @kbd{M-k} is read as `Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the @key{k}
+key is pressed.
+The Meta key is labeled @key{ALT} on many keyboards.
+On keyboards with two keys labeled @key{ALT} (usually to either side of
+the space bar), the @key{ALT} on the left side is generally set to
+work as a Meta key.
+The @key{ALT} key on the right may also be configured to work as a
+Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+If you do not have a Meta or @key{ALT} key, or another key working as
+a Meta key, the identical keystroke can be generated by typing @key{ESC}
+@emph{first}, and then typing @key{k}.
+Either process is known as @dfn{metafying} the @key{k} key.
+
+The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the
+character produced by @dfn{metafying} @kbd{C-k}.
+
+In addition, several keys have their own names.  Specifically,
+@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all
+stand for themselves when seen in this text, or in an init file
+(@pxref{Readline Init File}).
+If your keyboard lacks a @key{LFD} key, typing @key{C-j} will
+produce the desired character.
+The @key{RET} key may be labeled @key{Return} or @key{Enter} on
+some keyboards.
+
+@node Readline Interaction
+@section Readline Interaction
+@cindex interaction, readline
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled.  The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line.  Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections.  Then, when you are satisfied with
+the line, you simply press @key{RET}.  You do not have to be at the
+end of the line to press @key{RET}; the entire line is accepted
+regardless of the location of the cursor within the line.
+
+@menu
+* Readline Bare Essentials::   The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands::  How to delete text, and how to get it back!
+* Readline Arguments::         Giving numeric arguments to commands.
+* Searching::                  Searching through previous lines.
+@end menu
+
+@node Readline Bare Essentials
+@subsection Readline Bare Essentials
+@cindex notation, readline
+@cindex command editing
+@cindex editing command lines
+
+In order to enter characters into the line, simply type them.  The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right.  If you mistype a character, you can use your
+erase character to back up and delete the mistyped character.
+
+Sometimes you may mistype a character, and
+not notice the error until you have typed several other characters.  In
+that case, you can type @kbd{C-b} to move the cursor to the left, and then
+correct your mistake.  Afterwards, you can move the cursor to the right
+with @kbd{C-f}.
+
+When you add text in the middle of a line, you will notice that characters
+to the right of the cursor are `pushed over' to make room for the text
+that you have inserted.  Likewise, when you delete text behind the cursor,
+characters to the right of the cursor are `pulled back' to fill in the
+blank space created by the removal of the text.  A list of the bare
+essentials for editing the text of an input line follows.
+
+@table @asis
+@item @kbd{C-b}
+Move back one character.
+@item @kbd{C-f}
+Move forward one character.
+@item @key{DEL} or @key{Backspace}
+Delete the character to the left of the cursor.
+@item @kbd{C-d}
+Delete the character underneath the cursor.
+@item @w{Printing characters}
+Insert the character into the line at the cursor.
+@item @kbd{C-_} or @kbd{C-x C-u}
+Undo the last editing command.  You can undo all the way back to an
+empty line.
+@end table
+
+@noindent
+(Depending on your configuration, the @key{Backspace} key be set to
+delete the character to the left of the cursor and the @key{DEL} key set
+to delete the character underneath the cursor, like @kbd{C-d}, rather
+than the character to the left of the cursor.)
+
+@node Readline Movement Commands
+@subsection Readline Movement Commands
+
+
+The above table describes the most basic keystrokes that you need
+in order to do editing of the input line.  For your convenience, many
+other commands have been added in addition to @kbd{C-b}, @kbd{C-f},
+@kbd{C-d}, and @key{DEL}.  Here are some commands for moving more rapidly
+about the line.
+
+@table @kbd
+@item C-a
+Move to the start of the line.
+@item C-e
+Move to the end of the line.
+@item M-f
+Move forward a word, where a word is composed of letters and digits.
+@item M-b
+Move backward a word.
+@item C-l
+Clear the screen, reprinting the current line at the top.
+@end table
+
+Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves
+forward a word.  It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+@node Readline Killing Commands
+@subsection Readline Killing Commands
+
+@cindex killing text
+@cindex yanking text
+
+@dfn{Killing} text means to delete the text from the line, but to save
+it away for later use, usually by @dfn{yanking} (re-inserting)
+it back into the line.
+(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+
+If the description for a command says that it `kills' text, then you can
+be sure that you can get the text back in a different (or the same)
+place later.
+
+When you use a kill command, the text is saved in a @dfn{kill-ring}.
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all.  The kill
+ring is not line specific; the text that you killed on a previously
+typed line is available to be yanked back later, when you are typing
+another line.
+@cindex kill ring
+
+Here is the list of commands for killing text.
+
+@table @kbd
+@item C-k
+Kill the text from the current cursor position to the end of the line.
+
+@item M-d
+Kill from the cursor 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 @kbd{M-f}.
+
+@item M-@key{DEL}
+Kill from the cursor the start of the current word, or, if between
+words, to the start of the previous word.
+Word boundaries are the same as those used by @kbd{M-b}.
+
+@item C-w
+Kill from the cursor to the previous whitespace.  This is different than
+@kbd{M-@key{DEL}} because the word boundaries differ.
+
+@end table
+
+Here is how to @dfn{yank} the text back into the line.  Yanking
+means to copy the most-recently-killed text from the kill buffer.
+
+@table @kbd
+@item C-y
+Yank the most recently killed text back into the buffer at the cursor.
+
+@item M-y
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is @kbd{C-y} or @kbd{M-y}.
+@end table
+
+@node Readline Arguments
+@subsection Readline Arguments
+
+You can pass numeric arguments to Readline commands.  Sometimes the
+argument acts as a repeat count, other times it is the @i{sign} of the
+argument that is significant.  If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction.  For example, to kill text back to the
+start of the line, you might type @samp{M-- C-k}.
+
+The general way to pass numeric arguments to a command is to type meta
+digits before the command.  If the first `digit' typed is a minus
+sign (@samp{-}), then the sign of the argument will be negative.  Once
+you have typed one meta digit to get the argument started, you can type
+the remainder of the digits, and then the command.  For example, to give
+the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d},
+which will delete the next ten characters on the input line.
+
+@node Searching
+@subsection Searching for Commands in the History
+
+Readline provides commands for searching through the command history
+@ifset BashFeatures
+(@pxref{Bash History Facilities})
+@end ifset
+for lines containing a specified string.
+There are two search modes:  @dfn{incremental} and @dfn{non-incremental}.
+
+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.
+To search backward in the history for a particular string, type
+@kbd{C-r}.  Typing @kbd{C-s} searches forward through the history.
+The characters present in the value of the @code{isearch-terminators} variable
+are used to terminate an incremental search.
+If that variable has not been assigned a value, the @key{ESC} and
+@kbd{C-J} characters will terminate an incremental search.
+@kbd{C-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.
+
+To find other matching entries in the history list, type @kbd{C-r} or
+@kbd{C-s} 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 @key{RET} will terminate the search and accept
+the line, thereby executing the command from the history list.
+A movement command will terminate the search, make the last line found
+the current line, and begin editing.
+
+Readline remembers the last incremental search string.  If two
+@kbd{C-r}s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
+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.
+
+@node Readline Init File
+@section Readline Init File
+@cindex initialization file, readline
+
+Although the Readline library comes with a set of Emacs-like
+keybindings installed by default, it is possible to use a different set
+of keybindings.
+Any user can customize programs that use Readline by putting
+commands in an @dfn{inputrc} file, conventionally in his home directory.
+The name of this
+@ifset BashFeatures
+file is taken from the value of the shell variable @env{INPUTRC}.  If
+@end ifset
+@ifclear BashFeatures
+file is taken from the value of the environment variable @env{INPUTRC}.  If
+@end ifclear
+that variable is unset, the default is @file{~/.inputrc}.  If that
+file does not exist or cannot be read, the ultimate default is
+@file{/etc/inputrc}.
+
+When a program which uses the Readline library starts up, the
+init file is read, and the key bindings are set.
+
+In addition, the @code{C-x C-r} command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+@menu
+* Readline Init File Syntax::  Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs::        Conditional key bindings in the inputrc file.
+
+* Sample Init File::           An example inputrc file.
+@end menu
+
+@node Readline Init File Syntax
+@subsection Readline Init File Syntax
+
+There are only a few basic constructs allowed in the
+Readline init file.  Blank lines are ignored.
+Lines beginning with a @samp{#} are comments.
+Lines beginning with a @samp{$} indicate conditional
+constructs (@pxref{Conditional Init Constructs}).  Other lines
+denote variable settings and key bindings.
+
+@table @asis
+@item Variable Settings
+You can modify the run-time behavior of Readline by
+altering the values of variables in Readline
+using the @code{set} command within the init file.
+The syntax is simple:
+
+@example
+set @var{variable} @var{value}
+@end example
+
+@noindent
+Here, for example, is how to
+change from the default Emacs-like key binding to use
+@code{vi} line editing commands:
+
+@example
+set editing-mode vi
+@end example
+
+Variable names and values, where appropriate, are recognized without regard
+to case.  Unrecognized variable names are ignored.
+
+Boolean variables (those that can be set to on or off) are set to on if
+the value is null or empty, @var{on} (case-insensitive), or 1.  Any other
+value results in the variable being set to off.
+
+@ifset BashFeatures
+The @w{@code{bind -V}} command lists the current Readline variable names
+and values.  @xref{Bash Builtins}.
+@end ifset
+
+A great deal of run-time behavior is changeable with the following
+variables.
+
+@cindex variables, readline
+@table @code
+
+@item bell-style
+@vindex bell-style
+Controls what happens when Readline wants to ring the terminal bell.
+If set to @samp{none}, Readline never rings the bell.  If set to
+@samp{visible}, Readline uses a visible bell if one is available.
+If set to @samp{audible} (the default), Readline attempts to ring
+the terminal's bell.
+
+@item bind-tty-special-chars
+@vindex bind-tty-special-chars
+If set to @samp{on}, Readline attempts to bind the control characters  
+treated specially by the kernel's terminal driver to their Readline
+equivalents.
+
+@item comment-begin
+@vindex comment-begin
+The string to insert at the beginning of the line when the
+@code{insert-comment} command is executed.  The default value
+is @code{"#"}.
+
+@item completion-ignore-case
+If set to @samp{on}, Readline performs filename matching and completion
+in a case-insensitive fashion.
+The default value is @samp{off}.
+
+@item completion-query-items
+@vindex completion-query-items
+The number of possible completions that determines when the user is
+asked whether the list of possibilities should be displayed.
+If the number of possible completions is greater than this value,
+Readline will ask the user whether or not he wishes to view
+them; otherwise, they are simply listed.
+This variable must be set to an integer value greater than or equal to 0.
+A negative value means Readline should never ask.
+The default limit is @code{100}.
+
+@item convert-meta
+@vindex convert-meta
+If set to @samp{on}, Readline will convert characters with the
+eighth bit set to an @sc{ascii} key sequence by stripping the eighth
+bit and prefixing an @key{ESC} character, converting them to a
+meta-prefixed key sequence.  The default value is @samp{on}.
+
+@item disable-completion
+@vindex disable-completion
+If set to @samp{On}, Readline will inhibit word completion.
+Completion  characters will be inserted into the line as if they had
+been mapped to @code{self-insert}.  The default is @samp{off}.
+
+@item editing-mode
+@vindex editing-mode
+The @code{editing-mode} variable controls which default set of
+key bindings is used.  By default, Readline starts up in Emacs editing
+mode, where the keystrokes are most similar to Emacs.  This variable can be
+set to either @samp{emacs} or @samp{vi}.
+
+@item enable-keypad
+@vindex enable-keypad
+When set to @samp{on}, Readline will try to enable the application
+keypad when it is called.  Some systems need this to enable the
+arrow keys.  The default is @samp{off}.
+
+@item expand-tilde
+@vindex expand-tilde
+If set to @samp{on}, tilde expansion is performed when Readline
+attempts word completion.  The default is @samp{off}.
+
+@item history-preserve-point
+@vindex history-preserve-point
+If set to @samp{on}, the history code attempts to place point at the
+same location on each history line retrieved with @code{previous-history}
+or @code{next-history}.  The default is @samp{off}.
+
+@item horizontal-scroll-mode
+@vindex horizontal-scroll-mode
+This variable can be set to either @samp{on} or @samp{off}.  Setting it
+to @samp{on} means that the text of the lines being edited will scroll
+horizontally on a single screen line when they are longer than the width
+of the screen, instead of wrapping onto a new screen line.  By default,
+this variable is set to @samp{off}.
+
+@item input-meta
+@vindex input-meta
+@vindex meta-flag
+If set to @samp{on}, Readline will enable eight-bit input (it
+will not clear the eighth bit in the characters it reads),
+regardless of what the terminal claims it can support.  The
+default value is @samp{off}.  The name @code{meta-flag} is a
+synonym for this variable.
+
+@item isearch-terminators
+@vindex isearch-terminators
+The string of characters that should terminate an incremental search without
+subsequently executing the character as a command (@pxref{Searching}).
+If this variable has not been given a value, the characters @key{ESC} and
+@kbd{C-J} will terminate an incremental search.
+
+@item keymap
+@vindex keymap
+Sets Readline's idea of the current keymap for key binding commands.
+Acceptable @code{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}.  The default value is @code{emacs}.
+The value of the @code{editing-mode} variable also affects the
+default keymap.
+
+@item mark-directories
+If set to @samp{on}, completed directory names have a slash
+appended.  The default is @samp{on}.
+
+@item mark-modified-lines
+@vindex mark-modified-lines
+This variable, when set to @samp{on}, causes Readline to display an
+asterisk (@samp{*}) at the start of history lines which have been modified.
+This variable is @samp{off} by default.
+
+@item mark-symlinked-directories
+@vindex mark-symlinked-directories
+If set to @samp{on}, completed names which are symbolic links
+to directories have a slash appended (subject to the value of
+@code{mark-directories}).
+The default is @samp{off}.
+
+@item match-hidden-files
+@vindex match-hidden-files
+This variable, when set to @samp{on}, causes Readline to match files whose
+names begin with a @samp{.} (hidden files) when performing filename
+completion, unless the leading @samp{.} is
+supplied by the user in the filename to be completed.
+This variable is @samp{on} by default.
+
+@item output-meta
+@vindex output-meta
+If set to @samp{on}, Readline will display characters with the
+eighth bit set directly rather than as a meta-prefixed escape
+sequence.  The default is @samp{off}.
+
+@item page-completions
+@vindex page-completions
+If set to @samp{on}, Readline uses an internal @code{more}-like pager
+to display a screenful of possible completions at a time.
+This variable is @samp{on} by default.
+
+@item print-completions-horizontally
+If set to @samp{on}, Readline will display completions with matches
+sorted horizontally in alphabetical order, rather than down the screen.
+The default is @samp{off}.
+
+@item show-all-if-ambiguous
+@vindex show-all-if-ambiguous
+This alters the default behavior of the completion functions.  If
+set to @samp{on}, 
+words which have more than one possible completion cause the
+matches to be listed immediately instead of ringing the bell.
+The default value is @samp{off}.
+
+@item show-all-if-unmodified
+@vindex show-all-if-unmodified
+This alters the default behavior of the completion functions in
+a fashion similar to @var{show-all-if-ambiguous}.
+If set to @samp{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.
+The default value is @samp{off}.
+
+@item visible-stats
+@vindex visible-stats
+If set to @samp{on}, a character denoting a file's type
+is appended to the filename when listing possible
+completions.  The default is @samp{off}.
+
+@end table
+
+@item Key Bindings
+The syntax for controlling key bindings in the init file is
+simple.  First you need to find the name of the command that you
+want to change.  The following sections contain tables of the command
+name, the default keybinding, if any, and a short description of what
+the command does.
+
+Once you know the name of the command, simply place on a line
+in the init file the name of the key
+you wish to bind the command to, a colon, and then the name of the
+command.
+There can be no space between the key name and the colon -- that will be
+interpreted as part of the key name.
+The name of the key can be expressed in different ways, depending on
+what you find most comfortable.
+
+In addition to command names, readline allows keys to be bound
+to a string that is inserted when the key is pressed (a @var{macro}).
+
+@ifset BashFeatures
+The @w{@code{bind -p}} command displays Readline function names and
+bindings in a format that can put directly into an initialization file.
+@xref{Bash Builtins}.
+@end ifset
+
+@table @asis
+@item @w{@var{keyname}: @var{function-name} or @var{macro}}
+@var{keyname} is the name of a key spelled out in English.  For example:
+@example
+Control-u: universal-argument
+Meta-Rubout: backward-kill-word
+Control-o: "> output"
+@end example
+
+In the above example, @kbd{C-u} is bound to the function
+@code{universal-argument},
+@kbd{M-DEL} is bound to the function @code{backward-kill-word}, and
+@kbd{C-o} is bound to run the macro
+expressed on the right hand side (that is, to insert the text
+@samp{> output} into the line).
+
+A number of symbolic character names are recognized while
+processing this key binding syntax:
+@var{DEL},
+@var{ESC},
+@var{ESCAPE},
+@var{LFD},
+@var{NEWLINE},
+@var{RET},
+@var{RETURN},
+@var{RUBOUT},
+@var{SPACE},
+@var{SPC},
+and
+@var{TAB}.
+
+@item @w{"@var{keyseq}": @var{function-name} or @var{macro}}
+@var{keyseq} differs from @var{keyname} above in that strings
+denoting an entire key sequence can be specified, by placing
+the key sequence in double quotes.  Some @sc{gnu} Emacs style key
+escapes can be used, as in the following example, but the
+special character names are not recognized.
+
+@example
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
+"\e[11~": "Function Key 1"
+@end example
+
+In the above example, @kbd{C-u} is again bound to the function
+@code{universal-argument} (just as it was in the first example),
+@samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file},
+and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert
+the text @samp{Function Key 1}.
+
+@end table
+
+The following @sc{gnu} Emacs style escape sequences are available when
+specifying key sequences:
+
+@table @code
+@item @kbd{\C-}
+control prefix
+@item @kbd{\M-}
+meta prefix
+@item @kbd{\e}
+an escape character
+@item @kbd{\\}
+backslash
+@item @kbd{\"}
+@key{"}, a double quotation mark
+@item @kbd{\'}
+@key{'}, a single quote or apostrophe
+@end table
+
+In addition to the @sc{gnu} Emacs style escape sequences, a second
+set of backslash escapes is available:
+
+@table @code
+@item \a
+alert (bell)
+@item \b
+backspace
+@item \d
+delete
+@item \f
+form feed
+@item \n
+newline
+@item \r
+carriage return
+@item \t
+horizontal tab
+@item \v
+vertical tab
+@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)
+@end table
+
+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 @samp{"} and @samp{'}.
+For example, the following binding will make @samp{@kbd{C-x} \}
+insert a single @samp{\} into the line:
+@example
+"\C-x\\": "\\"
+@end example
+
+@end table
+
+@node Conditional Init Constructs
+@subsection Conditional Init Constructs
+
+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.
+
+@table @code
+@item $if
+The @code{$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.
+
+@table @code
+@item mode
+The @code{mode=} form of the @code{$if} directive is used to test
+whether Readline is in @code{emacs} or @code{vi} mode.
+This may be used in conjunction
+with the @samp{set keymap} command, for instance, to set bindings in
+the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if
+Readline is starting out in @code{emacs} mode.
+
+@item term
+The @code{term=} 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
+@samp{=} is tested against both the full name of the terminal and
+the portion of the terminal name before the first @samp{-}.  This
+allows @code{sun} to match both @code{sun} and @code{sun-cmd},
+for instance.
+
+@item application
+The @var{application} construct is used to include
+application-specific settings.  Each program using the Readline
+library sets the @var{application name}, and you 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 Bash:
+@example
+$if Bash
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+$endif
+@end example
+@end table
+
+@item $endif
+This command, as seen in the previous example, terminates an
+@code{$if} command.
+
+@item $else
+Commands in this branch of the @code{$if} directive are executed if
+the test fails.
+
+@item $include
+This directive takes a single filename as an argument and reads commands
+and bindings from that file.
+For example, the following directive reads from @file{/etc/inputrc}:
+@example
+$include /etc/inputrc
+@end example
+@end table
+
+@node Sample Init File
+@subsection Sample Init File
+
+Here is an example of an @var{inputrc} file.  This illustrates key
+binding, variable assignment, and conditional syntax.
+
+@example
+@page
+# This file controls the behaviour of line input editing for
+# programs that use the GNU Readline library.  Existing
+# programs include FTP, Bash, and GDB.
+#
+# You can re-read the inputrc file with C-x C-r.
+# Lines beginning with '#' are comments.
+#
+# First, include any systemwide bindings and variable
+# assignments from /etc/Inputrc
+$include /etc/Inputrc
+
+#
+# Set various bindings for emacs mode.
+
+set editing-mode emacs 
+
+$if mode=emacs
+
+Meta-Control-h:        backward-kill-word      Text after the function name is ignored
+
+#
+# Arrow keys in keypad mode
+#
+#"\M-OD":        backward-char
+#"\M-OC":        forward-char
+#"\M-OA":        previous-history
+#"\M-OB":        next-history
+#
+# Arrow keys in ANSI mode
+#
+"\M-[D":        backward-char
+"\M-[C":        forward-char
+"\M-[A":        previous-history
+"\M-[B":        next-history
+#
+# Arrow keys in 8 bit keypad mode
+#
+#"\M-\C-OD":       backward-char
+#"\M-\C-OC":       forward-char
+#"\M-\C-OA":       previous-history
+#"\M-\C-OB":       next-history
+#
+# Arrow keys in 8 bit ANSI mode
+#
+#"\M-\C-[D":       backward-char
+#"\M-\C-[C":       forward-char
+#"\M-\C-[A":       previous-history
+#"\M-\C-[B":       next-history
+
+C-q: quoted-insert
+
+$endif
+
+# An old-style binding.  This happens to be the default.
+TAB: complete
+
+# Macros that are convenient for shell interaction
+$if Bash
+# edit the path
+"\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f"
+# prepare to type a quoted word --
+# insert open and close double quotes
+# and move to just after the open quote
+"\C-x\"": "\"\"\C-b"
+# insert a backslash (testing backslash escapes
+# in sequences and macros)
+"\C-x\\": "\\"
+# Quote the current or previous word
+"\C-xq": "\eb\"\ef\""
+# Add a binding to refresh the line, which is unbound
+"\C-xr": redraw-current-line
+# Edit variable on current line.
+"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+$endif
+
+# use a visible bell if one is available
+set bell-style visible
+
+# don't strip characters to 7 bits when reading
+set input-meta on
+
+# allow iso-latin1 characters to be inserted rather
+# than converted to prefix-meta sequences
+set convert-meta off
+
+# display characters with the eighth bit set directly
+# rather than as meta-prefixed characters
+set output-meta on
+
+# if there are more than 150 possible completions for
+# a word, ask the user if he wants to see all of them
+set completion-query-items 150
+
+# For FTP
+$if Ftp
+"\C-xg": "get \M-?"
+"\C-xt": "put \M-?"
+"\M-.": yank-last-arg
+$endif
+@end example
+
+@node Bindable Readline Commands
+@section Bindable Readline Commands
+
+@menu
+* Commands For Moving::                Moving about the line.
+* Commands For History::       Getting at previous lines.
+* Commands For Text::          Commands for changing text.
+* Commands For Killing::       Commands for killing and yanking.
+* Numeric Arguments::          Specifying numeric arguments, repeat counts.
+* Commands For Completion::    Getting Readline to do the typing for you.
+* Keyboard Macros::            Saving and re-executing typed characters
+* Miscellaneous Commands::     Other miscellaneous commands.
+@end menu
+
+This section describes Readline commands that may be bound to key
+sequences.
+@ifset BashFeatures
+You can list your key bindings by executing
+@w{@code{bind -P}} or, for a more terse format, suitable for an
+@var{inputrc} file, @w{@code{bind -p}}.  (@xref{Bash Builtins}.)
+@end ifset
+Command names without an accompanying key sequence are unbound by default.
+
+In the following descriptions, @dfn{point} refers to the current cursor
+position, and @dfn{mark} refers to a cursor position saved by the
+@code{set-mark} command.
+The text between the point and mark is referred to as the @dfn{region}.
+
+@node Commands For Moving
+@subsection Commands For Moving
+@ftable @code
+@item beginning-of-line (C-a)
+Move to the start of the current line.
+
+@item end-of-line (C-e)
+Move to the end of the line.
+
+@item forward-char (C-f)
+Move forward a character.
+
+@item backward-char (C-b)
+Move back a character.
+
+@item forward-word (M-f)
+Move forward to the end of the next word.  Words are composed of
+letters and digits.
+
+@item backward-word (M-b)
+Move back to the start of the current or previous word.  Words are
+composed of letters and digits.
+
+@item clear-screen (C-l)
+Clear the screen and redraw the current line,
+leaving the current line at the top of the screen.
+
+@item redraw-current-line ()
+Refresh the current line.  By default, this is unbound.
+
+@end ftable
+
+@node Commands For History
+@subsection Commands For Manipulating The History
+
+@ftable @code
+@item accept-line (Newline or Return)
+@ifset BashFeatures
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, add it to the history list according to the setting of
+the @env{HISTCONTROL} and @env{HISTIGNORE} variables.
+If this line is a modified history line, then restore the history line
+to its original state.
+@end ifset
+@ifclear BashFeatures
+Accept the line regardless of where the cursor is.
+If this line is
+non-empty, it may be added to the history list for future recall with
+@code{add_history()}.
+If this line is a modified history line, the history line is restored
+to its original state.
+@end ifclear
+
+@item previous-history (C-p)
+Move `back' through the history list, fetching the previous command.
+
+@item next-history (C-n)
+Move `forward' through the history list, fetching the next command.
+
+@item beginning-of-history (M-<)
+Move to the first line in the history.
+
+@item end-of-history (M->)
+Move to the end of the input history, i.e., the line currently
+being entered.
+
+@item 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.
+
+@item forward-search-history (C-s)
+Search forward starting at the current line and moving `down' through
+the the history as necessary.  This is an incremental search.
+
+@item non-incremental-reverse-search-history (M-p)
+Search backward starting at the current line and moving `up'
+through the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+@item non-incremental-forward-search-history (M-n)
+Search forward starting at the current line and moving `down'
+through the the history as necessary using a non-incremental search
+for a string supplied by the user.
+
+@item 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.
+By default, this command is unbound.
+
+@item 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.  By default, this command is unbound.
+
+@item 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 @var{n},
+insert the @var{n}th word from the previous command (the words
+in the previous command begin with word 0).  A negative argument
+inserts the @var{n}th word from the end of the previous command.
+Once the argument @var{n} is computed, the argument is extracted
+as if the @samp{!@var{n}} history expansion had been specified.
+
+@item yank-last-arg (M-. or M-_)
+Insert last argument to the previous command (the last word of the
+previous history entry).  With an
+argument, behave exactly like @code{yank-nth-arg}.
+Successive calls to @code{yank-last-arg} move back through the history
+list, inserting the last argument of each line in turn.
+The history expansion facilities are used to extract the last argument,
+as if the @samp{!$} history expansion had been specified.
+
+@end ftable
+
+@node Commands For Text
+@subsection Commands For Changing Text
+
+@ftable @code
+@item delete-char (C-d)
+Delete the character at point.  If point is at the
+beginning of the line, there are no characters in the line, and
+the last character typed was not bound to @code{delete-char}, then
+return @sc{eof}.
+
+@item backward-delete-char (Rubout)
+Delete the character behind the cursor.  A numeric argument means
+to kill the characters instead of deleting them.
+
+@item 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.  By default, this is not bound to a key.
+
+@item quoted-insert (C-q or C-v)
+Add the next character typed to the line verbatim.  This is
+how to insert key sequences like @kbd{C-q}, for example.
+
+@ifclear BashFeatures
+@item tab-insert (M-@key{TAB})
+Insert a tab character.
+@end ifclear
+
+@item self-insert (a, b, A, 1, !, @dots{})
+Insert yourself.
+
+@item transpose-chars (C-t)
+Drag the character before the cursor forward over
+the character at the cursor, moving the
+cursor forward as well.  If the insertion point
+is at the end of the line, then this
+transposes the last two characters of the line.
+Negative arguments have no effect.
+
+@item transpose-words (M-t)
+Drag the word before point past the word after point,
+moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+
+@item upcase-word (M-u)
+Uppercase the current (or following) word.  With a negative argument,
+uppercase the previous word, but do not move the cursor.
+
+@item downcase-word (M-l)
+Lowercase the current (or following) word.  With a negative argument,
+lowercase the previous word, but do not move the cursor.
+
+@item capitalize-word (M-c)
+Capitalize the current (or following) word.  With a negative argument,
+capitalize the previous word, but do not move the cursor.
+
+@item 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
+@code{emacs} mode; @code{vi} mode does overwrite differently.
+Each call to @code{readline()} starts in insert mode.
+
+In overwrite mode, characters bound to @code{self-insert} replace
+the text at point rather than pushing the text to the right.
+Characters bound to @code{backward-delete-char} replace the character
+before point with a space.
+
+By default, this command is unbound.
+
+@end ftable
+
+@node Commands For Killing
+@subsection Killing And Yanking
+
+@ftable @code
+
+@item kill-line (C-k)
+Kill the text from point to the end of the line.
+
+@item backward-kill-line (C-x Rubout)
+Kill backward to the beginning of the line.
+
+@item unix-line-discard (C-u)
+Kill backward from the cursor to the beginning of the current line.
+
+@item kill-whole-line ()
+Kill all characters on the current line, no matter where point is.
+By default, this is unbound.
+
+@item 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 @code{forward-word}.
+
+@item backward-kill-word (M-@key{DEL})
+Kill the word behind point.
+Word boundaries are the same as @code{backward-word}.
+
+@item 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.
+
+@item 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.
+
+@item delete-horizontal-space ()
+Delete all spaces and tabs around point.  By default, this is unbound.
+
+@item kill-region ()
+Kill the text in the current region.
+By default, this command is unbound.
+
+@item copy-region-as-kill ()
+Copy the text in the region to the kill buffer, so it can be yanked
+right away.  By default, this command is unbound.
+
+@item copy-backward-word ()
+Copy the word before point to the kill buffer.
+The word boundaries are the same as @code{backward-word}.
+By default, this command is unbound.
+
+@item copy-forward-word ()
+Copy the word following point to the kill buffer.
+The word boundaries are the same as @code{forward-word}.
+By default, this command is unbound.
+
+@item yank (C-y)
+Yank the top of the kill ring into the buffer at point.
+
+@item yank-pop (M-y)
+Rotate the kill-ring, and yank the new top.  You can only do this if
+the prior command is @code{yank} or @code{yank-pop}.
+@end ftable
+
+@node Numeric Arguments
+@subsection Specifying Numeric Arguments
+@ftable @code
+
+@item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--})
+Add this digit to the argument already accumulating, or start a new
+argument.  @kbd{M--} starts a negative argument.
+
+@item 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 @code{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.
+By default, this is not bound to a key.
+@end ftable
+
+@node Commands For Completion
+@subsection Letting Readline Type For You
+
+@ftable @code
+@item complete (@key{TAB})
+Attempt to perform completion on the text before point.
+The actual completion performed is application-specific.
+@ifset BashFeatures
+Bash attempts completion treating the text as a variable (if the
+text begins with @samp{$}), username (if the text begins with
+@samp{~}), hostname (if the text begins with @samp{@@}), or
+command (including aliases and functions) in turn.  If none 
+of these produces a match, filename completion is attempted.
+@end ifset
+@ifclear BashFeatures
+The default is filename completion.
+@end ifclear
+
+@item possible-completions (M-?)
+List the possible completions of the text before point.
+
+@item insert-completions (M-*)
+Insert all completions of the text before point that would have
+been generated by @code{possible-completions}.
+
+@item menu-complete ()
+Similar to @code{complete}, but replaces the word to be completed
+with a single match from the list of possible completions.
+Repeated execution of @code{menu-complete} 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 @code{bell-style})
+and the original text is restored.
+An argument of @var{n} moves @var{n} 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 @key{TAB}, but is unbound
+by default.
+
+@item delete-char-or-list ()
+Deletes the character under the cursor if not at the beginning or
+end of the line (like @code{delete-char}).
+If at the end of the line, behaves identically to
+@code{possible-completions}.
+This command is unbound by default.
+
+@ifset BashFeatures
+@item complete-filename (M-/)
+Attempt filename completion on the text before point.
+
+@item possible-filename-completions (C-x /)
+List the possible completions of the text before point,
+treating it as a filename.
+
+@item complete-username (M-~)
+Attempt completion on the text before point, treating
+it as a username.
+
+@item possible-username-completions (C-x ~)
+List the possible completions of the text before point,
+treating it as a username.
+
+@item complete-variable (M-$)
+Attempt completion on the text before point, treating
+it as a shell variable.
+
+@item possible-variable-completions (C-x $)
+List the possible completions of the text before point,
+treating it as a shell variable.
+
+@item complete-hostname (M-@@)
+Attempt completion on the text before point, treating
+it as a hostname.
+
+@item possible-hostname-completions (C-x @@)
+List the possible completions of the text before point,
+treating it as a hostname.
+
+@item 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.
+
+@item possible-command-completions (C-x !)
+List the possible completions of the text before point,
+treating it as a command name.
+
+@item dynamic-complete-history (M-@key{TAB})
+Attempt completion on the text before point, comparing
+the text against lines from the history list for possible
+completion matches.
+
+@item 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
+(@pxref{Brace Expansion}).
+
+@end ifset
+@end ftable
+
+@node Keyboard Macros
+@subsection Keyboard Macros
+@ftable @code
+
+@item start-kbd-macro (C-x ()
+Begin saving the characters typed into the current keyboard macro.
+
+@item end-kbd-macro (C-x ))
+Stop saving the characters typed into the current keyboard macro
+and save the definition.
+
+@item 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.
+
+@end ftable
+
+@node Miscellaneous Commands
+@subsection Some Miscellaneous Commands
+@ftable @code
+
+@item re-read-init-file (C-x C-r)
+Read in the contents of the @var{inputrc} file, and incorporate
+any bindings or variable assignments found there.
+
+@item abort (C-g)
+Abort the current editing command and
+ring the terminal's bell (subject to the setting of
+@code{bell-style}).
+
+@item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{})
+If the metafied character @var{x} is lowercase, run the command
+that is bound to the corresponding uppercase character.
+
+@item prefix-meta (@key{ESC})
+Metafy the next character typed.  This is for keyboards
+without a meta key.  Typing @samp{@key{ESC} f} is equivalent to typing
+@kbd{M-f}.
+
+@item undo (C-_ or C-x C-u)
+Incremental undo, separately remembered for each line.
+
+@item revert-line (M-r)
+Undo all changes made to this line.  This is like executing the @code{undo}
+command enough times to get back to the beginning.
+
+@ifset BashFeatures
+@item tilde-expand (M-&)
+@end ifset
+@ifclear BashFeatures
+@item tilde-expand (M-~)
+@end ifclear
+Perform tilde expansion on the current word.
+
+@item set-mark (C-@@)
+Set the mark to the point.  If a
+numeric argument is supplied, the mark is set to that position.
+
+@item 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.
+
+@item 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.
+
+@item 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.
+
+@item insert-comment (M-#)
+Without a numeric argument, the value of the @code{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 @code{comment-begin}, the value is inserted, otherwise
+the characters in @code{comment-begin} are deleted from the beginning of
+the line.
+In either case, the line is accepted as if a newline had been typed.
+@ifset BashFeatures
+The default value of @code{comment-begin} 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.
+@end ifset
+
+@item 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 @var{inputrc} file.  This command is unbound by default.
+
+@item dump-variables ()
+Print all of the settable 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 @var{inputrc} file.  This command is unbound by default.
+
+@item 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 @var{inputrc} file.  This command is unbound by default.
+
+@ifset BashFeatures
+@item 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 file names for possible completions.
+
+@item glob-expand-word (C-x *)
+The word before point is treated as a pattern for pathname expansion,
+and the list of matching file names is inserted, replacing the word.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
+
+@item glob-list-expansions (C-x g)
+The list of expansions that would have been generated by
+@code{glob-expand-word} is displayed, and the line is redrawn.
+If a numeric argument is supplied, a @samp{*} is appended before
+pathname expansion.
+
+@item display-shell-version (C-x C-v)
+Display version information about the current instance of Bash.
+
+@item 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 (@pxref{Shell Expansions}).
+
+@item history-expand-line (M-^)
+Perform history expansion on the current line.
+
+@item magic-space ()
+Perform history expansion on the current line and insert a space
+(@pxref{History Interaction}).
+
+@item alias-expand-line ()
+Perform alias expansion on the current line (@pxref{Aliases}).
+
+@item history-and-alias-expand-line ()
+Perform history and alias expansion on the current line.
+
+@item insert-last-argument (M-. or M-_)
+A synonym for @code{yank-last-arg}.
+
+@item 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.
+
+@item edit-and-execute-command (C-xC-e)
+Invoke an editor on the current command line, and execute the result as shell
+commands.
+Bash attempts to invoke
+@code{$VISUAL}, @code{$EDITOR}, and @code{emacs}
+as the editor, in that order.
+
+@end ifset
+
+@ifclear BashFeatures
+@item emacs-editing-mode (C-e)
+When in @code{vi} command mode, this causes a switch to @code{emacs}
+editing mode.
+
+@item vi-editing-mode (M-C-j)
+When in @code{emacs} editing mode, this causes a switch to @code{vi}
+editing mode.
+
+@end ifclear
+
+@end ftable
+
+@node Readline vi Mode
+@section Readline vi Mode
+
+While the Readline library does not have a full set of @code{vi}
+editing functions, it does contain enough to allow simple editing
+of the line.  The Readline @code{vi} mode behaves as specified in
+the @sc{posix} 1003.2 standard.
+
+@ifset BashFeatures
+In order to switch interactively between @code{emacs} and @code{vi}
+editing modes, use the @samp{set -o emacs} and @samp{set -o vi}
+commands (@pxref{The Set Builtin}).
+@end ifset
+@ifclear BashFeatures
+In order to switch interactively between @code{emacs} and @code{vi}
+editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode
+when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode).
+@end ifclear
+The Readline default is @code{emacs} mode.
+
+When you enter a line in @code{vi} mode, you are already placed in
+`insertion' mode, as if you had typed an @samp{i}.  Pressing @key{ESC}
+switches you into `command' mode, where you can edit the text of the
+line with the standard @code{vi} movement keys, move to previous
+history lines with @samp{k} and subsequent lines with @samp{j}, and
+so forth.
+
+@ifset BashFeatures
+@node Programmable Completion
+@section Programmable Completion
+@cindex programmable completion
+
+When word completion is attempted for an argument to a command for
+which a completion specification (a @var{compspec}) has been defined
+using the @code{complete} builtin (@pxref{Programmable Completion Builtins}),
+the programmable completion facilities are invoked. 
+
+First, the command name is identified.
+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.
+
+Once a compspec has been found, it is used to generate the list of
+matching words.
+If a compspec is not found, the default Bash completion
+described above (@pxref{Commands For Completion}) is performed.
+
+First, the actions specified by the compspec are used.
+Only matches which are prefixed by the word being completed are
+returned.
+When the @option{-f} or @option{-d} option is used for filename or
+directory name completion, the shell variable @env{FIGNORE} is
+used to filter the matches.
+@xref{Bash Variables}, for a description of @env{FIGNORE}.
+
+Any completions specified by a filename expansion pattern to the
+@option{-G} option are generated next.
+The words generated by the pattern need not match the word being completed.
+The @env{GLOBIGNORE} shell variable is not used to filter the matches,
+but the @env{FIGNORE} shell variable is used.
+
+Next, the string specified as the argument to the @option{-W} option
+is considered.
+The string is first split using the characters in the @env{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 (@pxref{Shell Expansions}).
+The results are split using the rules described above
+(@pxref{Word Splitting}).
+The results of the expansion are prefix-matched against the word being
+completed, and the matching words become the possible completions.
+
+After these matches have been generated, any shell function or command
+specified with the @option{-F} and @option{-C} options is invoked.
+When the command or function is invoked, the @env{COMP_LINE} and
+@env{COMP_POINT} variables are assigned values as described above
+(@pxref{Bash Variables}).
+If a shell function is being invoked, the @env{COMP_WORDS} and
+@env{COMP_CWORD} variables are also set.
+When the function or command is invoked, the first argument is the
+name of the command whose arguments are being completed, the
+second argument is the word being completed, and the third argument
+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.
+
+Any function specified with @option{-F} is invoked first.
+The function may use any of the shell facilities, including the
+@code{compgen} builtin described below
+(@pxref{Programmable Completion Builtins}), to generate the matches.
+It must put the possible completions in the @env{COMPREPLY} array
+variable.
+
+Next, any command specified with the @option{-C} 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.
+
+After all of the possible completions are generated, any filter
+specified with the @option{-X} option is applied to the list.
+The filter is a pattern as used for pathname expansion; a @samp{&}
+in the pattern is replaced with the text of the word being completed.
+A literal @samp{&} 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 @samp{!} negates the pattern; in this case any completion
+not matching the pattern will be removed.
+
+Finally, any prefix and suffix specified with the @option{-P} and @option{-S}
+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.
+
+If the previously-applied actions do not generate any matches, and the
+@option{-o dirnames} option was supplied to @code{complete} when the
+compspec was defined, directory name completion is attempted. 
+
+If the @option{-o plusdirs} option was supplied to @code{complete} when
+the compspec was defined, directory name completion is attempted and any
+matches are added to the results of the other actions.
+
+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 Bash completions are not attempted, and the Readline default
+of filename completion is disabled.
+If the @option{-o bashdefault} option was supplied to @code{complete} when
+the compspec was defined, the default Bash completions are attempted
+if the compspec generates no matches.
+If the @option{-o default} option was supplied to @code{complete} when the
+compspec was defined, Readline's default completion will be performed
+if the compspec (and, if attempted, the default Bash completions)
+generate no matches.
+
+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 @var{mark-directories} Readline variable, regardless
+of the setting of the @var{mark-symlinked-directories} Readline variable.
+
+@node Programmable Completion Builtins
+@section Programmable Completion Builtins
+@cindex completion builtins
+
+Two builtin commands are available to manipulate the programmable completion
+facilities.
+
+@table @code
+@item compgen
+@btindex compgen
+@example
+@code{compgen [@var{option}] [@var{word}]}
+@end example
+
+Generate possible completion matches for @var{word} according to
+the @var{option}s, which may be any option accepted by the
+@code{complete}
+builtin with the exception of @option{-p} and @option{-r}, and write
+the matches to the standard output.
+When using the @option{-F} or @option{-C} options, the various shell variables
+set by the programmable completion facilities, while available, will not
+have useful values.
+
+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 @var{word} is specified, only those completions matching @var{word}
+will be displayed.
+
+The return value is true unless an invalid option is supplied, or no
+matches were generated.
+
+@item complete
+@btindex complete
+@example
+@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
+[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}]
+[-C @var{command}] @var{name} [@var{name} @dots{}]}
+@code{complete -pr [@var{name} @dots{}]}
+@end example
+
+Specify how arguments to each @var{name} should be completed.
+If the @option{-p} 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 @option{-r} option removes a completion specification for
+each @var{name}, or, if no @var{name}s are supplied, all
+completion specifications.
+
+The process of applying these completion specifications when word completion
+is attempted is described above (@pxref{Programmable Completion}).
+
+Other options, if specified, have the following meanings.
+The arguments to the @option{-G}, @option{-W}, and @option{-X} options
+(and, if necessary, the @option{-P} and @option{-S} options)
+should be quoted to protect them from expansion before the
+@code{complete} builtin is invoked.
+
+
+@table @code
+@item -o @var{comp-option}
+The @var{comp-option} controls several aspects of the compspec's behavior
+beyond the simple generation of completions.
+@var{comp-option} may be one of: 
+
+@table @code
+
+@item bashdefault
+Perform the rest of the default Bash completions if the compspec
+generates no matches.
+
+@item default
+Use Readline's default filename completion if the compspec generates
+no matches.
+
+@item dirnames
+Perform directory name completion if the compspec generates no matches.
+
+@item filenames
+Tell Readline that the compspec generates filenames, so it can perform any
+filename-specific processing (like adding a slash to directory names or
+suppressing trailing spaces).  This option is intended to be used with
+shell functions specified with @option{-F}.
+
+@item nospace
+Tell Readline not to append a space (the default) to words completed at
+the end of the line.
+
+@item 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.
+
+@end table
+
+@item -A @var{action}
+The @var{action} may be one of the following to generate a list of possible
+completions:
+
+@table @code
+@item alias
+Alias names.  May also be specified as @option{-a}.
+
+@item arrayvar
+Array variable names.
+
+@item binding
+Readline key binding names (@pxref{Bindable Readline Commands}).
+
+@item builtin
+Names of shell builtin commands.  May also be specified as @option{-b}.
+
+@item command
+Command names.  May also be specified as @option{-c}.
+
+@item directory
+Directory names.  May also be specified as @option{-d}.
+
+@item disabled
+Names of disabled shell builtins.
+
+@item enabled
+Names of enabled shell builtins.
+
+@item export
+Names of exported shell variables.  May also be specified as @option{-e}.
+
+@item file
+File names.  May also be specified as @option{-f}.
+
+@item function
+Names of shell functions.
+
+@item group
+Group names.  May also be specified as @option{-g}.
+
+@item helptopic
+Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
+
+@item hostname
+Hostnames, as taken from the file specified by the
+@env{HOSTFILE} shell variable (@pxref{Bash Variables}).
+
+@item job
+Job names, if job control is active.  May also be specified as @option{-j}.
+
+@item keyword
+Shell reserved words.  May also be specified as @option{-k}.
+
+@item running
+Names of running jobs, if job control is active.
+
+@item service
+Service names.  May also be specified as @option{-s}.
+
+@item setopt
+Valid arguments for the @option{-o} option to the @code{set} builtin
+(@pxref{The Set Builtin}).
+
+@item shopt
+Shell option names as accepted by the @code{shopt} builtin
+(@pxref{Bash Builtins}).
+
+@item signal
+Signal names.
+
+@item stopped
+Names of stopped jobs, if job control is active.
+
+@item user
+User names.  May also be specified as @option{-u}.
+
+@item variable
+Names of all shell variables.  May also be specified as @option{-v}.
+@end table
+
+@item -G @var{globpat}
+The filename expansion pattern @var{globpat} is expanded to generate
+the possible completions.
+
+@item -W @var{wordlist}
+The @var{wordlist} is split using the characters in the
+@env{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.
+
+@item -C @var{command}
+@var{command} is executed in a subshell environment, and its output is
+used as the possible completions.
+
+@item -F @var{function}
+The shell function @var{function} is executed in the current shell
+environment.
+When it finishes, the possible completions are retrieved from the value
+of the @env{COMPREPLY} array variable.
+
+@item -X @var{filterpat}
+@var{filterpat} is a pattern as used for filename expansion.
+It is applied to the list of possible completions generated by the
+preceding options and arguments, and each completion matching
+@var{filterpat} is removed from the list.
+A leading @samp{!} in @var{filterpat} negates the pattern; in this
+case, any completion not matching @var{filterpat} is removed.
+
+@item -P @var{prefix}
+@var{prefix} is added at the beginning of each possible completion
+after all other options have been applied.
+
+@item -S @var{suffix}
+@var{suffix} is appended to each possible completion
+after all other options have been applied.
+@end table
+
+The return value is true unless an invalid option is supplied, an option
+other than @option{-p} or @option{-r} is supplied without a @var{name}
+argument, an attempt is made to remove a completion specification for
+a @var{name} for which no specification exists, or
+an error occurs adding a completion specification.
+
+@end table
+@end ifset
index 5f43662da32457819919e2c9f3931748958ca5e6..247c1158463e8f63e4494747119a7ad663eab4b4 100644 (file)
@@ -1,7 +1,7 @@
 /* rlprivate.h -- functions and variables global to the readline library,
                  but not intended for use by applications. */
 
-/* Copyright (C) 1999-2005 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2006 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -316,6 +316,14 @@ extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *));
 extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *));
 
 /* util.c */
+#if defined (USE_VARARGS) && defined (PREFER_STDARG)
+extern void _rl_ttymsg (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
+extern void _rl_errmsg (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
+#else
+extern void _rl_ttymsg ();
+extern void _rl_errmsg ();
+#endif
+
 extern int _rl_abort_internal PARAMS((void));
 extern char *_rl_strindex PARAMS((const char *, const char *));
 extern int _rl_qsort_string_compare PARAMS((char **, char **));
index 0a570f85840c659024f3a91c9128f54dedb093ed..dd1f604981ecfdedea919d5a0777db4852eaabf5 100644 (file)
@@ -464,7 +464,7 @@ static void
 rltty_warning (msg)
      char *msg;
 {
-  fprintf (stderr, "readline: warning: %s\n", msg);
+  _rl_errmsg ("warning: %s", msg);
 }
 #endif
 
@@ -475,7 +475,7 @@ TIOTYPE *tp;
 {
   if ((tp->c_oflag & OPOST) == 0)
     {
-      rltty_warning ("turning on OPOST for terminal\r");
+      _rl_errmsg ("warning: turning on OPOST for terminal\r");
       tp->c_oflag |= OPOST|ONLCR;
     }
 }
@@ -501,7 +501,7 @@ _get_tty_settings (tty, tiop)
       if (OUTPUT_BEING_FLUSHED (tiop))
        {
 #if defined (FLUSHO) && defined (_AIX41)
-         rltty_warning ("turning off output flushing");
+         _rl_errmsg ("warning: turning off output flushing");
          tiop->c_lflag &= ~FLUSHO;
          break;
 #else
index 1f1ec8be18ebaf7f86554a9940d8a05f49565a54..bdc2e13fbd6a91d35710c5847992776bbfb1228e 100644 (file)
@@ -220,6 +220,86 @@ rl_tilde_expand (ignore, key)
   return (0);
 }
 
+#if defined (USE_VARARGS)
+void
+#if defined (PREFER_STDARG)
+_rl_ttymsg (const char *format, ...)
+#else
+_rl_ttymsg (va_alist)
+     va_dcl
+#endif
+{
+  va_list args;
+#if defined (PREFER_VARARGS)
+  char *format;
+#endif
+
+#if defined (PREFER_STDARG)
+  va_start (args, format);
+#else
+  va_start (args);
+  format = va_arg (args, char *);
+#endif
+
+  fprintf (stderr, "readline: ");
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+  fflush (stderr);
+
+  va_end (args);
+
+  rl_forced_update_display ();
+}
+
+void
+#if defined (PREFER_STDARG)
+_rl_errmsg (const char *format, ...)
+#else
+_rl_errmsg (va_alist)
+     va_dcl
+#endif
+{
+  va_list args;
+#if defined (PREFER_VARARGS)
+  char *format;
+#endif
+
+#if defined (PREFER_STDARG)
+  va_start (args, format);
+#else
+  va_start (args);
+  format = va_arg (args, char *);
+#endif
+
+  fprintf (stderr, "readline: ");
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+  fflush (stderr);
+
+  va_end (args);
+}
+#else /* !USE_VARARGS */
+void
+_rl_ttymsg (format, arg1, arg2)
+     char *format;
+{
+  fprintf (stderr, "readline: ");
+  fprintf (stderr, format, arg1, arg2);
+  fprintf (stderr, "\n");
+
+  rl_forced_update_display ();
+}
+
+void
+_rl_errmsg (format, arg1, arg2)
+     char *format;
+{
+  fprintf (stderr, "readline: ");
+  fprintf (stderr, format, arg1, arg2);
+  fprintf (stderr, "\n");
+}
+#endif /* !USE_VARARGS */
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     String Utility Functions                    */
index 5f2279d0e15bfec2e428903b31f47462954ead7b..e9c5565af068a5b7d7af0c2ec33f7d57d8ac6152 100644 (file)
@@ -91,6 +91,9 @@ get_tmpdir (flags)
   char *tdir;
 
   tdir = (flags & MT_USETMPDIR) ? get_string_value ("TMPDIR") : (char *)NULL;
+  if (tdir && (file_iswdir (tdir) == 0 || strlen (tdir) > PATH_MAX))
+    tdir = 0;
+
   if (tdir == 0)
     tdir = get_sys_tmpdir ();
 
diff --git a/mksyntax.c.gettext b/mksyntax.c.gettext
new file mode 100644 (file)
index 0000000..b93e579
--- /dev/null
@@ -0,0 +1,417 @@
+/*
+ * mksyntax.c - construct shell syntax table for fast char attribute lookup.
+ */
+
+/* Copyright (C) 2000-2002 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#include <stdio.h>
+#include "bashansi.h"
+#include "chartypes.h"
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+
+#include "bashintl.h"
+
+#include "syntax.h"
+
+extern int optind;
+extern char *optarg;
+
+#ifndef errno
+extern int errno;
+#endif
+
+#ifndef HAVE_STRERROR
+extern char *strerror();
+#endif
+
+struct wordflag {
+       int     flag;
+       char    *fstr;
+} wordflags[] = {
+       { CWORD,        "CWORD" },
+       { CSHMETA,      "CSHMETA" },
+       { CSHBRK,       "CSHBRK" },
+       { CBACKQ,       "CBACKQ" },
+       { CQUOTE,       "CQUOTE" },
+       { CSPECL,       "CSPECL" },
+       { CEXP,         "CEXP" },
+       { CBSDQUOTE,    "CBSDQUOTE" },
+       { CBSHDOC,      "CBSHDOC" },
+       { CGLOB,        "CGLOB" },
+       { CXGLOB,       "CXGLOB" },
+       { CXQUOTE,      "CXQUOTE" },
+       { CSPECVAR,     "CSPECVAR" },
+       { CSUBSTOP,     "CSUBSTOP" },
+       { CBLANK,       "CBLANK" },
+};
+       
+#define N_WFLAGS       (sizeof (wordflags) / sizeof (wordflags[0]))
+#define SYNSIZE                256
+
+int    lsyntax[SYNSIZE];
+int    debug;
+char   *progname;
+
+char   preamble[] = "\
+/*\n\
+ * This file was generated by mksyntax.  DO NOT EDIT.\n\
+ */\n\
+\n";
+
+char   includes[] = "\
+#include \"config.h\"\n\
+#include \"stdc.h\"\n\
+#include \"syntax.h\"\n\n";
+
+static void
+usage()
+{
+  fprintf (stderr, _("%s: usage: %s [-d] [-o filename]\n"), progname, progname);
+  exit (2);
+}
+
+#ifdef INCLUDE_UNUSED
+static int
+getcflag (s)
+     char *s;
+{
+  int i;
+
+  for (i = 0; i < N_WFLAGS; i++)
+    if (strcmp (s, wordflags[i].fstr) == 0)
+      return wordflags[i].flag;
+  return -1;
+}
+#endif
+
+static char *
+cdesc (i)
+     int i;
+{
+  static char xbuf[16];
+
+  if (i == ' ')
+    return "SPC";
+  else if (ISPRINT (i))
+    {
+      xbuf[0] = i;
+      xbuf[1] = '\0';
+      return (xbuf);
+    }
+  else if (i == CTLESC)
+    return "CTLESC";
+  else if (i == CTLNUL)
+    return "CTLNUL";
+  else if (i == '\033')                /* ASCII */
+    return "ESC";
+
+  xbuf[0] = '\\';
+  xbuf[2] = '\0';
+    
+  switch (i)
+    {
+#ifdef __STDC__
+    case '\a': xbuf[1] = 'a'; break;
+    case '\v': xbuf[1] = 'v'; break;
+#else
+    case '\007': xbuf[1] = 'a'; break;
+    case 0x0B: xbuf[1] = 'v'; break;
+#endif
+    case '\b': xbuf[1] = 'b'; break;
+    case '\f': xbuf[1] = 'f'; break;
+    case '\n': xbuf[1] = 'n'; break;
+    case '\r': xbuf[1] = 'r'; break;
+    case '\t': xbuf[1] = 't'; break;
+    default: sprintf (xbuf, "%d", i); break;
+    }
+
+  return xbuf; 
+}
+
+static char *
+getcstr (f)
+     int f;
+{
+  int i;
+
+  for (i = 0; i < N_WFLAGS; i++)
+    if (f == wordflags[i].flag)
+      return (wordflags[i].fstr);
+  return ((char *)NULL);
+}
+
+static void
+addcstr (str, flag)
+     char *str;
+     int flag;
+{
+  char *s, *fstr;
+  unsigned char uc;
+
+  for (s = str; s && *s; s++)
+    {
+      uc = *s;
+
+      if (debug)
+       {
+         fstr = getcstr (flag);
+         fprintf(stderr, _("added %s for character %s\n"), fstr, cdesc(uc));
+       }
+       
+      lsyntax[uc] |= flag;
+    }
+}
+
+static void
+addcchar (c, flag)
+     unsigned char c;
+     int flag;
+{
+  char *fstr;
+
+  if (debug)
+    {
+      fstr = getcstr (flag);
+      fprintf (stderr, _("added %s for character %s\n"), fstr, cdesc(c));
+    }
+  lsyntax[c] |= flag;
+}
+
+static void
+addblanks ()
+{
+  register int i;
+  unsigned char uc;
+
+  for (i = 0; i < SYNSIZE; i++)
+    {
+      uc = i;
+      /* Since we don't call setlocale(), this defaults to the "C" locale, and
+        the default blank characters will be space and tab. */
+      if (isblank (uc))
+       lsyntax[uc] |= CBLANK;
+    }
+}
+
+/* load up the correct flag values in lsyntax */
+static void
+load_lsyntax ()
+{
+  /* shell metacharacters */
+  addcstr (shell_meta_chars, CSHMETA);
+
+  /* shell word break characters */
+  addcstr (shell_break_chars, CSHBRK);
+
+  addcchar ('`', CBACKQ);
+
+  addcstr (shell_quote_chars, CQUOTE);
+
+  addcchar (CTLESC, CSPECL);
+  addcchar (CTLNUL, CSPECL);
+
+  addcstr (shell_exp_chars, CEXP);
+
+  addcstr (slashify_in_quotes, CBSDQUOTE);
+  addcstr (slashify_in_here_document, CBSHDOC);
+
+  addcstr (shell_glob_chars, CGLOB);
+
+#if defined (EXTENDED_GLOB)
+  addcstr (ext_glob_chars, CXGLOB);
+#endif
+
+  addcstr (shell_quote_chars, CXQUOTE);
+  addcchar ('\\', CXQUOTE);
+
+  addcstr ("@*#?-$!", CSPECVAR);       /* omits $0...$9 and $_ */
+
+  addcstr ("-=?+", CSUBSTOP);          /* OP in ${paramOPword} */
+
+  addblanks ();
+}
+
+static void
+dump_lflags (fp, ind)
+     FILE *fp;
+     int ind;
+{
+  int xflags, first, i;
+
+  xflags = lsyntax[ind];
+  first = 1;
+
+  if (xflags == 0)
+    fputs (wordflags[0].fstr, fp);
+  else
+    {
+      for (i = 1; i < N_WFLAGS; i++)
+       if (xflags & wordflags[i].flag)
+         {
+           if (first)
+             first = 0;
+           else
+             putc ('|', fp);
+           fputs (wordflags[i].fstr, fp);
+         }
+    }
+}
+
+static void
+wcomment (fp, i)
+     FILE *fp;
+     int i;
+{
+  fputs ("\t\t/* ", fp);
+
+  fprintf (fp, "%s", cdesc(i));
+      
+  fputs (" */", fp);
+}
+
+static void
+dump_lsyntax (fp)
+     FILE *fp;
+{
+  int i;
+
+  fprintf (fp, "int sh_syntabsiz = %d;\n", SYNSIZE);
+  fprintf (fp, "int sh_syntaxtab[%d] = {\n", SYNSIZE);
+
+  for (i = 0; i < SYNSIZE; i++)
+    {
+      putc ('\t', fp);
+      dump_lflags (fp, i);
+      putc (',', fp);
+      wcomment (fp, i);
+      putc ('\n', fp);
+    }
+
+  fprintf (fp, "};\n");
+}
+
+int
+main(argc, argv)
+     int argc;
+     char **argv;
+{
+  int opt, i;
+  char *filename;
+  FILE *fp;
+
+  if ((progname = strrchr (argv[0], '/')) == 0)
+    progname = argv[0];
+  else
+    progname++;
+
+  filename = (char *)NULL;
+  debug = 0;
+
+  while ((opt = getopt (argc, argv, "do:")) != EOF)
+    {
+      switch (opt)
+       {
+       case 'd':
+         debug = 1;
+         break;
+       case 'o':
+         filename = optarg;
+         break;
+       default:
+         usage();
+       }
+    }
+
+  argc -= optind;
+  argv += optind;
+
+  if (filename)
+    {
+      fp = fopen (filename, "w");
+      if (fp == 0)
+       {
+         fprintf (stderr, _("%s: %s: cannot open: %s\n"), progname, filename, strerror(errno));
+         exit (1);
+       }
+    }
+  else
+    {
+      filename = "stdout";
+      fp = stdout;
+    }
+
+
+  for (i = 0; i < SYNSIZE; i++)
+    lsyntax[i] = CWORD;
+
+  load_lsyntax ();
+
+  fprintf (fp, "%s\n", preamble);
+  fprintf (fp, "%s\n", includes);
+
+  dump_lsyntax (fp);
+
+  if (fp != stdout)
+    fclose (fp);
+  exit (0);
+}
+
+
+#if !defined (HAVE_STRERROR)
+
+#include <bashtypes.h>
+#ifndef _MINIX
+#  include <sys/param.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+/* Return a string corresponding to the error number E.  From
+   the ANSI C spec. */
+#if defined (strerror)
+#  undef strerror
+#endif
+
+char *
+strerror (e)
+     int e;
+{
+  static char emsg[40];
+#if defined (HAVE_SYS_ERRLIST)
+  extern int sys_nerr;
+  extern char *sys_errlist[];
+
+  if (e > 0 && e < sys_nerr)
+    return (sys_errlist[e]);
+  else
+#endif /* HAVE_SYS_ERRLIST */
+    {
+      sprintf (emsg, _("Unknown system error %d"), e);
+      return (&emsg[0]);
+    }
+}
+#endif /* HAVE_STRERROR */
diff --git a/mksyntax.c~ b/mksyntax.c~
new file mode 100644 (file)
index 0000000..1bbaa42
--- /dev/null
@@ -0,0 +1,415 @@
+/*
+ * mksyntax.c - construct shell syntax table for fast char attribute lookup.
+ */
+
+/* Copyright (C) 2000-2002 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#include <stdio.h>
+#include "bashansi.h"
+#include "chartypes.h"
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
+
+#include "syntax.h"
+
+extern int optind;
+extern char *optarg;
+
+#ifndef errno
+extern int errno;
+#endif
+
+#ifndef HAVE_STRERROR
+extern char *strerror();
+#endif
+
+struct wordflag {
+       int     flag;
+       char    *fstr;
+} wordflags[] = {
+       { CWORD,        "CWORD" },
+       { CSHMETA,      "CSHMETA" },
+       { CSHBRK,       "CSHBRK" },
+       { CBACKQ,       "CBACKQ" },
+       { CQUOTE,       "CQUOTE" },
+       { CSPECL,       "CSPECL" },
+       { CEXP,         "CEXP" },
+       { CBSDQUOTE,    "CBSDQUOTE" },
+       { CBSHDOC,      "CBSHDOC" },
+       { CGLOB,        "CGLOB" },
+       { CXGLOB,       "CXGLOB" },
+       { CXQUOTE,      "CXQUOTE" },
+       { CSPECVAR,     "CSPECVAR" },
+       { CSUBSTOP,     "CSUBSTOP" },
+       { CBLANK,       "CBLANK" },
+};
+       
+#define N_WFLAGS       (sizeof (wordflags) / sizeof (wordflags[0]))
+#define SYNSIZE                256
+
+int    lsyntax[SYNSIZE];
+int    debug;
+char   *progname;
+
+char   preamble[] = "\
+/*\n\
+ * This file was generated by mksyntax.  DO NOT EDIT.\n\
+ */\n\
+\n";
+
+char   includes[] = "\
+#include \"config.h\"\n\
+#include \"stdc.h\"\n\
+#include \"syntax.h\"\n\n";
+
+static void
+usage()
+{
+  fprintf (stderr, _("%s: usage: %s [-d] [-o filename]\n"), progname, progname);
+  exit (2);
+}
+
+#ifdef INCLUDE_UNUSED
+static int
+getcflag (s)
+     char *s;
+{
+  int i;
+
+  for (i = 0; i < N_WFLAGS; i++)
+    if (strcmp (s, wordflags[i].fstr) == 0)
+      return wordflags[i].flag;
+  return -1;
+}
+#endif
+
+static char *
+cdesc (i)
+     int i;
+{
+  static char xbuf[16];
+
+  if (i == ' ')
+    return "SPC";
+  else if (ISPRINT (i))
+    {
+      xbuf[0] = i;
+      xbuf[1] = '\0';
+      return (xbuf);
+    }
+  else if (i == CTLESC)
+    return "CTLESC";
+  else if (i == CTLNUL)
+    return "CTLNUL";
+  else if (i == '\033')                /* ASCII */
+    return "ESC";
+
+  xbuf[0] = '\\';
+  xbuf[2] = '\0';
+    
+  switch (i)
+    {
+#ifdef __STDC__
+    case '\a': xbuf[1] = 'a'; break;
+    case '\v': xbuf[1] = 'v'; break;
+#else
+    case '\007': xbuf[1] = 'a'; break;
+    case 0x0B: xbuf[1] = 'v'; break;
+#endif
+    case '\b': xbuf[1] = 'b'; break;
+    case '\f': xbuf[1] = 'f'; break;
+    case '\n': xbuf[1] = 'n'; break;
+    case '\r': xbuf[1] = 'r'; break;
+    case '\t': xbuf[1] = 't'; break;
+    default: sprintf (xbuf, "%d", i); break;
+    }
+
+  return xbuf; 
+}
+
+static char *
+getcstr (f)
+     int f;
+{
+  int i;
+
+  for (i = 0; i < N_WFLAGS; i++)
+    if (f == wordflags[i].flag)
+      return (wordflags[i].fstr);
+  return ((char *)NULL);
+}
+
+static void
+addcstr (str, flag)
+     char *str;
+     int flag;
+{
+  char *s, *fstr;
+  unsigned char uc;
+
+  for (s = str; s && *s; s++)
+    {
+      uc = *s;
+
+      if (debug)
+       {
+         fstr = getcstr (flag);
+         fprintf(stderr, _("added %s for character %s\n"), fstr, cdesc(uc));
+       }
+       
+      lsyntax[uc] |= flag;
+    }
+}
+
+static void
+addcchar (c, flag)
+     unsigned char c;
+     int flag;
+{
+  char *fstr;
+
+  if (debug)
+    {
+      fstr = getcstr (flag);
+      fprintf (stderr, _("added %s for character %s\n"), fstr, cdesc(c));
+    }
+  lsyntax[c] |= flag;
+}
+
+static void
+addblanks ()
+{
+  register int i;
+  unsigned char uc;
+
+  for (i = 0; i < SYNSIZE; i++)
+    {
+      uc = i;
+      /* Since we don't call setlocale(), this defaults to the "C" locale, and
+        the default blank characters will be space and tab. */
+      if (isblank (uc))
+       lsyntax[uc] |= CBLANK;
+    }
+}
+
+/* load up the correct flag values in lsyntax */
+static void
+load_lsyntax ()
+{
+  /* shell metacharacters */
+  addcstr (shell_meta_chars, CSHMETA);
+
+  /* shell word break characters */
+  addcstr (shell_break_chars, CSHBRK);
+
+  addcchar ('`', CBACKQ);
+
+  addcstr (shell_quote_chars, CQUOTE);
+
+  addcchar (CTLESC, CSPECL);
+  addcchar (CTLNUL, CSPECL);
+
+  addcstr (shell_exp_chars, CEXP);
+
+  addcstr (slashify_in_quotes, CBSDQUOTE);
+  addcstr (slashify_in_here_document, CBSHDOC);
+
+  addcstr (shell_glob_chars, CGLOB);
+
+#if defined (EXTENDED_GLOB)
+  addcstr (ext_glob_chars, CXGLOB);
+#endif
+
+  addcstr (shell_quote_chars, CXQUOTE);
+  addcchar ('\\', CXQUOTE);
+
+  addcstr ("@*#?-$!", CSPECVAR);       /* omits $0...$9 and $_ */
+
+  addcstr ("-=?+", CSUBSTOP);          /* OP in ${paramOPword} */
+
+  addblanks ();
+}
+
+static void
+dump_lflags (fp, ind)
+     FILE *fp;
+     int ind;
+{
+  int xflags, first, i;
+
+  xflags = lsyntax[ind];
+  first = 1;
+
+  if (xflags == 0)
+    fputs (wordflags[0].fstr, fp);
+  else
+    {
+      for (i = 1; i < N_WFLAGS; i++)
+       if (xflags & wordflags[i].flag)
+         {
+           if (first)
+             first = 0;
+           else
+             putc ('|', fp);
+           fputs (wordflags[i].fstr, fp);
+         }
+    }
+}
+
+static void
+wcomment (fp, i)
+     FILE *fp;
+     int i;
+{
+  fputs ("\t\t/* ", fp);
+
+  fprintf (fp, "%s", cdesc(i));
+      
+  fputs (" */", fp);
+}
+
+static void
+dump_lsyntax (fp)
+     FILE *fp;
+{
+  int i;
+
+  fprintf (fp, "int sh_syntabsiz = %d;\n", SYNSIZE);
+  fprintf (fp, "int sh_syntaxtab[%d] = {\n", SYNSIZE);
+
+  for (i = 0; i < SYNSIZE; i++)
+    {
+      putc ('\t', fp);
+      dump_lflags (fp, i);
+      putc (',', fp);
+      wcomment (fp, i);
+      putc ('\n', fp);
+    }
+
+  fprintf (fp, "};\n");
+}
+
+int
+main(argc, argv)
+     int argc;
+     char **argv;
+{
+  int opt, i;
+  char *filename;
+  FILE *fp;
+
+  if ((progname = strrchr (argv[0], '/')) == 0)
+    progname = argv[0];
+  else
+    progname++;
+
+  filename = (char *)NULL;
+  debug = 0;
+
+  while ((opt = getopt (argc, argv, "do:")) != EOF)
+    {
+      switch (opt)
+       {
+       case 'd':
+         debug = 1;
+         break;
+       case 'o':
+         filename = optarg;
+         break;
+       default:
+         usage();
+       }
+    }
+
+  argc -= optind;
+  argv += optind;
+
+  if (filename)
+    {
+      fp = fopen (filename, "w");
+      if (fp == 0)
+       {
+         fprintf (stderr, _("%s: %s: cannot open: %s\n"), progname, filename, strerror(errno));
+         exit (1);
+       }
+    }
+  else
+    {
+      filename = "stdout";
+      fp = stdout;
+    }
+
+
+  for (i = 0; i < SYNSIZE; i++)
+    lsyntax[i] = CWORD;
+
+  load_lsyntax ();
+
+  fprintf (fp, "%s\n", preamble);
+  fprintf (fp, "%s\n", includes);
+
+  dump_lsyntax (fp);
+
+  if (fp != stdout)
+    fclose (fp);
+  exit (0);
+}
+
+
+#if !defined (HAVE_STRERROR)
+
+#include <bashtypes.h>
+#ifndef _MINIX
+#  include <sys/param.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+/* Return a string corresponding to the error number E.  From
+   the ANSI C spec. */
+#if defined (strerror)
+#  undef strerror
+#endif
+
+char *
+strerror (e)
+     int e;
+{
+  static char emsg[40];
+#if defined (HAVE_SYS_ERRLIST)
+  extern int sys_nerr;
+  extern char *sys_errlist[];
+
+  if (e > 0 && e < sys_nerr)
+    return (sys_errlist[e]);
+  else
+#endif /* HAVE_SYS_ERRLIST */
+    {
+      sprintf (emsg, _("Unknown system error %d"), e);
+      return (&emsg[0]);
+    }
+}
+#endif /* HAVE_STRERROR */
index c8a56275f0879df231f10c7dff06628c730429cb..e626b2c7a32a0b671b89fca0043f00bc4c122e92 100644 (file)
--- a/nojobs.c
+++ b/nojobs.c
@@ -803,7 +803,7 @@ wait_for (pid)
     {
       fprintf (stderr, "%s", j_strsignal (WTERMSIG (status)));
       if (WIFCORED (status))
-       fprintf (stderr, " (core dumped)");
+       fprintf (stderr, _(" (core dumped)"));
       fprintf (stderr, "\n");
     }
 
index a3d51f670dc3b23b66ef6cb8668c67f6904d55ca..c8a56275f0879df231f10c7dff06628c730429cb 100644 (file)
--- a/nojobs.c~
+++ b/nojobs.c~
@@ -518,9 +518,11 @@ make_child (command, async_p)
       sigprocmask (SIG_SETMASK, &top_level_mask, (sigset_t *)NULL);
 #endif
 
+#if 0
       /* Ignore INT and QUIT in asynchronous children. */
       if (async_p)
        last_asynchronous_pid = getpid ();
+#endif
 
       default_tty_job_signals ();
     }
index 97207aea0e44f1598035039f3211418e572450c5..e1c2c8abdd2bb7e734fcb8996d5c900778e2f140 100644 (file)
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 5
+#define PATCHLEVEL 9
 
 #endif /* _PATCHLEVEL_H_ */
diff --git a/patchlevel.h~ b/patchlevel.h~
new file mode 100644 (file)
index 0000000..97207ae
--- /dev/null
@@ -0,0 +1,30 @@
+/* patchlevel.h -- current bash patch level */
+
+/* Copyright (C) 2001-2006 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#if !defined (_PATCHLEVEL_H_)
+#define _PATCHLEVEL_H_
+
+/* It's important that there be no other strings in this file that match the
+   regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
+   looks for to find the patch level (for the sccs version string). */
+
+#define PATCHLEVEL 5
+
+#endif /* _PATCHLEVEL_H_ */
diff --git a/shell.c b/shell.c
index f8d32e277dad74faf766da099ce0dd6180da8423..73b422bc89da454f147ae2758840dcef1b04e7b4 100644 (file)
--- a/shell.c
+++ b/shell.c
@@ -1,6 +1,6 @@
 /* shell.c -- GNU's idea of the POSIX shell specification. */
 
-/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2006 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -1731,7 +1731,7 @@ show_shell_usage (fp, extra)
   char *set_opts, *s, *t;
 
   if (extra)
-    fprintf (fp, "GNU bash, version %s-(%s)\n", shell_version_string (), MACHTYPE);
+    fprintf (fp, _("GNU bash, version %s-(%s)\n"), shell_version_string (), MACHTYPE);
   fprintf (fp, _("Usage:\t%s [GNU long option] [option] ...\n\t%s [GNU long option] [option] script-file ...\n"),
             shell_name, shell_name);
   fputs (_("GNU long options:\n"), fp);
index 15c84f25843234b0c945dca81bc00399d1f4c97b..f8d32e277dad74faf766da099ce0dd6180da8423 100644 (file)
--- a/shell.c~
+++ b/shell.c~
@@ -1416,7 +1416,7 @@ open_shell_script (script_name)
        }
       else if (sample_len > 0 && (check_binary_file (sample, sample_len)))
        {
-         internal_error ("%s: cannot execute binary file", filename);
+         internal_error (_("%s: cannot execute binary file"), filename);
          exit (EX_BINARY_FILE);
        }
       /* Now rewind the file back to the beginning. */
index 127facf6a684e329c3d4dfb01bfab894ea47011c..0d016b51ca0c8c070062f40ec98afed7fbba9486 100644 (file)
--- a/siglist.c
+++ b/siglist.c
@@ -44,26 +44,26 @@ initialize_siglist ()
   for (i = 0; i < NSIG; i++)
     sys_siglist[i] = (char *)0x0;
 
-  sys_siglist[0] = "Bogus signal";
+  sys_siglist[0] = _("Bogus signal");
 
 #if defined (SIGHUP)
-  sys_siglist[SIGHUP] = "Hangup";
+  sys_siglist[SIGHUP] = _("Hangup");
 #endif
 
 #if defined (SIGINT)
-  sys_siglist[SIGINT] = "Interrupt";
+  sys_siglist[SIGINT] = _("Interrupt");
 #endif
 
 #if defined (SIGQUIT)
-  sys_siglist[SIGQUIT] = "Quit";
+  sys_siglist[SIGQUIT] = _("Quit");
 #endif
 
 #if defined (SIGILL)
-  sys_siglist[SIGILL] = "Illegal instruction";
+  sys_siglist[SIGILL] = _("Illegal instruction");
 #endif
 
 #if defined (SIGTRAP)
-  sys_siglist[SIGTRAP] = "BPT trace/trap";
+  sys_siglist[SIGTRAP] = _("BPT trace/trap");
 #endif
 
 #if defined (SIGIOT) && !defined (SIGABRT)
@@ -71,59 +71,59 @@ initialize_siglist ()
 #endif
 
 #if defined (SIGABRT)
-  sys_siglist[SIGABRT] = "ABORT instruction";
+  sys_siglist[SIGABRT] = _("ABORT instruction");
 #endif
 
 #if defined (SIGEMT)
-  sys_siglist[SIGEMT] = "EMT instruction";
+  sys_siglist[SIGEMT] = _("EMT instruction");
 #endif
 
 #if defined (SIGFPE)
-  sys_siglist[SIGFPE] = "Floating point exception";
+  sys_siglist[SIGFPE] = _("Floating point exception");
 #endif
 
 #if defined (SIGKILL)
-  sys_siglist[SIGKILL] = "Killed";
+  sys_siglist[SIGKILL] = _("Killed");
 #endif
 
 #if defined (SIGBUS)
-  sys_siglist[SIGBUS] = "Bus error";
+  sys_siglist[SIGBUS] = _("Bus error");
 #endif
 
 #if defined (SIGSEGV)
-  sys_siglist[SIGSEGV] = "Segmentation fault";
+  sys_siglist[SIGSEGV] = _("Segmentation fault");
 #endif
 
 #if defined (SIGSYS)
-  sys_siglist[SIGSYS] = "Bad system call";
+  sys_siglist[SIGSYS] = _("Bad system call");
 #endif
 
 #if defined (SIGPIPE)
-  sys_siglist[SIGPIPE] = "Broken pipe";
+  sys_siglist[SIGPIPE] = _("Broken pipe");
 #endif
 
 #if defined (SIGALRM)
-  sys_siglist[SIGALRM] = "Alarm clock";
+  sys_siglist[SIGALRM] = _("Alarm clock");
 #endif
 
 #if defined (SIGTERM)
-  sys_siglist[SIGTERM] = "Terminated";
+  sys_siglist[SIGTERM] = _("Terminated");
 #endif
 
 #if defined (SIGURG)
-  sys_siglist[SIGURG] = "Urgent IO condition";
+  sys_siglist[SIGURG] = _("Urgent IO condition");
 #endif
 
 #if defined (SIGSTOP)
-  sys_siglist[SIGSTOP] = "Stopped (signal)";
+  sys_siglist[SIGSTOP] = _("Stopped (signal)");
 #endif
 
 #if defined (SIGTSTP)
-  sys_siglist[SIGTSTP] = "Stopped";
+  sys_siglist[SIGTSTP] = _("Stopped");
 #endif
 
 #if defined (SIGCONT)
-  sys_siglist[SIGCONT] = "Continue";
+  sys_siglist[SIGCONT] = _("Continue");
 #endif
 
 #if !defined (SIGCHLD) && defined (SIGCLD)
@@ -131,87 +131,87 @@ initialize_siglist ()
 #endif
 
 #if defined (SIGCHLD)
-  sys_siglist[SIGCHLD] = "Child death or stop";
+  sys_siglist[SIGCHLD] = _("Child death or stop");
 #endif
 
 #if defined (SIGTTIN)
-  sys_siglist[SIGTTIN] = "Stopped (tty input)";
+  sys_siglist[SIGTTIN] = _("Stopped (tty input)");
 #endif
 
 #if defined (SIGTTOU)
-  sys_siglist[SIGTTOU] = "Stopped (tty output)";
+  sys_siglist[SIGTTOU] = _("Stopped (tty output)");
 #endif
 
 #if defined (SIGIO)
-  sys_siglist[SIGIO] = "I/O ready";
+  sys_siglist[SIGIO] = _("I/O ready");
 #endif
 
 #if defined (SIGXCPU)
-  sys_siglist[SIGXCPU] = "CPU limit";
+  sys_siglist[SIGXCPU] = _("CPU limit");
 #endif
 
 #if defined (SIGXFSZ)
-  sys_siglist[SIGXFSZ] = "File limit";
+  sys_siglist[SIGXFSZ] = _("File limit");
 #endif
 
 #if defined (SIGVTALRM)
-  sys_siglist[SIGVTALRM] = "Alarm (virtual)";
+  sys_siglist[SIGVTALRM] = _("Alarm (virtual)");
 #endif
 
 #if defined (SIGPROF)
-  sys_siglist[SIGPROF] = "Alarm (profile)";
+  sys_siglist[SIGPROF] = _("Alarm (profile)");
 #endif
 
 #if defined (SIGWINCH)
-  sys_siglist[SIGWINCH] = "Window changed";
+  sys_siglist[SIGWINCH] = _("Window changed");
 #endif
 
 #if defined (SIGLOST)
-  sys_siglist[SIGLOST] = "Record lock";
+  sys_siglist[SIGLOST] = _("Record lock");
 #endif
 
 #if defined (SIGUSR1)
-  sys_siglist[SIGUSR1] = "User signal 1";
+  sys_siglist[SIGUSR1] = _("User signal 1");
 #endif
 
 #if defined (SIGUSR2)
-  sys_siglist[SIGUSR2] = "User signal 2";
+  sys_siglist[SIGUSR2] = _("User signal 2");
 #endif
 
 #if defined (SIGMSG)
-  sys_siglist[SIGMSG] = "HFT input data pending";
+  sys_siglist[SIGMSG] = _("HFT input data pending");
 #endif
 
 #if defined (SIGPWR)
-  sys_siglist[SIGPWR] = "power failure imminent";
+  sys_siglist[SIGPWR] = _("power failure imminent");
 #endif
 
 #if defined (SIGDANGER)
-  sys_siglist[SIGDANGER] = "system crash imminent";
+  sys_siglist[SIGDANGER] = _("system crash imminent");
 #endif
 
 #if defined (SIGMIGRATE)
-  sys_siglist[SIGMIGRATE] = "migrate process to another CPU";
+  sys_siglist[SIGMIGRATE] = _("migrate process to another CPU");
 #endif
 
 #if defined (SIGPRE)
-  sys_siglist[SIGPRE] = "programming error";
+  sys_siglist[SIGPRE] = _("programming error");
 #endif
 
 #if defined (SIGGRANT)
-  sys_siglist[SIGGRANT] = "HFT monitor mode granted";
+  sys_siglist[SIGGRANT] = _("HFT monitor mode granted");
 #endif
 
 #if defined (SIGRETRACT)
-  sys_siglist[SIGRETRACT] = "HFT monitor mode retracted";
+  sys_siglist[SIGRETRACT] = _("HFT monitor mode retracted");
 #endif
 
 #if defined (SIGSOUND)
-  sys_siglist[SIGSOUND] = "HFT sound sequence has completed";
+  sys_siglist[SIGSOUND] = _("HFT sound sequence has completed");
 #endif
 
 #if defined (SIGINFO)
-  sys_siglist[SIGINFO] = "Information request";
+  sys_siglist[SIGINFO] = _("Information request");
 #endif
 
   for (i = 0; i < NSIG; i++)
@@ -219,9 +219,9 @@ initialize_siglist ()
       if (!sys_siglist[i])
        {
          sys_siglist[i] =
-           (char *)xmalloc (10 + strlen ("Unknown Signal #"));
+           (char *)xmalloc (10 + strlen (_("Unknown Signal #")));
 
-         sprintf (sys_siglist[i], "Unknown Signal #%d", i);
+         sprintf (sys_siglist[i], _("Unknown Signal #%d"), i);
        }
     }
 }
diff --git a/siglist.c~ b/siglist.c~
new file mode 100644 (file)
index 0000000..127facf
--- /dev/null
@@ -0,0 +1,228 @@
+/* siglist.c -- signal list for those machines that don't have one. */
+
+/* Copyright (C) 1989 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#if !defined (HAVE_SYS_SIGLIST) && !defined (HAVE_UNDER_SYS_SIGLIST) && !defined (HAVE_STRSIGNAL)
+
+#include <stdio.h>
+#include "bashtypes.h"
+#include <signal.h>
+
+#include "siglist.h"
+
+#if !defined (NSIG)
+#  include "trap.h"
+#endif
+
+#include "xmalloc.h"
+
+char *sys_siglist[NSIG];
+
+void
+initialize_siglist ()
+{
+  register int i;
+
+  for (i = 0; i < NSIG; i++)
+    sys_siglist[i] = (char *)0x0;
+
+  sys_siglist[0] = "Bogus signal";
+
+#if defined (SIGHUP)
+  sys_siglist[SIGHUP] = "Hangup";
+#endif
+
+#if defined (SIGINT)
+  sys_siglist[SIGINT] = "Interrupt";
+#endif
+
+#if defined (SIGQUIT)
+  sys_siglist[SIGQUIT] = "Quit";
+#endif
+
+#if defined (SIGILL)
+  sys_siglist[SIGILL] = "Illegal instruction";
+#endif
+
+#if defined (SIGTRAP)
+  sys_siglist[SIGTRAP] = "BPT trace/trap";
+#endif
+
+#if defined (SIGIOT) && !defined (SIGABRT)
+#define SIGABRT SIGIOT
+#endif
+
+#if defined (SIGABRT)
+  sys_siglist[SIGABRT] = "ABORT instruction";
+#endif
+
+#if defined (SIGEMT)
+  sys_siglist[SIGEMT] = "EMT instruction";
+#endif
+
+#if defined (SIGFPE)
+  sys_siglist[SIGFPE] = "Floating point exception";
+#endif
+
+#if defined (SIGKILL)
+  sys_siglist[SIGKILL] = "Killed";
+#endif
+
+#if defined (SIGBUS)
+  sys_siglist[SIGBUS] = "Bus error";
+#endif
+
+#if defined (SIGSEGV)
+  sys_siglist[SIGSEGV] = "Segmentation fault";
+#endif
+
+#if defined (SIGSYS)
+  sys_siglist[SIGSYS] = "Bad system call";
+#endif
+
+#if defined (SIGPIPE)
+  sys_siglist[SIGPIPE] = "Broken pipe";
+#endif
+
+#if defined (SIGALRM)
+  sys_siglist[SIGALRM] = "Alarm clock";
+#endif
+
+#if defined (SIGTERM)
+  sys_siglist[SIGTERM] = "Terminated";
+#endif
+
+#if defined (SIGURG)
+  sys_siglist[SIGURG] = "Urgent IO condition";
+#endif
+
+#if defined (SIGSTOP)
+  sys_siglist[SIGSTOP] = "Stopped (signal)";
+#endif
+
+#if defined (SIGTSTP)
+  sys_siglist[SIGTSTP] = "Stopped";
+#endif
+
+#if defined (SIGCONT)
+  sys_siglist[SIGCONT] = "Continue";
+#endif
+
+#if !defined (SIGCHLD) && defined (SIGCLD)
+#define SIGCHLD SIGCLD
+#endif
+
+#if defined (SIGCHLD)
+  sys_siglist[SIGCHLD] = "Child death or stop";
+#endif
+
+#if defined (SIGTTIN)
+  sys_siglist[SIGTTIN] = "Stopped (tty input)";
+#endif
+
+#if defined (SIGTTOU)
+  sys_siglist[SIGTTOU] = "Stopped (tty output)";
+#endif
+
+#if defined (SIGIO)
+  sys_siglist[SIGIO] = "I/O ready";
+#endif
+
+#if defined (SIGXCPU)
+  sys_siglist[SIGXCPU] = "CPU limit";
+#endif
+
+#if defined (SIGXFSZ)
+  sys_siglist[SIGXFSZ] = "File limit";
+#endif
+
+#if defined (SIGVTALRM)
+  sys_siglist[SIGVTALRM] = "Alarm (virtual)";
+#endif
+
+#if defined (SIGPROF)
+  sys_siglist[SIGPROF] = "Alarm (profile)";
+#endif
+
+#if defined (SIGWINCH)
+  sys_siglist[SIGWINCH] = "Window changed";
+#endif
+
+#if defined (SIGLOST)
+  sys_siglist[SIGLOST] = "Record lock";
+#endif
+
+#if defined (SIGUSR1)
+  sys_siglist[SIGUSR1] = "User signal 1";
+#endif
+
+#if defined (SIGUSR2)
+  sys_siglist[SIGUSR2] = "User signal 2";
+#endif
+
+#if defined (SIGMSG)
+  sys_siglist[SIGMSG] = "HFT input data pending";
+#endif
+
+#if defined (SIGPWR)
+  sys_siglist[SIGPWR] = "power failure imminent";
+#endif
+
+#if defined (SIGDANGER)
+  sys_siglist[SIGDANGER] = "system crash imminent";
+#endif
+
+#if defined (SIGMIGRATE)
+  sys_siglist[SIGMIGRATE] = "migrate process to another CPU";
+#endif
+
+#if defined (SIGPRE)
+  sys_siglist[SIGPRE] = "programming error";
+#endif
+
+#if defined (SIGGRANT)
+  sys_siglist[SIGGRANT] = "HFT monitor mode granted";
+#endif
+
+#if defined (SIGRETRACT)
+  sys_siglist[SIGRETRACT] = "HFT monitor mode retracted";
+#endif
+
+#if defined (SIGSOUND)
+  sys_siglist[SIGSOUND] = "HFT sound sequence has completed";
+#endif
+
+#if defined (SIGINFO)
+  sys_siglist[SIGINFO] = "Information request";
+#endif
+
+  for (i = 0; i < NSIG; i++)
+    {
+      if (!sys_siglist[i])
+       {
+         sys_siglist[i] =
+           (char *)xmalloc (10 + strlen ("Unknown Signal #"));
+
+         sprintf (sys_siglist[i], "Unknown Signal #%d", i);
+       }
+    }
+}
+#endif /* !HAVE_SYS_SIGLIST && !HAVE_UNDER_SYS_SIGLIST && !HAVE_STRSIGNAL */
diff --git a/subst.c b/subst.c
index 2e7fd8ef75b26e0238ddf3ddac84b36603daa3ef..d5026e0b98814ecc04853620dd88289c186db2a7 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -1278,7 +1278,7 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
     {
       if (no_longjmp_on_fatal_error == 0)
        {                       /* { */
-         report_error ("bad substitution: no closing `%s' in %s", "}", string);
+         report_error (_("bad substitution: no closing `%s' in %s"), "}", string);
          last_command_exit_value = EXECUTION_FAILURE;
          exp_jump_to_top_level (DISCARD);
        }
@@ -6970,7 +6970,7 @@ add_string:
                    sindex = t_index;
                    goto add_character;
                  }
-               report_error ("bad substitution: no closing \"`\" in %s", string+t_index);
+               report_error (_("bad substitution: no closing \"`\" in %s") , string+t_index);
                free (string);
                free (istring);
                return ((temp == &extract_string_error) ? &expand_word_error
index e7645fdd963159fe6adddc71ed66d0bfe6ad2c78..03edfde085a7b568715be0e376632879bc99ded4 100644 (file)
--- a/subst.c~
+++ b/subst.c~
@@ -1278,7 +1278,7 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
     {
       if (no_longjmp_on_fatal_error == 0)
        {                       /* { */
-         report_error ("bad substitution: no closing `%s' in %s", "}", string);
+         report_error (_("bad substitution: no closing `%s' in %s"), "}", string);
          last_command_exit_value = EXECUTION_FAILURE;
          exp_jump_to_top_level (DISCARD);
        }
@@ -4370,7 +4370,7 @@ process_substitute (string, open_for_read_in_child)
     {
       if (sh_unset_nodelay_mode (fd) < 0)
        {
-         sys_error (_("cannout reset nodelay mode for fd %d"), fd);
+         sys_error (_("cannot reset nodelay mode for fd %d"), fd);
          exit (127);
        }
     }
@@ -6970,7 +6970,7 @@ add_string:
                    sindex = t_index;
                    goto add_character;
                  }
-               report_error ("bad substitution: no closing \"`\" in %s", string+t_index);
+               report_error (_("bad substitution: no closing \"`\" in %s"), string+t_index);
                free (string);
                free (istring);
                return ((temp == &extract_string_error) ? &expand_word_error
index 3efcf32d68e9722024b6ca9d67f9e81b2aa5ac04..72ec06a2c1fd8dde92acea5e8ac773e35f1d061b 100755 (executable)
@@ -1,4 +1,4 @@
-BUILD_DIR=/usr/local/build/chet/bash/bash-current
+BUILD_DIR=/usr/local/build/bash/bash-current
 THIS_SH=$BUILD_DIR/bash
 PATH=$PATH:$BUILD_DIR
 
index abef9e1ad6ee3a1ca8c9f15469cba479ebf37a1c..5df708b17d10c8bdcb2c1619e63f5e5a82b2b54c 100644 (file)
@@ -85,7 +85,7 @@ command: usage: command [-pVv] command [arg ...]
 ./errors.tests: line 213: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
 ./errors.tests: line 216: trap: NOSIG: invalid signal specification
 ./errors.tests: line 219: trap: -s: invalid option
-trap: usage: trap [-lp] [arg signal_spec ...]
+trap: usage: trap [-lp] [[arg] signal_spec ...]
 ./errors.tests: line 225: return: can only `return' from a function or sourced script
 ./errors.tests: line 229: break: 0: loop count out of range
 ./errors.tests: line 233: continue: 0: loop count out of range
index edd2777b89e4544f02b2cb581b2506c4abc52903..ca33f09cb44aa45d418e4c9f1ebd6ab65b66a812 100644 (file)
@@ -1,8 +1,8 @@
 ./history.tests: line 4: history: -x: invalid option
-history: usage: history [-c] [-d offset] [n] or history -awrn [filename] or history -ps arg [arg...]
+history: usage: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]
 ./history.tests: line 6: history: cannot use more than one of -anrw
 ./history.tests: line 9: fc: -v: invalid option
-fc: usage: fc [-e ename] [-nlr] [first] [last] or fc -s [pat=rep] [command]
+fc: usage: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
     1  for i in one two three; do echo $i; done
     2  /bin/sh -c 'echo this is $0'
     3  ls
index b2fc219c272689ad5ecde5322e7c0f841a0983a0..5b0739bdbf70042da54e94f3b14647e6c8169648 100644 (file)
@@ -1,5 +1,5 @@
 ./shopt.tests: line 2: shopt: -z: invalid option
-shopt: usage: shopt [-pqsu] [-o long-option] optname [optname...]
+shopt: usage: shopt [-pqsu] [-o] [optname ...]
 --
 shopt -u cdable_vars
 shopt -s cdspell
index b0cefe98d338295d65f1ddb2fc1b50be4824203a..d484738c3b38067b4f8969287200e8b24f7af0d2 100644 (file)
--- a/version.c
+++ b/version.c
@@ -77,7 +77,7 @@ void
 show_shell_version (extended)
      int extended;
 {
-  printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE);
+  printf (_("GNU bash, version %s (%s)\n"), shell_version_string (), MACHTYPE);
   if (extended)
     printf (_("Copyright (C) 2006 Free Software Foundation, Inc.\n"));
 }
diff --git a/version.c~ b/version.c~
new file mode 100644 (file)
index 0000000..b0cefe9
--- /dev/null
@@ -0,0 +1,83 @@
+/* version.c -- distribution and version numbers. */
+
+/* Copyright (C) 1989-2005 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, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "stdc.h"
+
+#include "version.h"
+#include "patchlevel.h"
+#include "conftypes.h"
+
+#include "bashintl.h"
+
+extern char *shell_name;
+
+/* Defines from version.h */
+const char *dist_version = DISTVERSION;
+int patch_level = PATCHLEVEL;
+int build_version = BUILDVERSION;
+#ifdef RELSTATUS
+const char *release_status = RELSTATUS;
+#else
+const char *release_status = (char *)0;
+#endif
+const char *sccs_version = SCCSVERSION;
+
+/* Functions for getting, setting, and displaying the shell version. */
+
+/* Forward declarations so we don't have to include externs.h */
+extern char *shell_version_string __P((void));
+extern void show_shell_version __P((int));
+
+/* Give version information about this shell. */
+char *
+shell_version_string ()
+{
+  static char tt[32] = { '\0' };
+
+  if (tt[0] == '\0')
+    {
+      if (release_status)
+#if defined (HAVE_SNPRINTF)
+       snprintf (tt, sizeof (tt), "%s.%d(%d)-%s", dist_version, patch_level, build_version, release_status);
+#else
+       sprintf (tt, "%s.%d(%d)-%s", dist_version, patch_level, build_version, release_status);
+#endif
+      else
+#if defined (HAVE_SNPRINTF)
+       snprintf (tt, sizeof (tt), "%s.%d(%d)", dist_version, patch_level, build_version);
+#else
+       sprintf (tt, "%s.%d(%d)", dist_version, patch_level, build_version);
+#endif
+    }
+  return tt;
+}
+
+void
+show_shell_version (extended)
+     int extended;
+{
+  printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE);
+  if (extended)
+    printf (_("Copyright (C) 2006 Free Software Foundation, Inc.\n"));
+}